【发布时间】:2013-05-22 17:38:45
【问题描述】:
我有两个不同的设备要与Arduino 连接。一个Ethernet 屏蔽和一个轴编码器。第一个有SPI 模式0 和第二个SPI 模式2。它们冲突。这个问题有解决方案吗?
我使用不同的芯片选择引脚,两个设备单独工作完美。
我能做些什么来解决这个问题?有没有我想念的教程?
【问题讨论】:
标签: c eclipse optimization arduino spi
我有两个不同的设备要与Arduino 连接。一个Ethernet 屏蔽和一个轴编码器。第一个有SPI 模式0 和第二个SPI 模式2。它们冲突。这个问题有解决方案吗?
我使用不同的芯片选择引脚,两个设备单独工作完美。
我能做些什么来解决这个问题?有没有我想念的教程?
【问题讨论】:
标签: c eclipse optimization arduino spi
在启动与两个设备中的任何一个的新通信之前,您必须重新配置 SPI 模块。 如果您有两个可用的 SPI 端口,您还可以为每个设备使用不同的端口并相应地配置每个端口。
【讨论】:
您可以在两个片选之间随意共享 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卡和其他卡之间的速度不同。导致“开始很好,但后来我变得垃圾”。
【讨论】: