This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DM8147 spi总线驱动多个spiflash的问题



我们用的DM8147的芯片,开发包是 IPNC_RDK 3.5的。

我们在第一个spi总线上接了两个spiflash,用的W25Q64的spiflash。spiflash芯片的片选引脚一个接 SPI[0]_SCS[0]n 另一个接 SPI[0]_SCS[1]n 。

我们使用u-boot和内核中的spi驱动,总是出现两个spiflash芯片同时被选中的情况。去掉一个spiflash芯片就可以正常使用,如果两个芯片的话就出现干扰。写入的数据出现错误。

请问spi总线控制器中我们该如何配置,使之实现一个总线上支持多个spiflash呢?

在u-boot中将 MCSPI_MODULCTRL 寄存器中 SINGLE 设置为1,PIN34 没有设置默认应该为0,我们将SINGLE和PIN34都设置为0是否正确?

同时选择总线上那个spi设备被选中时,是否是通过设置 MCSPI_CH(i)CONF 寄存器中的FORCE为1完成的?

请高人给解答一下吧!!!

  • 检查一下MCSPI_CH(0/1)CONF[EPOL]配置的是0还是1。

    Single,pin34都应该设为0. Single设为1也是可以的。

    你有保存两个片选同时有效的图吗?有的话,贴上来看一下。

  • MCSPI_CH(0/1)CONF[EPOL]配置的是片选信号低有效

    Single,pin34都设为0。

    上图是我在u-boot中运行sf probe 0:1时的情况。CH1为spi0:1的CS线,CH2为spi0:0的CS线。我操作其中一个的时候,另一个的片选也会被拉低。

    如果我运行sf probe 0:0时,spi0:0的片选信号会与上图中的CH1相同,spi0:1的片选信号与上图中的CH2相同。

    根据测量被选中芯片的CS信号和未选中的CS信号还是不同的,被选中的CS信号在两个时钟之间会拉高,未选中的CS一直是拉低(此时Single为0)。

  • 还有个问题DM8147上 SPI0:1的DMA通道是48和49吗,在Linux加载驱动时出现申请DMA通道出错导致SPI0:1初始化失败的问题。我发现代码中初始化SPI0:0和初始化SPI0:1时使用的DMA通道相同导致,spi0:1初始化失败。我将spi0:1初始化时使用的DMA通道修改为48和49时,同样出现请求DMA通道时出错。

  • jiang liu4 说:
    还有个问题DM8147上 SPI0:1的DMA通道是48和49吗,

    不是的。按下表:

  • 谢谢你的回复,安装这个表里的设置之后可以使用了。

    同时第一个问题,总线上多个spiflash CS引脚被同时拉低的问题也找到了。

    解决的方法:

    MCSPI_MODULCTRL 寄存器中 SINGLE 设置为1,并且将4个通道的MCSPI_CH(n)CONF寄存器都初始化。初始化MCSPI_CH(n)CONF之后相应通道的CS信号线才会拉高。这样CS信号线就可以正常工作了。