Part Number: AM623
Hello,
I was wondering if you could help us out with some questions about BCDMA using the AM62x. We are using QNX 7.1 as our operating system and using BCDMA with interrupts to execute a callback function when the BCDMA transfer is complete. We’re able to use BCDMA to transfer data from the GPMC to RAM successfully, but we have some questions:
- I’ve been timing different parts of the BCDMA sequence which I’ve pasted below using QNX trace events:
- Best TRPD Push duration 3us Longest TRPD Push duration 11us Average 4us
- Best DMA duration 20us Longest DMA duration 40us Average 23us
- Measured from when the TRPD is pushed to the ring buffer to the time the callback function is executed.
- Best Completion Callback duration 6us Longest Completion Callback duration 17us Average 6us
- Pops the TRPD off the completion queue and checks to see if there are any issues.
- Best TRPD Pop duration 4us Longest TRPD Push duration 9us Average 4us
- Do you know why there’s such a huge deviation between the shortest and longest duration for these operations?
- Are these timings what you or your team would expect from these operations?
- Is it possible to get a better idea of how long just the DMA operation took?
- If we are using Packet DMA in a different process to handle network traffic, could that have an impact on these timings?
- How does the completion callback function get executed for QNX? I assume it doesn’t trigger an ISR because we can use mutex lock/unlock, printf, and other ISR unsafe functions, but I believe the DMA is sending an interrupt to the SoC that is being serviced by UDMA.
- The BCDMA is transferring different lengths of data each time, sometimes as large as 1024 bytes and as small as 4 bytes. An issue I’m seeing is in the case of small transfers the transfer time is much smaller than the callback function execution time.
- With the same GPMC settings as we use for the larger transfers, can you or your team share any strategies for handling large and small BCDMA transfers?
- I’ve read that we need to pop the transfer off the completion queue, but for our purposes we don’t care if the DMA was successful or not. Is it possible to not pop transfers off the completion buffer or will that cause issues with BCDMA?
Thanks for yours and your team’s help answering our BCDMA questions.
From,
Daniel Fettke