Arduino과 연결할 두 개의 다른 장치가 있습니다. Ethernet 실드 및 샤프트 엔코더. 첫 번째는 SPI 모드 0이고 두 번째 SPI 모드 2는 충돌합니다. 이 문제에 대한 해결책이 있습니까?다른 spi 모드를 사용하는 2 개의 장치와의 Spi 연결
서로 다른 칩 선택 핀을 사용하며 두 장치가 완벽하게 작동합니다.
이 문제를 해결하려면 어떻게해야합니까? 제가 놓친 튜토리얼이 있습니까?
Arduino과 연결할 두 개의 다른 장치가 있습니다. Ethernet 실드 및 샤프트 엔코더. 첫 번째는 SPI 모드 0이고 두 번째 SPI 모드 2는 충돌합니다. 이 문제에 대한 해결책이 있습니까?다른 spi 모드를 사용하는 2 개의 장치와의 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 카드와 다른 카드 사이의 속도는 다릅니다. "잘 시작되었지만 나중에는 폐물이됩니다."
두 장치 중 하나와 새로운 통신을 시작하기 전에 SPI 모듈을 재구성해야합니다. 두 개의 SPI 포트를 사용할 수있는 경우 모든 장치마다 다른 포트를 사용하고 그에 따라 각각의 포트를 구성 할 수도 있습니다.