Dear All,
Hello. We would like to transfer the data from memory to ESAI_TX_FIFO via SDMA.
Q1.
There are two kinds of scripts of SDMA for the peripheral sending.
"mcu_2_shp" and "mcu_2_app"
Should I use mcu_2_shp?
Q2.
In the case to send 256 bytes data from memory to ESAI_TX_FIFO by script (mcu_2_shp);
The CHNERRn bits of the SDMAARM_EVTERR register is set and the SDMA interrupt sometimes inputs.
Is there a way of CHNERR's that it isn't set?
Q3.
When CHNERRn is set, are there bad effect such as the data drop out?
(May I mask the interrupt by the HIMASK bit?)
Best Regards,
Keita
Hello,
Please look at my comments below.
1.
"mcu_2_shp" is intended to configure module / controller registers directly by
the SDMA core ; "mcu_2_app" is used to DMA data. So, to send 256 bytes of data,
please use "mcu_2_app".
2.
CHNERR is used for channel overflow detection. To avoid channel overflow
please configure properly burst size and watermark.
3.
Generally it is possible to mask (disable) some channles in the INTRMASK - in order
to skip possible overflow of data for some active channel.
Note : "If any of the INTRMASK bits is set, the EVTERR register should also be scanned,
or at least cleared, since CHNERR[i] conditions generate interrupts which are indistinguishable
from H[i] interrupts."
Have a great day,
Yuri
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
Hi Yuri,
Thank you for your reply.
> 1.
> "mcu_2_shp" is intended to configure module / controller registers directly by
> the SDMA core ; "mcu_2_app" is used to DMA data. So, to send 256 bytes of data,
> please use "mcu_2_app".
Refer to attached file.
This document was test result with "mcu_2_shp" vs "mcu_2_app".
The transfer takes time when using "mcu_2_app".
When using "mcu_2_shp", the frame was sent in 2 clock cycle!
[Question]
Could you tell me the way of reducing the frame interval using "mcu_2_app"?
(Why did the frame interval spread by using "mcu_2_app"?)
Best Regards,
Keita
Hello,
Yes, "mcu_2_app" may have pauses between bursts because of
system bus arbitration delays, and - strictly speaking - i.MX6 default
settings are optimal, therefore it is not recommended to change it
to avoid influence on other modules of the i.MX6 SOC.
Regards,
Yuri.
Hi Yuri,
Thank you for your reply.
Refer to attached file again.
The frame interval was 30 clock by using "mcu_2_app"!
Therefore, my customer doesn't accept this transfer performance on their system.
[Q1]
Go back to my 1st topic.
Is it possible to use the "mcu_2_shp" script?
The performance of mcu_2_shp was too better than mcu_2_app.
And, the custom board can efficient transfer with mcu_2_shp by masking the interrupt (HIMASK bit).
[Q2]
My customer will use other many SDMA transfer, too
And, they worried about system bus arbitration delays.
Does the delay of SDMA transfer occur except mcu_2_app?
Could you tell me the cause and condition of the delay in detail?
Best Regards,
Keita
Hello,
1.
You may use the "mcu_2_shp" script if there is no data lost or data losing is not the problem.
2.
Arbitration delays are very application dependent and it is hard to provide detaied
considerations for such complicated system as i.MX6. Again - default settings
are quite reasonable.
Regards,
Yuri.