In a K02F based product there have been complication due to the e8011 eDMA errata and the workaround has not yet proved to be successful.
DMA Channel 0 is used for memory to memory transfers
DMA Channel 1 or UART0 Tx operation
DMA Channel 2 or UART1 Tx operation
With high activity the channel 0 failed occasionally with three main failure types:
1. The destination pointer would be corrupted (for example it would take one of the UART's pointers) and a channel error flag is set
2. A configuration error is signaled although the configuration problem is not visible
3. No error is signaled but the DONE bit is never set
After applying the workaround where the SADDR, DADDR, and NBYTES are checked and re-written if not read back identically the first two failure types are eliminated but the third type still occurs.
If DMA operation is not used on the UARTs there are no further issues (and the memory to memory transfers are reliable).
This gives the following two questions:
1. Why doesn't the particular workaround solve the third error type?
2. Is there reference code as to the typical workaround for verification?
The second potential workaround hasn't been tried yet since it is not fully clear:
1) Halt the DMA via the HALT bit or by disabling each channel.
2) Verify DMA is inactive via the ACTIVE bit.
3) Write the TCD information.
4) Re-enable the DMA (clear the HALT bit or enable each channel).
- to 2) There is an active bit for each channel - does each channel need to be checked for activity and what needs to be done if it is active? Wait until it no longer signals activity?
- to 4) Should the new DMA transfer be enabled before or after this step?
Thanks in advance