Explanation of i.MX28 DMA Transfer Size

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Explanation of i.MX28 DMA Transfer Size

604 Views
jschoen
Contributor III

We are looking for explanation of how the i.MX28 DMA-SSP works with regards to transfer size and the number of words transferred on SSP0 configured as a SPI Master.  Specifically need clarification of the relationship between HW_SSP_XFER_SIZE.XFER_COUNT which is the 4th register written when writing PIOWORDS, and HW_APBH_CH0_CMD.XFER_COUNT that is supplied as word 1 in the DMA channel command structure (Ref Manual Fig 6-2).  Assume WORD_SIZE is 16 bits always.

According to Reference Manual,

HW_SSP_XFER_SIZE.XFER_COUNT = number of WORD transfers, as referenced in WORD_LENGTH

HW_APBH_CH0_CMD.XFER_COUNT = number of BYTES to transfer. 

According to the Reference Manual, DMA_Word_1.XFER_COUNT is in bytes.  PIOWORD XFER_COUNT (i.e. HW_SSP_XFER_SIZE) is in Words (16 bits). Here are some results of experiments we conducted with different tranfer counts

A.  DMA_Word_1.XFER_COUNT=2 and PIOWORD XFER_COUNT = 2

Results in 16 SCLK pulses  on SSP0 interface.  --> implies DMA_Word_1.XFER_COUNT = 2 BYTES is right.

B.  DMA_Word_1.XFER_COUNT=4 and PIOWORD XFER_COUNT = 2

Results in 16 SCLK pulses  on SSP0 interface --> both DMA_Word_1.XFER_COUNT = 4 bytes and PIOWORD XFER_COUNT=2 words are not correct.  The reference manual is definitely wrong.

C.   DMA_Word_1.XFER_COUNT=2 and PIOWORD XFER_COUNT = 4

Results in 32 SCLK pulses on SSP0 interface --> Looks like PIOWORD XFER_COUNT is actually in bytes, not words?  Appears DMA_Word XFER_COUNT is a "don't care"? 

D.  DMA_Word_1.XFER_COUNT=4 and PIOWORD XFER_COUNT = 4

Results in 16 SCLK pulses on SSP0 interface --> Expected if the DMA_Word’s XFER_COUNT is useless.

E.  DMA_Word_1.XFER_COUNT=6 and PIOWORD XFER_COUNT = 2

Result : Transfer fails, which  implies BOTH need to be set, yet the correlation between them not well understood.

F.  DMA_Word_1.XFER_COUNT=6 and PIOWORD XFER_COUNT = 6:

Results in 48 SCLK pulses on SSP0 interface.  -->  3 words / 6 bytes are transferred.

Case (B/F) is what we really want to do.  From one DMA transfer to the next, we want to be able to specify different transfer sizes, but without having to write a bunch of PIOWORDS every time.  But it seems like we have to write the 4 PIOWORDS to change the HW_SSP_XFER_SIZE.XFER_COUNT register, rather than have the value from the DMA Words transfer to that count register. 

Labels (1)
Tags (1)
0 Kudos
1 Reply

324 Views
art
NXP Employee
NXP Employee

Seems that the only proven working case of DMA -> SPI transfer is as follows:

1) HW_SSP_CTRL1.WORD_LENGTH is always configured for the value of 8 bits (1 byte);

2) HW_SSP_XFER_SIZE.XFER_COUNT (or PIOWORD XFER_COUNT) and HW_APBH_CH0_CMD.XFER_COUNT (or DMA_Word_1.XFER_COUNT) are equal and representing the number of bytes to be transfered.

All other cases may not work adequately.


Have a great day,
Artur

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 Kudos