我有两个不同的设备,我想连接Arduino。一个Ethernet屏蔽和一个轴编码器。第一个有SPI模式0和第二个SPI模式2.它们有冲突。有没有解决这个问题的方法?Spi连接2个不同SPI模式的设备
我使用不同的芯片选择引脚,这两个器件单独完美工作。
我能做些什么来解决这个问题?有没有我想念的教程?
我有两个不同的设备,我想连接Arduino。一个Ethernet屏蔽和一个轴编码器。第一个有SPI模式0和第二个SPI模式2.它们有冲突。有没有解决这个问题的方法?Spi连接2个不同SPI模式的设备
我使用不同的芯片选择引脚,这两个器件单独完美工作。
我能做些什么来解决这个问题?有没有我想念的教程?
在两种芯片选择之间,您可以随心所欲地共享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卡和其他卡之间的速度不同。导致“开始,但我后来得到垃圾”。
在启动与这两个设备中的任何一个的新通信之前,您必须重新配置SPI模块。 如果您有两个SPI端口可用,您也可以为每个设备使用不同的端口并相应地配置每个端口。