RPi의 I2C 버스 최대 장치 로딩 / 팬 아웃?

Aug 19 2020

나는 RPi4를 가지고 있고 4 개의 MCP23017 gpio 확장기와 함께 I2C 버스를 사용하고 있는데 이것은 잘 작동합니다. 내 의도는 8 개의 MCPMCP23017 장치를 사용하는 것입니다.이 장치는 주소 지정이 3 비트뿐이므로 1 개의 I2C 버스에서 최대 값입니다. 내 질문은 RPi의 I2C 버스에 최대 장치로드 / 팬 아웃이 있습니까?

답변

2 Milliways Aug 20 2020 at 14:37

I²C를 이해하지 못합니다. 이것은 개방형 드레인 버스이므로 팬 아웃 개념이 적용되지 않습니다. 로드는 커패시턴스에 의해 더 많이 제한되며, 이는 장치 수 외에도 버스 길이 및 레이아웃과 관련이 있습니다. 낮은 값의 풀업 또는 버퍼링을 활용하여 장치 수를 최대화 할 수 있습니다.

버퍼링 및 멀티플렉싱을 참조하십시오. https://en.wikipedia.org/wiki/I²C

"시스템에 I2C 장치가 많을 때 대형 버스 세그먼트를 더 작은 세그먼트로 분할하기 위해 버스 버퍼 또는 멀티플렉서를 포함해야 할 수 있습니다. 이는 버스 세그먼트의 커패시턴스를 허용 가능한 값 이하로 유지하는 데 필요할 수 있습니다. 같은 주소를 가진 여러 장치를 멀티플렉서로 분리 할 수 ​​있습니다. "

합리적인 레이아웃을 사용하면 8 개의 MCPMCP23017 장치에로드 문제가 없어야합니다.

GeertVc Aug 21 2020 at 12:45

너무 높은 버스 커패시턴스, 너무 높은 팬 아웃 (이 경우에 관련된 경우 ...)이 걱정되거나 RPi에 8 개 이상의 MCP23017 IO 확장기를 연결하려는 경우 매우 간단한 솔루션이 있습니다. : PCA9548 (8 개의 I2C 버스) 또는 이와 유사한 I2C 스위치를 RPi의 원래 I2C 핀에 연결합니다. Linux 커널은 몇 년 동안이를 암시 적으로 지원하므로 파일에 다음 줄을 추가하면됩니다 /boot/config.txt(as sudo).

dtoverlay=i2c-mux,pca9548,addr=0x70

이렇게하면 추가 장치를 연결할 수있는 8 개의 I2C 버스가 추가로 제공됩니다 ( i2cdetect -l추가 버스 및 해당 이름을 확인하는 데 사용). 당신이해야 할 유일한 것은 당신의 코드가되는 소프트웨어 알리는 것입니다 /dev/i2c-x귀하의 I2C 장치가 연결되어있는 장치.

몇 가지 장점 :

  • 버스 커패시턴스 확산
  • I2C MUX의 스위칭 명령에 대해 신경 쓸 필요가 없습니다. Linux 커널 모듈은 /dev/i2c-x버스 를 기반으로이 작업을 수행합니다 .
  • 총 64 개의 MCP23017 장치를 RPi에 추가 할 수 있습니다 (간접적으로). 즉, 총 64 x 16 = 1024 개의 IO (무엇을 더 원하십니까 ...)
  • 중요 : I2C MUX의 "다른 쪽에서"전원 공급 장치를 혼합하여 작업 할 수 있습니다. 이것은 3V3 일 수 있지만 1V8 또는 5V 일 수도 있습니다. 매우 편리합니다! I2C MUX의 프런트 엔드는 입력 / 출력 핀의 손상을 방지하기 위해 RPi (즉, 3V3)의 전원 공급 장치를 준수해야합니다.

불리:

예, 한 가지가 있습니다. 프로젝트에 하드웨어 (제한적 임에도 불구하고)를 추가해야하지만이 작은 추가 노력으로 많은 것을 얻을 수 있습니다.