Spi连接2个具有不同spi模式的设备

时间:2013-05-27 20:48:29

标签: c eclipse optimization arduino spi

我想要使用Arduino连接两个不同的设备。 Ethernet护罩和轴编码器。第一个具有SPI模式0和第二个SPI模式2.它们发生冲突。有这个问题的解决方案吗?

我使用不同的芯片选择引脚,这两个器件完全可以单独工作。

我该怎么做才能解决这个问题?有没有我想念的教程?

2 个答案:

答案 0 :(得分:3)

您可以根据需要在两个芯片选择之间共享SPI,每个芯片选择都有自己的模式。我这样做只需编写一个帮助函数代替数字写入,用于指定SPI完整配置的每个芯片选择。

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卡和其他卡之间的速度是不同的。导致“它开始好了,但我后来得到了垃圾”。

答案 1 :(得分:1)

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