Hi,
for a customer project, we have ported our USB stack for using it on an OMAP L-138 platform for the RNDIS use case.
For this, we have written a new HAL layer for our stack supporting the TRANSPARENT and GENERIC RNDIS DMA mode.
During some stress test (create high CPU load and then performing HTTP requests on RNDIS again and again) we see some instability for the RX DMA.
When the issue occurs, we see that the rxcsr register shows a full FIFO, DMAEN is set, and from our logs we can also see that a new DMA was prepared correctly. But we never get an interrupt.
Detailed analysis has shown that it looks like the DMA is hanging in the middle of a transaction, because we see the following (example sequence):
(good case)
-->SW prepares DMA and enables DMA in rxcsr register
-->PC sends 512 bytes
-->PC sends 19 bytes
-->SW gets interrupt - DMA completed correctly
(fail case)
-->SW prepares DMA and enables DMA in rxcsr register
-->PC sends 512 bytes
-->PC sends 19 bytes
-->no interrupt, but we see that the 512 bytes are already transferred via DMA! But the short packet of 19 bytes is not transferred.
We have verified again and again if the sequence on preparing the EP for the DMA is correct. Any suggestion, any debug hints to find the root cause for this issue are welcome.
Thanks in advance,
Stefan