To use a SPORT interface on our product, we use 2 DMAs (SPORT0, DMA0 & DMA1). The DMAs are configured to use chained descriptors (with interrupt enabled on the last descriptor for the TX DMA, and on each descriptor on the RX DMA). These descriptors are sotred in external RAM. We are facing an issue where the DMA descriptor is not correctly fetched. One field of the descriptor in memory is skipped while fetching, resulting in configuration corruption.
As can be seen on the attached screenshot of the JTAG debug session, the DMA0_START_ADDR field contains the value of the DMA0_CONFIG and DMA0_X_COUNT, and all other fields are thus loaded with wrong values. The hexdump of the DMA descriptor in RAM (window with address 0x1A25368) is the address of the descriptor which was expected to be fetched. The DMA0_START_ADDR should be 0x019FE000, but the value fetched is 0x3CF7987 which is the next 32 bit field in memory.
The result is that the DMA generates errors.
The behavior is not always the same. Sometimes, the fetch error is on a different field, or different DMA (but it only affect the DMA of the associated SPORT).
We've tried to change the DMA to the DMA 2 & 3 but it didn't help (same corruption appears).
We are using other DMAs (on SPORT2 & 3, and numerous other peripherals), and no other corruption could be observed on these DMAs.
Is this a know bug ? Is there any workaround for this issue ?