1

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

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

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

4

2 回答 2

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 卡和其他不同的芯片之间使用它。

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

于 2013-05-27T22:24:21.617 回答
1

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

于 2013-05-27T21:55:30.677 回答