2013-05-27 90 views
1

我有兩個不同的設備,我想連接Arduino。一個Ethernet屏蔽和一個軸編碼器。第一個有SPI模式0和第二個SPI模式2.它們有衝突。有沒有解決這個問題的方法?Spi連接2個不同SPI模式的設備

我使用不同的芯片選擇引腳,這兩個器件單獨完美工作。

我能做些什麼來解決這個問題?有沒有我想念的教程?

回答

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

在啓動與這兩個設備中的任何一個的新通信之前,您必須重新配置SPI模塊。 如果您有兩個SPI端口可用,您也可以爲每個設備使用不同的端口並相應地配置每個端口。