【问题标题】:Spi connection with 2 devices with different spi modes与 2 个具有不同 spi 模式的设备的 Spi 连接
【发布时间】:2013-05-22 17:38:45
【问题描述】:

我有两个不同的设备要与Arduino 连接。一个Ethernet 屏蔽和一个轴编码器。第一个有SPI 模式0 和第二个SPI 模式2。它们冲突。这个问题有解决方案吗?

我使用不同的芯片选择引脚,两个设备单独工作完美。

我能做些什么来解决这个问题?有没有我想念的教程?

【问题讨论】:

    标签: c eclipse optimization arduino spi


    【解决方案1】:

    在启动与两个设备中的任何一个的新通信之前,您必须重新配置 SPI 模块。 如果您有两个可用的 SPI 端口,您还可以为每个设备使用不同的端口并相应地配置每个端口。

    【讨论】:

      【解决方案2】:

      您可以在两个片选之间随意共享 SPI,每个片选都有自己的模式。我这样做。只需编写一个帮助函数来代替指定 SPI 完整配置的每个片选的 digitalwrite。

      void cs1_low() {
          SPI.setDataMode(SPI_MODE0);
          SPI.setClockDivider(spiRate);
          digitalWrite(MP3_XCS, LOW);
      }
      
      void cs2_low() {
          SPI.setDataMode(SPI_MODE1);
          SPI.setClockDivider(spiRate/2)
          digitalWrite(MP3_XCS, LOW);
      }
      

      ...

      cs1_low();
      foo = SPI.transfer(bar);
      cs1_high(); //Deselect Control
      
      ...blah blah...
      
      cs2_low();
      foo = SPI.transfer(bar);
      cs2_high(); //Deselect Control
      

      在某些情况下,您可能需要考虑结算。我在SD cards 和其他不一样的芯片之间使用它。

      最好不要假设 SPI 处于您想要的模式,因为不同的库或中断可能已经改变了它。我见过很多次模式相同,但SD卡和其他卡之间的速度不同。导致“开始很好,但后来我变得垃圾”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多