We are developping a device based on IMX6S. The driver of eCSPI in the BSP does not support DMA transfer, so we have written a driver that support DMA. We write a test program that transmit data to SPI, but we found that no value was sent from the DMA to the Tx FIFO of the SPI.
We set the register as shown below.
- ECSPI2_CONREG (0x01F0E2F9)
BURST_LENGTH = 31
CHANNEL_SELECT = 0 (CS0)
DRCTL = 0
PRE_DIVIDER = 14
POST_DIVIDER = 2
CHANNEL_MODE = 15 (ALL CS Master)
SMC = 1
XCH = 0
HT = 0
EN = 1
- ECSPI2_CONFIGREG (0x00000100)
HT_LENGTH =0
SCLK_CTL = 0
DATA_CTL = 0
SS_POL = 0
SS_CTL = 1 (SS_CTL_CS0)
SCLK_POL = 0
SCLK_PHA = 0
- ECSPI2_INTREG (0x0)
: not setting
- ECSPI2_DMAREG (0xA09F0080)
RXTDEN = 1
RX_DMA_LENGTH = 32
RXDEN = 1
RX_THRESHOLD = 31
TEDEN = 1
TX_THRESHOLD = 0
- ECSPI2_STATREG (0x3)
: not setting
TDR = 1
TE =1
- ECSPI2_TESTREG (0x80000000)
LBC = 1
-------------------------------------------------
- 32 byte tx/rx buffer
- Script addr
tx : mcu2app, rx : app2mcu
Buffer Descriptor Mode
Interrupt + Warp + Done
- 4byte buswidth
- burstsize = 32
- set callback function
- event number
tx : 6, rx : 5
TX DMA : chan=0x2, mode=0xb0020, peripAddr=0x200c004
RX DMA : chan=0x3, mode=0xb0020, peripAddr=0x200c000
-------------------------------------------------
gpio set to high.
-------------------------------------------------
write (1 << tx_channel) to SDMA_HSTART(0x0C)
write (1 << rx_channel) to SDMA_HSTART(0x0C)
-------------------------------------------------
I tried to check sdma function in loopback mode.
Just write to 32bit data to ECSPI2_TXDATA(Transmit Data Register). then tx dma callback function indicated.
Do you have any idea where is the problem?
Hi Dong-Min
one can look at eCSPI5 example with sdma
imx6q.dtsi\dts\boot\arm\arch - linux-imx - i.MX Linux kernel
and documentation
fsl-imx-cspi.txt\spi\bindings\devicetree\Documentation - linux-imx - i.MX Linux kernel
Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
I am implementing at the firmware level.
I'm referring to i.MX6_PLATFORM_SDK and Linux's imx-spi.c.
such kind of development can be supported only through
Commercial Support and Engineering Services | NXP
Best regards
igor