SPI 또는 I2C : 긴 버스에 사용


36

여러 AVR이 버스를 통해 서로 대화해야하는 프로젝트를 고려하고 있습니다. 그것들은 6 피트 정도 떨어져 있습니다.

I2C와 SPI 모두 버스를 통해 일련의 마이크로 통신을 가능하게하는 것처럼 보이지만, 얼마나 오래 걸리는지에 대해서는 전혀 이야기하지 못했습니다. 누구든지 몇 피트 거리 에서이 프로토콜을 연결하려고 했습니까?


한 번에 케이블을 통해 I2C 버스를 실행했습니다. 뒤늦게, 대신에 CAN 또는 RS-485를 사용해야했습니다 (양쪽에 마이크로 컨트롤러가 있음).
Nick Alexeev

답변:


19

다른 사람들이 말했듯이 SPI 및 I2C는 풀업 저항, 클록 주파수 등의 장거리에서 사용할 수 있습니다.

더 나은 노이즈 내성을 제공하는 주요 대안은 RS485CAN 입니다. 이 두 가지 모두 잡음 문제를 최소화하기 위해 차동 라인을 사용하며 I2C 또는 SPI보다이 길이의 데이터 전송에 더 적합합니다. 그러나 많은 AVR에는 CAN 주변 장치가 내장되어있어 CAN을 훨씬 쉽게 사용할 수 있다고 생각하지 않습니다.

버스를 선택할 때 고려해야 할 가장 중요한 사항은 장치 간 통신에 사용하는 프로토콜에 CRC 또는 이와 동등한 프로토콜이 포함되어 메시지가 올바르게 수신되었는지 확인할 수 있도록하는 것입니다 (CAN의 일부로 패킷). 이를 고려하여 손상된 메시지를 재전송 할 수 있도록 프로토콜의 일부로 ACK / NACK 유형 응답을 갖는 것이 유용합니다.


어느 쪽이든 작동하는 것처럼 들립니다. 대부분의 AVR이 추가 구성 요소를 추가하지 않고 기본적으로 지원하기 때문에이 두 가지 특정 프로토콜을 주로 생각합니다. 그렇지 않으면 RS485 또는 CAN이 좋은 선택입니다.
edebill 2009

스루 홀 패키지로 제한되지 않는 경우 ST는 비용 효율적이고 강력한 STM32 및 STM8 마이크로 컨트롤러를 CAN과 함께 사용할 수 있으며 NXP는 다양한 LPC17xx 마이크로 컨트롤러를 보유하고 있으며 그 밖의 다른 제품도 몇 가지 있습니다. CAN은 많은 마이크로 컨트롤러에서 점점 일반화되고 있으며 저렴 해지고 있습니다.
DrAl

1
실제로 CAN 리시버가 내장 된 일부 AVR이 있지만 다른 공급 업체와 마찬가지로 칩의 제한된 하위 세트에만 있습니다.
davr

1
Microchip에는 CAN이있는 몇 개의 PIC가 있습니다. microchip.com/wwwproducts/Devices.aspx?dDocName=en010302 . 그래도 그것들은 특히 Microchip의 C18 / C30 라이브러리에서 프로그래밍하기에는 약간 "펑키"한 것임을 인정할 것입니다. 코드 검토에서 우리는 구현의 특성으로 인해 읽기가 매우 어려운 일부 라이브러리 코드, 즉 수신 버퍼로 사용되는 전송 버퍼, 실제로 나타내는 것과 반대되는 플래그 이름을 관찰했습니다. 마이크로 컨트롤러 개발에 익숙하지 않은 사람에게는 권장하지 않는 것이 있습니다.
J. Polfer 12

2
CAN과 RS-485는 실제로 사과와 오렌지입니다. CAN은 비트 레벨 프로토콜과 물리 전기 계층 (PHY)을 정의합니다. RS-485는 물리적 계층 사양 일 뿐이며 프로토콜에 대해서는 아무 것도 지정하지 않습니다. RS-485 PHY에서 실제 프로토콜을 찾거나 구현하는 것은 전적으로 사용자의 책임입니다. CAN은 자동차 및 제조 산업에서 주로 사용되는 고 소음 환경을 위해 설계되었습니다. 이 프로토콜은 다소 복잡한 메시지 전달 시스템이며 오버 헤드는 높지만 (실제 데이터 전송률은 낮음) 데이터 무결성은 높습니다.
Mark

10

몇 피트는 문제가되지 않습니다. 가능하다면 꼬인 전선을 사용하십시오. SPI 신호는 모두 단방향 인 반면 I2C 신호는 공유 회선에 있으므로 SPI는 I2C보다 버퍼링이 훨씬 쉽습니다 (필요한 경우).

AVR 마이크로 컨트롤러가 마스터 모드뿐만 아니라 I2C 및 SPI 슬레이브 모드를 처리 할 수 ​​있습니까? (둘 다 필요하다)


2
꼬인 전선 ?? I2C 데이터와 클럭 라인을 비틀 지 마십시오! SPI를 사용하면 이것은 문제가되지 않지만 신호선이 균형이 맞지 않는 한 신호선을 비틀 지 않습니다.이 경우 비틀림이 매우 좋습니다.
Wouter van Ooijen

절대 말하지 마라. 나는 (때문에 왜곡하지의) 대신 잡음 전력 전자에 작은 유도 결합의 데이터 사이의 + 시계 애니데이 (때문에 왜곡의) 작은 용량 성 결합을 것
제이슨 S

4
죄송합니다. 가장 동의하지 않습니다. 1 상태에서 라인의 임피던스는 다소 높습니다. 그것이 보였고 실패한 것을 보았습니다. 최선의 선택은 I2C 라인의 양쪽에 저 전류 접지선을 두는 것입니다.
Wouter van Ooijen

10

장거리 I2C의 경우 "I2C 버스 리피터"솔루션을 찾고 싶을 수도 있습니다. I2C 또는 SPI 통신에서 찾을 수있는 최대 거리는 대부분 버스의 두 노드 사이의 거리가 아니라 총 버스 거리를 나타냅니다.

이러한 종류의 문제에 대해서는 RS485를 조사 할 수 있습니다. 차동 회선을 통해 통신하는 직렬 버스 프로토콜이므로 꼬인 전선을 사용할 때 노이즈 가능성이 최소화됩니다. 이 방법으로 매우 먼 거리에 도달 할 수 있습니다. 단점은 회로에 추가 RS485 엔코더 IC (매우 비싸지 않은 MAX485와 같은)가 필요하다는 것입니다.


RS485는 그런 일을하는 좋은 방법입니다.
Scott Murphy

RS485는 RS232와 다른 두 가지 측면, 즉 물리적 차동 로직 레벨과 멀티 마스터 측면이라는 점을 명심하십시오. 이 중 하나를 선택하고 선택할 수 있습니다. RS485의 멀티 드롭 부분에 들어 가지 않고 지점 간 연결을 위해 UART (RS232)와 함께 LVDS 및 RS485 변환기를 모두 사용했습니다.
Jason S

2
btw RS485는 프로토콜이 아닙니다! 물리 계층 만 정의합니다. RS485를 통해 SPI를 확실히 사용할 수 있습니다 !!! 필요한 경우 통신을 SPI 모드로 유지하는 것이 깔끔한 솔루션입니다 (필자는 원격 ADC 또는 이와 유사한 것으로 가정합니다). RS485 over
S485를 사용

8

I2C에 비해 SPI에서 아직 언급되지 않은 한 가지 장점은 모든 SPI 와이어가 단방향이며 항상 높거나 낮게 구동된다는 것입니다. 이를 통해 I2C에서 가능한 것보다 훨씬 빠른 통신이 가능하고 노이즈에 대한 민감도를 줄이고 간단한 게이트를 리피터로 사용할 수 있습니다. 또 다른 유용한 옵션은 간단한 비동기 통신입니다 (각 방향에 한 줄씩). 비동기 통신에서 볼 수있는 유일한 단점은 데이터를 교환하려면 일반적으로 안정적인 클럭으로 양쪽이 "깨어 있어야"한다는 것입니다.

내 자신의 프로젝트를 위해 3 와이어 약간 수정 된 SPI 프로토콜을 사용하여 결과가 만족 스러웠습니다. 10mbps에서 디스플레이 비트 맵 데이터 (때로는 데이터 손상이 크지 않은 경우)를 2.5mbps에서 어려움없이 보냅니다.


이것은 매우 오래된 답변이지만 수정 된 SPI 프로토콜을 전송 한 거리에 대해 말씀 하시겠습니까? (질문의 핵심은 ...)
Daniel Griscom

@DanielGriscom : 일반적으로 약 3 피트, 끔찍한 인상적인 케이블 연결이지만 때로는 더 깁니다.
supercat

6

I2C와 SPI는 모두 단거리 운반 (몇 인치)을 위해 설계되었지만, 적절한 케이블과 전체 버스 커패시턴스에주의를 기울여 장거리 운반에 활용할 수 있습니다.

SPI에 대한 경험이 거의 없지만 풀업 저항에 적합한 크기를 항상 계산해야한다는 점을 고려하면 I2C는 그리 어렵지 않습니다. 또한 사용하기 쉬운 전용의 저렴한 I2C 버퍼가 있습니다. 그러나 여전히 네트워크에 적절한 크기의 풀업 저항을 사용해야합니다.

I2C를 사용하여 풀업 저항과 고품질의 차폐 된 트위스트 케이블 만 사용하여 8 피트 거리에서 두 개의 AVR간에 네트워크를 연결했습니다.


멀티 컨덕터 케이블을 사용하여 I2C를 사용하지 않으면 커패시턴스로 인해 버스 속도가 크게 느려질 수 있습니다.
Jason S

6

많은 사람들이 제안했듯이 I2C와 SPI는 근거리에 가장 적합합니다. 이러한 인터페이스를 사용하여 솔루션을 구현할 수는 있지만 다른 "보다 표준적인"솔루션 (예 : 이더넷, RS485, CAN 등)을 찾는 것이 좋습니다. -특히 케이블을 사용하여 마이크로 컨트롤러 사이의 6 피트 거리에 도달하려는 경우.


6

참고로 무선 Nintendo Wii 리모컨과 Nunchuck 컴패니언 간의 인터페이스는 길이가 약 3 피트 인 케이블을 통해 I2C를 사용합니다. 총 길이가 약 6 피트까지 연장되는 3 피트 연장 케이블도 있습니다. 설정과 정확히 동일하지는 않지만 (두 장치 만 함께 연결됨) 널리 사용되는 소비자 제품의 케이블을 통한 I2C의 예입니다.


4

I2C를 통해 통신하는 스타 네트워크에서 약 80 개의 AVR 기반 노드와 관련된 프로젝트를 진행했습니다. 그것은 완전히 혼란스럽고 결국 작동하지 않았습니다. 모든 노드에 대한 업데이트를 얻는 데 몇 초가 걸리고 하나의 잘못된 연결로 인해 전체 네트워크가 끊어 질 수 있습니다. 마지막으로 노드를 만든 사람과 이야기를 나누면서 그는 이와 같은 프로젝트에 I2C 사용을 중단했다고 말했습니다. 불행히도 나는 왜 구체적으로 I2C가 여기에 부적절했는지 모른다.


1
I2C는 SPI보다 훨씬 느리다 ... 충돌시 프로젝트가 중재를 관리하는 방법에 있었을 수도있다.
Jason S

2

그 짧은 거리는 쉬워야합니다. 당신이 할 수있는 일은 커패시턴스 및 라인 임피던스 측면에서 거리와 케이블 링이 무엇을 의미하는지 파악하고 어떤 주파수 (상승 / 하강 시간)를 통과 할 수 있는지 확인하는 것입니다. 특정 지점을 넘어서 전송 라인으로 취급하는 것이 가장 좋습니다. 불량한 것으로 보이면 실제로 EIA-232 또는 422와 같은 다른 직렬 회선으로 전환 할 수 있습니다. 이는 양쪽 끝에 여분의 칩이 있음을 의미하지만 멀리 늘어납니다. 정말 빨리 가고 싶을 때는 더 많은 것이 필요합니다 (이더넷, 라디오 또는 레이저를 세지 마십시오).


2

클럭 속도를 제어 할 수 있고 고속 데이터 전송이 필요하지 않으면 클럭 속도를 늦추십시오. 이렇게하면 노이즈에 덜 민감합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.