我有兩個不同的設備,我想連接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端口可用,您也可以爲每個設備使用不同的端口並相應地配置每個端口。