I’m very sorry, but the mistake was on our side. Every Zynq/CZ207 +TCP project must
and not the x_2 version, which uses
The problem is caused by the combination of memory caching and DMA: cache flushing/loading is always done per 32-bytes
will allocate just enough bytes for each buffer. The last word of a buffer may get corrupted if an adjacent buffer gets flushed or reloaded.
will align all buffers statically and keep enough space between them. Although this was a bit exaggerated:
The following configuration also works OK, it keeps all buffers 32-byte aligned :
/* See FreeRTOS-Plus-TCP/portable/NetworkInterface/Zynq/NetworkInterface.c : */
#define niBUFFER_1_PACKET_SIZE 1568 /* Use a multiple of 32 */
static uint8_t ucNetworkPackets[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS * niBUFFER_1_PACKET_SIZE ]
__attribute__ ( ( aligned( 32 ) ) );
in terms of
may cause problems in case the macro’s contain
casts. My my compiler understood it wrong.