답변:
다른 사람들이 말했듯이 SPI 및 I2C는 풀업 저항, 클록 주파수 등의 장거리에서 사용할 수 있습니다.
더 나은 노이즈 내성을 제공하는 주요 대안은 RS485 및 CAN 입니다. 이 두 가지 모두 잡음 문제를 최소화하기 위해 차동 라인을 사용하며 I2C 또는 SPI보다이 길이의 데이터 전송에 더 적합합니다. 그러나 많은 AVR에는 CAN 주변 장치가 내장되어있어 CAN을 훨씬 쉽게 사용할 수 있다고 생각하지 않습니다.
버스를 선택할 때 고려해야 할 가장 중요한 사항은 장치 간 통신에 사용하는 프로토콜에 CRC 또는 이와 동등한 프로토콜이 포함되어 메시지가 올바르게 수신되었는지 확인할 수 있도록하는 것입니다 (CAN의 일부로 패킷). 이를 고려하여 손상된 메시지를 재전송 할 수 있도록 프로토콜의 일부로 ACK / NACK 유형 응답을 갖는 것이 유용합니다.
몇 피트는 문제가되지 않습니다. 가능하다면 꼬인 전선을 사용하십시오. SPI 신호는 모두 단방향 인 반면 I2C 신호는 공유 회선에 있으므로 SPI는 I2C보다 버퍼링이 훨씬 쉽습니다 (필요한 경우).
AVR 마이크로 컨트롤러가 마스터 모드뿐만 아니라 I2C 및 SPI 슬레이브 모드를 처리 할 수 있습니까? (둘 다 필요하다)
장거리 I2C의 경우 "I2C 버스 리피터"솔루션을 찾고 싶을 수도 있습니다. I2C 또는 SPI 통신에서 찾을 수있는 최대 거리는 대부분 버스의 두 노드 사이의 거리가 아니라 총 버스 거리를 나타냅니다.
이러한 종류의 문제에 대해서는 RS485를 조사 할 수 있습니다. 차동 회선을 통해 통신하는 직렬 버스 프로토콜이므로 꼬인 전선을 사용할 때 노이즈 가능성이 최소화됩니다. 이 방법으로 매우 먼 거리에 도달 할 수 있습니다. 단점은 회로에 추가 RS485 엔코더 IC (매우 비싸지 않은 MAX485와 같은)가 필요하다는 것입니다.
I2C에 비해 SPI에서 아직 언급되지 않은 한 가지 장점은 모든 SPI 와이어가 단방향이며 항상 높거나 낮게 구동된다는 것입니다. 이를 통해 I2C에서 가능한 것보다 훨씬 빠른 통신이 가능하고 노이즈에 대한 민감도를 줄이고 간단한 게이트를 리피터로 사용할 수 있습니다. 또 다른 유용한 옵션은 간단한 비동기 통신입니다 (각 방향에 한 줄씩). 비동기 통신에서 볼 수있는 유일한 단점은 데이터를 교환하려면 일반적으로 안정적인 클럭으로 양쪽이 "깨어 있어야"한다는 것입니다.
내 자신의 프로젝트를 위해 3 와이어 약간 수정 된 SPI 프로토콜을 사용하여 결과가 만족 스러웠습니다. 10mbps에서 디스플레이 비트 맵 데이터 (때로는 데이터 손상이 크지 않은 경우)를 2.5mbps에서 어려움없이 보냅니다.
I2C와 SPI는 모두 단거리 운반 (몇 인치)을 위해 설계되었지만, 적절한 케이블과 전체 버스 커패시턴스에주의를 기울여 장거리 운반에 활용할 수 있습니다.
SPI에 대한 경험이 거의 없지만 풀업 저항에 적합한 크기를 항상 계산해야한다는 점을 고려하면 I2C는 그리 어렵지 않습니다. 또한 사용하기 쉬운 전용의 저렴한 I2C 버퍼가 있습니다. 그러나 여전히 네트워크에 적절한 크기의 풀업 저항을 사용해야합니다.
I2C를 사용하여 풀업 저항과 고품질의 차폐 된 트위스트 케이블 만 사용하여 8 피트 거리에서 두 개의 AVR간에 네트워크를 연결했습니다.
I2C를 통해 통신하는 스타 네트워크에서 약 80 개의 AVR 기반 노드와 관련된 프로젝트를 진행했습니다. 그것은 완전히 혼란스럽고 결국 작동하지 않았습니다. 모든 노드에 대한 업데이트를 얻는 데 몇 초가 걸리고 하나의 잘못된 연결로 인해 전체 네트워크가 끊어 질 수 있습니다. 마지막으로 노드를 만든 사람과 이야기를 나누면서 그는 이와 같은 프로젝트에 I2C 사용을 중단했다고 말했습니다. 불행히도 나는 왜 구체적으로 I2C가 여기에 부적절했는지 모른다.
그 짧은 거리는 쉬워야합니다. 당신이 할 수있는 일은 커패시턴스 및 라인 임피던스 측면에서 거리와 케이블 링이 무엇을 의미하는지 파악하고 어떤 주파수 (상승 / 하강 시간)를 통과 할 수 있는지 확인하는 것입니다. 특정 지점을 넘어서 전송 라인으로 취급하는 것이 가장 좋습니다. 불량한 것으로 보이면 실제로 EIA-232 또는 422와 같은 다른 직렬 회선으로 전환 할 수 있습니다. 이는 양쪽 끝에 여분의 칩이 있음을 의미하지만 멀리 늘어납니다. 정말 빨리 가고 싶을 때는 더 많은 것이 필요합니다 (이더넷, 라디오 또는 레이저를 세지 마십시오).