Очень хорошо работает (сам ведёт отладку, подключаясь через OpenOCD
и к отладочному последовательному порту): 
Solved. The Modbus TCP server answers on the wire.
Root cause
The network buffer pool was 2 bytes too small for what the stack requests:
Bytes
ipTOTAL_ETHERNET_FRAME_SIZE (MTU 586 + Ethernet header 14 + FCS 4 + optional 802.1Q tag 4) — what prvTCPBufferResize() asks for 608
What our uxNetworkInterfaceAllocateRAMToBuffers() advertised (sized as MTU + 14) 606
BufferAllocation_1.c compares the request against that limit before touching the free list, so every TCP transmit that needed a fresh buffer was refused with 12 of 16 buffers idle — the reply stayed in txStream, the segment was marked outstanding, and the retransmit timer backed off (the 9 s → 7 s I measured). ICMP never hit this path because it reuses the received buffer.
Fix: EthIfFrameMaxSize is now ipTOTAL_ETHERNET_FRAME_SIZE, the same expression the stack uses.
ИИ нашёл почему не работал Модбас за 9 минут.