i2c 마스터는 몇 개의 i2c 슬레이브를 지원할 수 있습니까?


17

i2c 마스터가 구동 할 수있는 최대 i2c 슬레이브가 있습니까? 물리적 제한 요소는 무엇입니까?


1
7 비트 주소가 있습니다. 즉, 최대 127 개의 슬레이브를 처리 할 수 ​​있습니다.
Botnic

감사. 전류 드라이브, 커패시턴스와 같은 물리적 제한 요소가 있습니까? 슬레이브 수가 최대 127 개에 도달하지 못하게하는 것과 같은 것입니까?
user768421

1
@Botnic은 i2c 스위치, 허브, 버퍼, 리피터 및 버스를 확장 할 수있는 모든 i2c 장치를 완전히 무시합니다.
Passerby

답변:


22

소프트웨어 제한 요소는 슬레이브에 사용되는 주소의 크기 : 7 비트 또는 10 비트로 각각 127 및 1023 장치를 지원합니다. 물리적으로 두 가지 제한이 있습니다. 첫째, 버스는 단기 (IC 간)에만 사용되기 때문에 버스의 물리적 크기입니다. 버스가 너무 크면 처리해야 할 용량 성 부하 및 전파 지연 효과가 있습니다. 둘째, 일부 장치는 전체 범위의 I2C 주소를 지원할 수 없습니다. 예를 들어 MPU6050 자이로 스코프는 두 개의 주소 만 지원하며 일부 장치는 특정 목적을 위해 특정 주소를 예약합니다.


2
일대일 오류가 있습니다. 7 비트 주소 지정은 128 개 주소 (0 ~ 127)를 지원합니다. 10 비트 주소 지정은 1024 주소 (0 ~ 1023)를 지원합니다.
CurtisHx

3
이것은 하나의 오류로 인한 것이 아닙니다. 하나의 예약 된 주소가 아닌 7 개의 예약 된 주소가 있기 때문에 "off by 6 error"입니다.
kruemi

주소 지정 체계는 버스, 마스터 또는 슬레이브의 장치에 의해 결정됩니다. 일부 장치에는 사전 설정된 주소 범위와 예약 된 주소가 있습니다. 예를 들어 많은 마이크로 컨트롤러와 같은 다른 장치는 예약 된 주소가 없으며 주어진 비트 체계에서 모든 주소를 사용할 수 있습니다.
vini_i

이 숫자는 다소 정확하지만주의해야합니다. 1111 XXX 및 0000 XXX와 같은 예약 된 주소가 몇 개 있습니다. 이것은 7 비트 = 2 ^ 7-16 = 112 개의 사용 가능한 주소를 의미하고, 10 비트는 전체 2 ^ 10 1024입니다. 8 비트는 일반적으로 R / W 비트를 포함하지 않습니다. 7 비트 nxp.com/docs/ko/user-guide/UM10204.pdf
busfault

@ busfault 나는 8 비트 주소가 실제로 일이 아니라는 것을 인정합니다. 나는 내 대답에서 그것들을 제거했습니다. 대부분의 마이크로 컨트롤러는 예약 된 주소 중 일부 또는 전부를 무시하고 전체 주소 범위를 사용하도록 선택할 수 있습니다. 내 대답에는 이것이 장치마다 다릅니다.
vini_i

10

최대 노드 수는 주소 공간과 400 pF의 총 버스 커패시턴스에 의해 제한되어 실제 통신 거리를 몇 미터로 제한합니다.

I²C 에서 더 읽어보기


9

주소 지정은 장치 수를 제한합니다. 일부 장치는 10 비트 주소 지정 (대개는 거의 사용되지 않음)을 사용하여 주소 수를 1024로 제한 할 수 있습니다. 소수의 '예약 된'주소가 있습니다.

I2C ( "2 선 버스"또는 다른 사람들이 유사한 버스를 호출하려는 것과는 달리)는 NXP (née Philips) 표준 UM10204를 따라야합니다. 버스 사양 및 사용 설명서를 . 그것은 다른 곳에서 존재하는 다양한 해석과 부분 집합이 아니라 기본 참조 문서 여야합니다.

최대 장치 수는 가장 약한 출력 (최소 풀업 저항을 결정)의 구동 능력, 배선 및 입력 커패시턴스 및 작동 모드 / 주파수의 영향을받습니다. 최대 정전 용량을 초과해야하는 경우 7.2 최대 허용 버스 정전 용량 이상으로 작동 섹션을 참조하십시오 .

여기에 이미지 설명을 입력하십시오


7

i2c 버스는 주로 버스의 커패시턴스 (및 속도) 및 액세스 가능한 장치 주소에 의해 제한됩니다. 그리고 물리적 인 보드 공간.

그러나 버스 버퍼, 익스텐더, 리피터, 허브, 멀티플렉서, 스위치 (또는 여러 버스 사이를 전환 할 수있는 장치의 다른 이름)를 고려할 때 실제 상한은 없습니다. 동일한 i2c 버스를 통해 액세스 할 수있는 i2c 오버 헤드가 추가됩니다. 예를 들어 PCA9548A는 8 비트 버스 스위치입니다.

이 단일 칩은 이론적으로 사용 가능한 i2c 슬레이브 수 (127 * 8)의 수를 4 배로 늘릴 수 있습니다. 또한 PCA9548A는 단일 버스에서 최대 8 개의 주소를 구성 할 수 있으므로 8 * 8 * 127 장치가 가능합니다. (수학이 해제되었을 수 있습니다). 그리고 그것은이 장치 만 있고 더 이상은 아닙니다.

솔직히 커패시턴스를 조정하면 이론적 인 제한은 없습니다.


5

I2C는 2 개의 주소 길이, 7 및 10 비트를 지정합니다. )를 지정하여 이론적으로 최대 128 및 1024 개의 고유 한 주소를 제공합니다.

그러나 0x00 (일반 호출)과 같은 예약 된 주소가 몇 가지 있습니다. 이것은 주소 공간을 더 제한합니다.

당신이 시스템을 구축하는 경우 당신은 당신의 I2C 장치를 직접 제어 어디 자신의 사용을 위해 예약 된 주소를 사용하지만, 시스템이 더 이상 I2C 표준을 준수하지 않습니다.

주소 지정 외에도 물리적 버스 제한이 있습니다. 버스의 각 장치는 특정 시간 범위 (버스 속도에 따라)에서 버스를 낮게 당길 수 있어야합니다. 버스에 커패시턴스가 많으면 장치가 SDA를 충분히 낮게 끌어 당기지 못할 수 있으며 풀업으로 인해 SDA가 충분히 빨리 되돌아 오지 않을 수 있습니다.

이제 약간의 드라이버 하드웨어로 하드웨어 문제를 해결할 수 있습니다. 현재 I2C를 사용하여 수십 미터 이상의 장치와 통신하는 프로젝트를 진행하고 있습니다. 메인 버스는 24v를 사용하며 각 보드에는 3.3v로 스텝 다운하는 드라이버가 있습니다.

너트 쉘에서는 I2C의 물리적 한계를 극복 할 수 있습니다. 주소 지정 극복 수 있지만 장치를 직접 제어 할 수있는 경우에만 가능합니다.


매우 긴 i2c 버스에서 작업 한 지 거의 3 년이 지났습니다. 그들은 잘 작동 했습니까?
wallyk

1
@ wallyk 나는 그 답변을 게시 한 직후 그 회사를 떠났습니다. 적절한 하드웨어가 주어지면 I2C가 장거리 통신을 할 수 있다고 말할 것입니다. 그러나 장거리 용으로 설계된 다른 통신 프로토콜이 있으며 아마도 I2C보다 더 나은 선택 일 것입니다.
CurtisHx

5

마스터가 구동 할 수있는 슬레이브 수의 기본 제한은 일반적으로 버스 커패시턴스, 누설, 드라이브 강도 등과 같은 전기적 요소에서 비롯됩니다. 기생 커패시턴스가 0이고 누설이 0 인 슬레이브를 구성 할 수 있고 슬레이브를 연결할 수있는 경우 커패시턴스 보드 트레이스를 사용하면 버스 커패시턴스가 중요하지 않지만 실제로는 가정이 유지되지 않습니다.

반면에 서로 "알고있는"장치의 주소 지정은 실제로 문제가되지 않습니다. 하나의 읽기 및 하나의 쓰기 주소를 사용하여 수십억 개의 칩을 연결할 수있는 주변 장치를 설계하는 것은 쉽지 않습니다. 모든 장치는 고유 한 4 바이트 ID를 가져야하며 항상 쓰기 주소를 수신해야하지만 전송 된 첫 4 바이트의 데이터 바이트가 ID와 일치하지 않는 모든 트랜잭션을 제거해야합니다. 또한 마지막으로 들었던 쓰기 트랜잭션이 주소와 일치하는 경우 장치가 읽기 주소에만 응답 할 수 있도록 지정하십시오.

마스터가 연결된 모든 슬레이브의 ID를 결정하도록하는 기능을 추가하려는 경우, 그러한 목적으로 일부 특수 ID 범위를 예약 할 수 있습니다. 예를 들어, 첫 번째 ID 바이트가 FF이면 다음 4 바이트는 마스크가되고 그 다음 4 개는 ID가됩니다. 마스크로 지정된 ID 부분이 명령에 지정된 부분과 일치하면 장치는 연결 상태를 유지하고 마지막 ID 바이트를 확인해야합니다. 이를 통해 마스터는 64 개의 트랜잭션을 사용하여 하나 이상의 장치를 식별하고 각각 62 개 이하의 트랜잭션을 사용하는 추가 장치를 식별 할 수 있습니다. 아마도 가장 빠른 장치 식별 수단은 아니지만 수십억 개의 장치 ID의 검색 공간을 고려할 때 나쁘지 않습니다.


2

짧은 대답 : 그것은 달려있다

7 비트 주소를 가진 장치가 최대 104 개의 장치 인 경우 (128 개 주소-예약 된 주소 (0x00-0x07 및 0xF0-0xFF는 예약 됨)) 최대 1024 개의 장치 주소 지정 (7 비트 및 10 비트 장치를 혼합하여 최대 1136 개의 장치에 연결할 수 있음)

이제 한계 : 대부분의 간단한 장치는 2-8 개의 다른 주소로만 구성 할 수 있습니다. 기본 주소가 다른 장치를 주문하여이 문제를 극복 할 수 있습니다 (그러나 이는 일반적으로 최소 장치 수를 주문 함을 의미합니다). 하드웨어 제한 (주로 버스 커패시턴스)도 있지만 특수 i2c 드라이버로 해결할 수 있습니다.

더 먼 거리에 많은 장치를 연결하려면 어쨌든 필드 버스를 사용하는 것이 좋습니다! I2C는 TV 내부와 같은 장치 내부의 통신을위한 것입니다. 나는 최대 50cm의 외부 케이블이있는 RaspberyPi와 함께 I2C를 직접 사용하고 있습니다 (버스 시스템에는 절대 T 섹션이 없어야 함). 놀랍도록 잘 작동합니다.


0

버스에 연결된 장치의 수는 400 pF의 총 허용 버스 커패시턴스에 의해서만 제한됩니다. I²C 인터페이스가있는 대부분의 IC는 저전력, 고 임피던스 CMOS 기술을 사용하므로 최대 정전 용량에 도달하기 전에 많은 IC를 I²C 버스에 연결할 수 있습니다.


1
이것은 완전한 영지에서 OP의 질문에 대답하지 않습니다. 근사값을 사용하더라도 질문의 모든 측면에 답하십시오. 정보 출처를 지정하거나 링크를 남겨 두십시오.
Sparky256

0

멀티플렉서 칩 (예 : TCA9544A) 또는 버퍼 (예 : PCA9515B)를 추가 하면 모든 한계를 극복 할 수 있습니다 버스 커패시턴스 및 어드레싱과 .

멀티플렉서 뒤에 동일한 주소의 장치 3 개를 배치하고 그 중 하나만 선택하고 통신 한 다음 나중에 다른 장치를 선택할 수 있습니다. 물론 소프트웨어는 더욱 복잡해집니다.

배선이 길면 중간에 버퍼를 배치하고 정전 용량 한계를 극복 할 수 있습니다.


아니오, 여전히 제한됩니다 : 채널당 4 채널 / 멀티플렉서, 채널당 4 개의 서브 채널이 있고 서브 서브 채널, 서브 서브 서브 채널 등이 있습니다. 채널당 3 개의 주소 라인 스위처가 있습니다 : 4 ^ (2 ^ 3) = 65536 채널입니다. 채널당 2 ^ 8-7-8 + 2 ^ 10 = 1265 장치 / 채널 (버퍼도 사용하는 경우)이 있습니다 (-7은 예약 된 주소 용이고 -8은 멀티 플렉스 주소 용입니다). 1265 * 65536 = 82903040 최대 장치
12431234123412341234123

편집 : 죄송합니다 오류가 발생했습니다 : 2 ^ 7-7-8 + 2 ^ 10 = 1137 장치 / 채널 => 1137 * 65536 = 74514432 장치입니다. 그러나 IO-Expander를 사용하여 일부 버퍼를 켜고 끌 때 더 많은 가능성이있을 수 있습니다 (실제로 사용되지만 이론적 인 가능성은 무엇입니까).
12431234123412341234123
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.