@Slacky - Доработал немного:

Выкинул хлам вокруг BL0942, типа всякие файлы "app_uart.c" и т.д.
Заменили на простейшие команды, типа :
C:
// Step 1 sec
int32_t app_monitoringCb(void *arg) {
REG_ADDR16(0x90) = 0xAA58; // Send cmd: "Read full packet"
return 0;
}
// Task
void monitoring_handler(void) {
int32_t power;
app_monitoring_t *pkt = (app_monitoring_t*)urxb.data;
if(reg_dma_rx_rdy0 & FLD_DMA_IRQ_UART_RX) { // new data ?
reg_uart_status0 |= FLD_UART_CLEAR_RX_FLAG | FLD_UART_RX_ERR_FLAG;
if(urxb.dma_len == PKT_SIZE
&& pkt->head == HEAD
&& checksum((uint8_t *)pkt, PKT_SIZE) == pkt->crc) {
....
Всё само аппаратно заливается в буфер для парсинга без участия CPU...
Не понимаю - зачем CPU выполнять тысячи лишних команд, когда у него есть правильные встроенные в кристалл контроллеры...
Осталось проверить, как будет происходить автоматическое переключение в ZHA разрядности показаний мощности (Power) ...
Пока три диапазона авто-переключения разрядности показометра: 0..327.67W, 32.767..327.67W, 327.67..3276.7W
Остальное пока работает без всяких "причуд" (quirks) - прекрасно понимает всякие ZCL_ATTRID_AC_CURRENT_MULTIPLIER, ..., ZCL_ATTRID_AC_POWER_DIVISOR,....