답변:
센서 허브 배열
이 시나리오에는 두 개의 I²C 버스가 있습니다. 로컬 버스 와 메인 버스 라고합시다 . 로컬 버스의 목적은 많은 센서를 마이크로 컨트롤러 (μC)에 연결하는 것입니다. μC의 목적은 센서를 폴링하고 센서에서 정보를 수집하며 특정 이벤트를 감지하는 것입니다. 이러한 역할을하는 μC를 센서 허브 라고 합니다. 센서 허브는 고차 기능을 담당하지 않습니다. 이를위한 강력한 메인 프로세서가 있습니다. 메인 버스는 센서 허브를 메인 프로세서에 연결합니다. 따라서 센서 허브 μC는 로컬 I²C 버스의 마스터이고 I²C 메인 버스의 슬레이브입니다.
SPI 및 I²C
원래 게시물에 링크 된 PIC는 SPI와 I²C간에 핀을 공유하지 않습니다. 그러나 하드웨어 SPI 및 I²C에 동일한 핀을 사용하는 다른 PIC도 있습니다. 둘 다 동일한 MSSP 주변 장치로 구현되기 때문입니다. PIC에 두 개의 개별 MSSP 주변 장치가있는 경우 하나는 하드웨어 SPI에 사용될 수 있고 다른 하나는 하드웨어 I²C에 사용할 수 있습니다.
둘 이상의 버스가 필요한 가장 일반적인 이유는 다른 속도로 실행되는 장치가 있기 때문입니다. 원래 I²C는 최대 100kHz에서 실행되었습니다. 나중에 속도는 최대 400kHz로, 나중에는 1MHz 이상으로 증가했습니다.
문제는 각 장치의 주소가 I²C 프로토콜에 내장되어 있기 때문에 같은 버스에서 속도가 다른 장치 (예 : 100 kHz 및 400 kHz)가있는 경우 항상 가장 일반적인 속도로 버스를 작동시켜야합니다. 동일한 버스 (이 경우 100kHz)의 모든 장치에.
버스를 더 높은 속도 (400kHz)로 작동 시키면 저속 장치가 제대로 작동하지 않으며 고속 장치의 주소를 자체 주소로 해석하여 400kHz 장치가 다음과 같이 실패 할 수 있습니다. 잘. 그러나 처음에 버스를 100kHz로 실행 한 다음 고속 칩을 처리 한 후 버스 속도를 400kHz로 올리려고하더라도 저속 칩이 다음 중 하나를 해석하는 것은 가능할 것입니다. 고속 데이터 패킷의 주소가 잘못되어 버스의 통신을 망칠 수 있습니다. 두 경우 모두 400kHz 장치와의 교환이 끝나면 100kHz 장치는 알 수없는 상태 일 것입니다.
당신이 다른 속도로 실행하는 장치가있는 경우는, 가장 효율적인 그래서 및 여러 I²C 포트가 그리고 당신은 400 개 kHz의 장치에 대한 100 개 kHz의 장치, 또 다른 하나 개의 I²C의 말을 가지고, 같은 고급 수 있도록 여분의 핀을 가지고 있고, 또 다른 필요에 따라 1MHz 장치의 경우
각 장치는 별도의 칩 선택 라인을 통해 하드웨어에서 활성화 (주소 지정)되므로 SPI에는 문제가되지 않습니다. 따라서 클럭 속도는 활성화되지 않았기 때문에 동일한 버스의 다른 칩에 영향을주지 않고 선택한 칩의 속도 (10MHz, 20MHz 등)와 일치시킬 수 있습니다.
또한 주소가 동일한 두 장치를 지원할 수 있습니다. 그렇습니다. 대부분의 장치에서는 끈으로 주소의 맨 아래 두 비트를 선택할 수 있습니다. 최근에는 저항으로 주소의 LSB 만 설정할 수있는 4 개의 장치를 지원해야했습니다. 두 개의 포트가 있으면 추가 비용이 들지 않습니다.
어쩌면 하나는 여러 장치의 마스터가되고 다른 하나는 슬레이브 포트로 표시하기를 원할 것이므로 마스터는 버스를 잡아서 명령을 내릴 때까지 기다릴 필요가 없습니다. 시각.
이 스레드에는 다른 2 센트를 추가하는 다른 좋은 반응이있는 것처럼 보입니다.
다른 사람들은 이것을하기 위해 많은 이유를 언급했으며, 나는 하나를 추가 할 것입니다.
5V I2C 장치와 3V3 I2C 장치가 있습니다.
예를 들어, 2 개의 I2C 포트 (하나는 5V 허용, 다른 하나는 3V3 만)가있는 3.3V 마이크로를 사용합니다.