AURIX™ MCU: DMA channel 'Transfer Request Lost' error – KBA235712
A DMA channel Transfer Request Lost (TRL) event is generated at the end of the DMA transaction in single mode even if data is correctly transferred. This happens in specific configurations when the DMA is used to transfer data from internal memory to a communication functional block FIFO (e.g., QSPI).
In single mode (CHCFGRc.CHMODE = 0), the DMA disables servicing hardware requests (TSRc.HTRE = 0) as soon as it finishes the DMA transaction.
In TC3xx devices, DMA is enhanced by reporting a TRL interrupt if a HW request is received when the DMA channel is disabled for HW requests (TSRc.HTRE = 0).
Note: Disabling the TRL interrupt (TSRc.ETRL = 0) will not prevent the interrupt generation.
The example in the figure below shows that in total (n+1) interrupts are triggered by the QSPI (in TxFIFO single move mode) in order to transfer (n) words. The last interrupt (#) occurs after the DMA transaction is complete (TSRc.HTRE = 0); as a result, DMA will generate a TRL in this case.
It is possible to avoid the TRL event by implementing a linked list with a dummy DMA transaction. This DMA transaction should transfer data to an unused RAM memory when the last interrupt (#) is triggered. Use the following DMA channel configuration:
- DMA transaction:
- Select linked list mode (ADICRz.SHCT = 0xC).
- Select continuous mode (CHCFGRz.CHMODE = 0x1), TSRz.HTRE will remain 1 after the DMA transaction.
- Point to the dummy transaction (SHADRz = dummy_tcs;).
- Use a dummy DMA transaction (dummy_tcs) that transfers a word to an unused RAM location. This transaction will be triggered by the last interrupt.
For more details, see the "Data Communication” and “TXFIFO Interrupt Generation” sections in the User’s manual.
Note: This KBA applies to the following series of AURIX™ MCUs:
- AURIX™ TC3xx series