AnsweredAssumed Answered

IMX6DL ecspi-slave 与单片通信问题

Question asked by Yi Liu on Apr 21, 2015
Latest reply on May 6, 2015 by Yi Liu

目前我们采用IMX6DL+MCU的方式方案,用ECSPI3与单片机连接,但遇到无法通信的问题.

我们打印了相关寄存器的值,还请帮忙检查下配置是否正确:

 

1. ECSPI3相关的主要寄存器值如下:

          ECSPI_CTRL=0x08000001

          ECSPI_CONFIG=0x00100111

          ECSPI_INT=0x00000008

          ECSPI_DMA=0x00000000

          ECSPI_PERIOD=0x00000000

 

2. ECSPI3相对应的IOMUX PAD配置如下:

 

          MX6DL_PAD_DISP0_DAT0__ECSPI3_SCLK,

          MX6DL_PAD_DISP0_DAT1__ECSPI3_MOSI,

          MX6DL_PAD_DISP0_DAT2__ECSPI3_MISO,

          MX6DL_PAD_DISP0_DAT3__ECSPI3_SS0, // SPI3_CS0

          MX6DL_PAD_DISP0_DAT7__GPIO_4_28, // SPI3_REQ


          #define MX6DL_PAD_DISP0_DAT0__ECSPI3_SCLK   IOMUX_PAD(0x03C4, 0x00B0, 2, 0x0000, 0, MX6DL_ECSPI_PAD_CTRL)

          #define MX6DL_PAD_DISP0_DAT1__ECSPI3_MOSI   IOMUX_PAD(0x03C8, 0x00B4, 2, 0x0000, 0, MX6DL_ECSPI_PAD_CTRL)

 

 

          #define MX6DL_PAD_DISP0_DAT2__ECSPI3_MISO   IOMUX_PAD(0x03F4, 0x00E0, 2, 0x0000, 0, MX6DL_ECSPI_PAD_CTRL)

 

 

          #define MX6DL_PAD_DISP0_DAT3__ECSPI3_SS0    IOMUX_PAD(0x0408, 0x00F4, 2, 0x0000, 0, MX6DL_ECSPI_PAD_CTRL)
          #define MX6DL_PAD_DISP0_DAT7__GPIO_4_28     IOMUX_PAD(0x0418, 0x0104, 5, 0x0000, 0, MX6DL_GPIO_PAD_CTRL_ODE)
        
          3.下方是一些补充信息:

     在调试IMX6DL ECSPI3(slave)同MCU(master)间通讯时,从ECSPI3 RXDATA读到的数据同MCU发送的数据没有一个字节是相同的。我已打fsl网站推荐的imx6 spi slave补丁包。也基本确认ECSPI3 IOMUX配置和相关控制寄存器配置(也许理解不透彻)。敬请指点我该如何跟踪和分析该问题。

     通讯握手时序大体如下:

     1). IMX6接收数据:

     master(MCU)将CS拉低,slave(IMX6 )立即将一GPIO脚拉低通知MCU已经准备接收,随后master开始发送数据,一旦数据发送完成,master会马上将cs拉高。

     2). IMX6发送数据:

slave(IMX6 )将一GPIO脚拉低通知MCU有数据要发送,master(MCU)将CS拉低,随后master开始发送数据,一旦数据发送完成,master会马上将cs拉高。

Outcomes