2013-05-27 2 views
1

Arduino과 연결할 두 개의 다른 장치가 있습니다. Ethernet 실드 및 샤프트 엔코더. 첫 번째는 SPI 모드 0이고 두 번째 SPI 모드 2는 충돌합니다. 이 문제에 대한 해결책이 있습니까?다른 spi 모드를 사용하는 2 개의 장치와의 Spi 연결

서로 다른 칩 선택 핀을 사용하며 두 장치가 완벽하게 작동합니다.

이 문제를 해결하려면 어떻게해야합니까? 제가 놓친 튜토리얼이 있습니까?

답변

3

두 개의 칩 선택 사이에서 원하는대로 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 카드와 다른 카드 사이의 속도는 다릅니다. "잘 시작되었지만 나중에는 폐물이됩니다."

1

두 장치 중 하나와 새로운 통신을 시작하기 전에 SPI 모듈을 재구성해야합니다. 두 개의 SPI 포트를 사용할 수있는 경우 모든 장치마다 다른 포트를 사용하고 그에 따라 각각의 포트를 구성 할 수도 있습니다.