I²C

I²C
IC버스2
유형 직렬통신 버스
생산이력
디자이너 NXP 반도체(당시 필립스 반도체)
설계된 1982; 41년(1982)
데이터.
데이터신호 오픈-컬렉터 또는 오픈-드레인
별도 클럭(SCL)이 있는 1비트(SDA)
비트레이트 0.1, 0.4, 1.0, 3.4 or 5.0 Mbit/s depending on mode
의정서 직렬, 반이중

IC2(Inter-Integrated Circuit; "아이스퀘어-C"로 발음됨)는 1982년 필립스 반도체가 개발한 동기식 멀티 마스터/멀티 슬레이브(컨트롤러/타겟) 직렬 통신 버스입니다. 근거리, 보드 내 통신에서 프로세서 및 마이크로 컨트롤러에 저속 주변 IC를 부착하는 데 널리 사용됩니다.

Siemens, NEC, Texas Instruments, ST마이크로일렉트로닉스, [1]Motorola, Nordic SemiconductorIntersil과 같은 여러 경쟁업체는 1990년대 중반부터 호환되는 IC2 제품을 시장에 선보였습니다.

IC2 버스는 속도보다 단순성과 낮은 제조 비용이 더 중요한 광범위한 전자 제품 응용 분야에서 찾을 수 있습니다. IC와2 관련된 PC 구성 요소 및 시스템은 DIMM(dual in-line memory module)의 직렬 존재 감지(SPD) EEPROM, VGA, DVIHDMI 커넥터를 통한 모니터용 확장 디스플레이 식별 데이터(EDID), NVRAM 칩 액세스,... 마이크로컨트롤러의 대부분 알려진 I2C 애플리케이션은 하드웨어 모니터, 센서, 실시간 시계, 액추에이터 제어, 저속 DACADC 액세스, 소형(예: 피처폰) LCD 또는 OLED 디스플레이 제어, 모니터의 백라이트, 콘트라스트, 색조, 색상 균형 설정 변경 등입니다(디스플레이 데이터 채널을 통해). 지능형 스피커의 음량 변화...

IC의2 특별한 강점은 마이크로 컨트롤러가 두 개의 범용 입출력과 소프트웨어만으로 장치 칩의 네트워크를 제어할 수 있다는 것입니다. SPI(Serial Peripheral Interface Bus)와 같은 유사한 애플리케이션에서 사용되는 많은 다른 버스 기술은 여러 장치를 연결하는 데 더 많은 핀과 신호를 필요로 합니다.

1995년 Intel이 정의한 SMBus(System Management Bus)는 IC의2 하위 집합으로, 보다 엄격한 사용을 정의합니다. SMBus의 한 가지 목적은 견고성과 상호 운용성을 촉진하는 것입니다. 따라서 최신 IC 시스템에는2 SMBus의 일부 정책과 규칙이 통합되어 있으며2 때로는 IC와 SMBus를 모두 지원하므로 명령어나 출력 핀 사용을 통해 최소한의 재구성만 필요합니다. PC 시스템의 시스템 관리는 기존 PCIPCI Express 커넥터에 모두 핀이 할당된 SMBus를 사용합니다.

DIP-18 패키지의[2] 마이크로칩 MCP230088 8비트 IC2 I/O 익스팬더

설계.

하나의 제어기(마이크로 컨트롤러), 3개의 타겟 노드(ADC, DAC 및 마이크로 컨트롤러) 및 풀업 저항 R을p 갖는 예시적인 도식

IC는2 저항기풀업된 직렬 데이터 라인(SDA)과 직렬 클럭 라인(SCL)의 두 개의 양방향 개방형 수집기 또는 개방형 드레인 라인만을 사용합니다.[3] 일반적으로 사용되는 전압은 +5V 또는 +3.3V이지만 다른 전압을 가진 시스템은 허용됩니다.

IC2 참조 설계에는 7비트 주소 공간이 있으며 거의 사용되지 않는 10비트 확장이 있습니다.[4] 일반적인 IC2 버스 속도는 100kbit/s 표준 모드와 400kbit/s 빠른 모드입니다. 10kbit/s 저속 모드도 있지만 임의로 낮은 클럭 주파수도 허용됩니다. IC의2 이후 버전에서는 더 많은 노드를 호스트하고 더 빠른 속도로 실행할 수 있습니다(400kbit/s 빠른 모드, 1Mbit/s 빠른 모드 플러스, 3.4Mbit/s 고속 모드, 5Mbit/s 초고속 모드). 이러한 속도는 PC보다 임베디드 시스템에서 더 널리 사용됩니다.

비트 레이트는 클럭 스트레칭이나 기타 하드웨어 오버헤드 없이 컨트롤러(마스터)와 타겟(슬레이브) 간 전송에 대해 인용됩니다. 프로토콜 오버헤드에는 대상 주소 및 대상 장치 내의 레지스터 주소뿐만 아니라 바이트 단위 ACK/NACK 비트가 포함됩니다. 따라서 사용자 데이터의 실제 전송 속도는 최대 비트 전송 속도보다 낮습니다. 예를 들어 대상과의 각 상호 작용이 비효율적으로 1바이트의 데이터만 전송하도록 허용할 경우 데이터 속도는 피크 비트 속도의 절반 이하가 됩니다.

특정 IC2 버스에 존재할 수 있는 노드 수는 주소 공간과 400pF의 총 버스 용량에 의해 제한되므로 실제 통신 거리는 몇 미터로 제한됩니다. 상대적으로 높은 임피던스와 낮은 노이즈 면역은 공통의 접지 전위를 필요로 하며, 이는 다시 동일한 PC 보드 또는 작은 시스템의 보드 내에서의 통신에 실질적인 사용을 제한합니다.

IC2 모드
모드[3] 최대
속력을 내다
최대
정전 용량
운전해. 방향
표준모드(Sm) 100kbit/s 400pF 배수구 열기* 양방향
빠른 모드(Fm) 400kbit/s 400pF 배수구 열기* 양방향
Fast mode plus (Fm+) 1 Mbit/s 550pF 배수구 열기* 양방향
고속 모드(Hs) 1.7 Mbit/s 400pF 배수구 열기* 양방향
고속 모드(Hs) 3.4 Mbit/s 100pF 배수구 열기* 양방향
초고속 모드(UFM) 5 Mbit/s ? 밀어 당기기 단방향

참조설계

앞서 언급한 기준 설계는 7비트 어드레싱을 갖는 클럭(SCL) 및 데이터(SDA) 라인을 갖는 버스입니다. 버스는 노드에 대해 컨트롤러(마스터) 또는 타겟(슬레이브)의 두 가지 역할을 합니다.

  • 컨트롤러(마스터) 노드: 시계를 생성하고 대상(슬레이브)과의 통신을 시작하는 노드입니다.
  • 대상(슬레이브) 노드: 컨트롤러(마스터)에서 주소 지정 시 클럭을 수신하고 응답하는 노드입니다.

버스는 다중 컨트롤러 버스이며, 이는 컨트롤러 노드가 얼마든지 존재할 수 있음을 의미합니다. 또한 STOP이 전송된 후에 메시지 간에 컨트롤러 및 대상 역할이 변경될 수 있습니다.

대부분의 장치는 단일 역할과 두 가지 모드만 사용하지만, 주어진 버스 장치에는 네 가지 잠재적인 작동 모드가 있을 수 있습니다.

  • 컨트롤러(마스터) 전송: 컨트롤러 노드가 대상(슬레이브)으로 데이터를 전송하고 있습니다.
  • 컨트롤러(마스터) 수신: 컨트롤러 노드가 대상(슬레이브)으로부터 데이터를 수신하고 있습니다.
  • 대상(슬레이브) 전송: 대상 노드가 데이터를 컨트롤러(마스터)로 전송하고 있습니다.
  • 대상(노예) 수신: 대상 노드가 컨트롤러(마스터)로부터 데이터를 수신하고 있습니다.

IC2 버스는 0 및 1 데이터 비트 외에도 메시지 구분자 역할을 하며 데이터 비트와 구별되는 특수한 START 및 STOP 신호를 허용합니다. (이는 비동기 직렬 통신에서 사용되는 시작 비트중지 비트가 타이밍만으로 데이터 비트와 구별되는 것과는 대조적입니다.)

컨트롤러는 처음에는 통신하고자 하는 대상의 7비트 주소 뒤에 START를 전송함으로써 컨트롤러 전송 모드에 있고, 마지막으로 대상에서 쓰기(0)를 원할 것인지 또는 읽기(1)를 원할 것인지를 나타내는 단일 비트가 뒤따릅니다.

대상이 버스에 존재하는 경우 대상은 해당 주소에 대한 ACK 비트(확인된 경우에는 활성 낮음)로 응답합니다. 그런 다음 컨트롤러는 전송 또는 수신 모드(전송된 읽기/쓰기 비트에 따라)로 계속되고 대상은 보완 모드(각각 수신 또는 전송)로 계속됩니다.

주소와 데이터 바이트가 가장 중요한 비트로 먼저 전송됩니다. 시작 조건은 SCL이 높은 SDA의 하이-로우 전이로 표시되고, 정지 조건은 SCL이 높은 SDA의 로우-하이 전이로 표시됩니다. SDA의 다른 모든 전환은 SCL 로우에서 이루어집니다.

컨트롤러가 타겟에 쓰기를 원하는 경우, ACK 비트를 전송하는 타겟과 함께 바이트를 반복적으로 전송합니다.(이 경우, 컨트롤러는 컨트롤러 전송 모드에 있고 타겟은 타겟 수신 모드에 있습니다.)

컨트롤러가 타겟으로부터 읽기를 원하는 경우, 타겟으로부터 반복적으로 한 바이트를 수신하고, 컨트롤러는 마지막을 제외한 모든 바이트 이후에 ACK 비트를 송신합니다.(이 경우, 컨트롤러는 컨트롤러 수신 모드에 있고, 타겟은 타겟 송신 모드에 있습니다.)

IC2 트랜잭션은 여러 메시지로 구성될 수 있습니다. 이것이 트랜잭션이 종료되거나 다른 메시지("결합 형식" 트랜잭션)에 대한 버스 제어를 유지하기 위해 다른 START 조건을 전송할 수 있는 경우 컨트롤러는 STOP 조건으로 메시지를 종료합니다.

메시지 프로토콜

IC는2 기본 트랜잭션 유형을 정의하며, 각 트랜잭션은 START로 시작하여 STOP으로 끝납니다.

  • 컨트롤러(마스터)가 대상(슬레이브)에 데이터를 쓰는 단일 메시지.
  • 컨트롤러(마스터)가 대상(슬레이브)에서 데이터를 읽는 단일 메시지.
  • 컨트롤러(마스터)가 하나 이상의 대상(슬레이브)에 두 개 이상의 읽기 또는 쓰기를 발행하는 결합 형식입니다.

결합된 트랜잭션에서 각 읽기 또는 쓰기는 START와 대상 주소로 시작됩니다. 첫 번째 이후의 START 조건을 반복 START 비트라고도 합니다. 반복되는 START에는 STOP 조건이 선행되지 않으며, 이는 대상자가 다음 메시지가 동일한 트랜잭션의 일부임을 아는 방법입니다.

지정된 대상은 제품 설명서에 명시된 대로 특정 메시지에만 응답합니다.

순수 IC2 시스템은 임의의 메시지 구조를 지원합니다. SMBus는 단일 대상을 포함하는 읽기 단어 N 쓰기 단어 N과 같은 구조 중 9개로 제한됩니다. PMBus그룹 프로토콜을 통해 SMBus를 확장하여 하나의 통합된 메시지로 여러 개의 SMBus 트랜잭션을 전송할 수 있습니다. 종료 STOP은 그룹화된 작업이 언제 적용되어야 하는지를 나타냅니다. 예를 들어, 하나의 PMBus 작업은 세 개의 전원 공급 장치(세 개의 서로 다른 IC2 대상 주소 사용)를 재구성할 수 있으며, 이들의 새로운 구성은 동시에 적용됩니다(STOP을 수신할 때).

2 가지 예외를 제외하고는 IC나 SMBus 모두 메시지의 데이터 바이트 의미와 같은 메시지 의미론을 정의하지 않습니다. 그렇지 않으면 메시지 의미론은 제품별로 다릅니다. 이러한 예외에는 IC2 일반 호출 주소(0x00) 또는 SMBus Alert Response Address(SMBus 경보 응답 주소)로 주소가 지정된 메시지와 동적 주소 할당 및 관리를 위한 SMBus 주소 해결 프로토콜(ARP)에 관련된 메시지가 포함됩니다.

실제로 대부분의 대상은 쓰기 명령 뒤에 하나 이상의 바이트가 명령 또는 주소로 처리되는 요청-응답 제어 모델을 채택합니다. 이러한 바이트는 후속 쓰기 바이트가 처리되는 방식 또는 대상이 후속 읽기에 응답하는 방식을 결정합니다. 대부분의 SMBus 작업은 단일 바이트 명령어를 사용합니다.

메시징 예: 24C32 EEPROM

ST마이크로일렉트로닉스 M24C08-BN6: IC2 버스[5] 포함 직렬 EEPROM

한 가지 구체적인 예는 24C32 타입의 EEPROM인데, 이는 Address High와 Address Low라고 불리는 두 개의 요청 바이트를 사용합니다. (따라서 이 EEPROM들은 단일 바이트 명령어나 주소만을 지원하는 순수 SMBus 호스트에서는 사용할 수 없습니다.) 이러한 바이트는 32kbit(또는 4kB) EEPROM 주소 공간 내의 바이트를 주소 지정하는 데 사용됩니다. 동일한 2바이트 어드레싱은 512kbit(또는 64kB)를 저장하는 24C512와 같이 더 큰 EEPROM에서도 사용됩니다. 이러한 EEPROM에 데이터를 쓰고 이를 읽는 것은 간단한 프로토콜을 사용합니다. 주소가 기록된 다음 메시지가 끝날 때까지 데이터가 전송됩니다. 프로토콜의 데이터 전송 부분은 SMBus에서 문제를 일으킬 수 있습니다. 왜냐하면 데이터 바이트에 카운트가 선행되지 않고 32바이트 이상을 한 번에 전송할 수 있기 때문입니다. 2 kbit 24C02와 같이 32 kbit보다 작은 IC2 EEPROM은 이 문제를 극복하기 위해 비효율적인 단일 바이트 데이터 전송과 함께 SMBus에서 자주 사용됩니다.

하나의 메시지가 EEPROM에 기록됩니다. START 후에, 컨트롤러는 방향 비트가 선명한 칩의 버스 주소를 보내고 (기록), EEPROM 내에서 2바이트의 데이터 주소를 보내고 그 주소에서 시작하여 기록될 데이터 바이트를 보내고 STOP이 뒤따릅니다. 여러 바이트를 쓸 때는 모든 바이트가 동일한 32바이트 페이지에 있어야 합니다. 메모리에 이러한 바이트를 저장하는 동안 EEPROM은 추가 IC2 요청에 응답하지 않습니다. (이것은 SMBus와의 또 다른 비호환성입니다. SMBus 장치는 항상 자신의 버스 주소에 응답해야 합니다.)

EEPROM의 특정 주소에서 시작하여 읽기 위해서는 결합된 메시지가 사용됩니다. START 후, 컨트롤러는 먼저 방향 비트를 클리어(쓰기)한 후 2바이트의 EEPROM 데이터 주소로 칩의 버스 주소를 씁니다. 그런 다음 방향 비트가 설정된 (읽기) START와 EEPROM의 버스 주소를 (반복) 전송합니다. 그런 다음 EEPROM은 지정된 EEPROM 데이터 주소에서 시작되는 데이터 바이트(결합된 메시지)로 응답합니다(처음에는 쓰기, 다음에는 읽기). 컨트롤러는 마지막 바이트를 제외한 각 읽기 바이트 후 ACK를 발행한 다음 STOP을 발행합니다. EEPROM은 각 데이터 바이트가 전송된 후 주소를 증가시킵니다. 다중 바이트 읽기는 하나의 결합된 메시지를 사용하여 EEPROM의 전체 내용을 검색할 수 있습니다.

물리계층

IC2 버스: R은p 풀업 저항이고, R은s 선택적인 직렬 저항입니다.[3]

물리 계층에서 SCL과 SDA 라인은 모두 MOSFET(Open-Drain) 또는 BJT(Open-Collector) 버스 설계이므로 각 라인에 풀업 저항이 필요합니다. 라인을 접지로 당겨서 로직 '0'을 출력하고, 풀업 저항이 높게 당기도록 라인을 띄워서(고임피던스 출력) 로직 '1'을 출력합니다. 라인은 절대로 능동적으로 높게 구동되지 않습니다. 이 배선을 사용하면 신호 경합으로 인한 단락 없이 여러 노드가 버스에 연결할 수 있습니다. 고속 시스템(및 일부 다른 시스템)은 저항 대신 전류원을 사용하여 SCL만 풀업하거나 SCL과 SDA를 모두 풀업하여 더 높은 버스 캐패시턴스를 수용하고 더 빠른 상승 시간을 가능하게 할 수 있습니다.

이것의 중요한 결과는 여러 노드가 동시에 회선을 구동할 수 있다는 것입니다. 노드가 라인을 낮게 구동하는 경우 로우가 됩니다. 논리적인 것을 전송하려는 노드(즉, 라인을 높게 띄우는 것)는 이를 감지하고 동시에 다른 노드가 활성 상태라고 결론지을 수 있습니다.

SCL에서 사용되는 경우 이를 클록 스트레칭(clock stretching)이라고 하며 타겟에 대한 흐름 제어 메커니즘입니다. SDA에서 사용되는 경우 이를 중재라고 하며 한 번에 하나의 송신기만 존재하도록 합니다.

유휴 상태에서는 두 라인 모두 하이입니다. 거래를 시작하기 위해 SDA는 낮게 당겨지고 SCL은 높게 유지됩니다. SDA를 풀어 높은 곳에 다시 뜨게 하여 정지 마커를 전송하는 것은 불법이므로[3]: 14 (이러한 "회피 메시지"는 보통 무해하지만) 다음 단계는 SCL을 낮게 당기는 것입니다.

SDA 라인은 시작 신호와 정지 신호를 제외하고 클럭이 낮을 때만 변경되며, 데이터 비트를 전송하는 것은 데이터 라인을 원하는 수준으로 안정적으로 유지하면서 클럭 라인을 높게 펄스하는 것으로 구성됩니다.

SCL이 낮은 동안 송신기(초기에 컨트롤러)는 SDA를 원하는 값으로 설정하고(값이 전파되도록 약간의 지연 후) SCL을 높게 플로팅시킵니다. 그런 다음 컨트롤러는 실제로 SCL이 높아지기를 기다립니다. 이는 SCL 신호의 유한 상승 시간(풀업 저항RC 시정수 및 버스의 기생 커패시턴스)에 의해 지연되고 타겟의 클럭 스트레칭에 의해 추가로 지연될 수 있습니다.

SCL이 높으면 컨트롤러는 수신기가 비트를 보았는지 확인하기 위해 최소 시간(표준 속도 IC의2 경우 4μs)을 기다린 다음 다시 낮게 당깁니다. 이렇게 하면 1비트 전송이 완료됩니다.

한 방향으로 8 데이터 비트마다 "확인" 비트가 다른 방향으로 전송됩니다. 송신기와 수신기는 하나의 비트에 대한 역할을 바꾸고, 원래의 수신기는 단일 "0" 비트(ACK)를 다시 전송합니다. 송신기가 대신 "1" 비트(NACK)를 보면 다음을 알 수 있습니다.

  • (컨트롤러가 타겟으로 전송하는 경우) 대상에서 데이터를 허용할 수 없습니다. 이러한 대상, 명령이 이해되지 않았거나 더 이상의 데이터를 허용할 수 없습니다.
  • (제어기로 전송하는 대상인 경우) 컨트롤러는 이 데이터 바이트 이후 전송이 중지되기를 원합니다.

확인 비트 중에는 SDA 라인만 방향을 전환하며 SCL은 항상 컨트롤러에 의해 제어됩니다.

확인 비트 이후 클럭 라인이 낮고 컨트롤러는 다음 세 가지 중 하나를 수행할 수 있습니다.

  • 또 다른 바이트의 데이터 전송을 시작합니다. 송신기는 SDA를 설정하고 컨트롤러는 SCL을 하이로 펄스합니다.
  • "Stop"을 보냅니다. SDA를 낮게 설정하고 SCL을 높게 설정한 다음 SDA를 높게 설정합니다. 그러면2 IC 버스가 해제됩니다.
  • "Repeated start"(반복 시작)을 보냅니다. SDA를 높게 설정하고 SCL을 높게 설정한 다음 다시 SDA를 낮게 당깁니다. 그러면 버스를 해제하지 않고 새로운 IC2 버스 메시지가 시작됩니다.

SCL을 이용한 클럭 스트레칭

IC2 프로토콜의 더 중요한 기능 중 하나는 시계 연장입니다. 주소 지정 대상 장치는 바이트를 수신(또는 전송)한 후 클럭 라인(SCL)을 낮게 유지할 수 있으며, 이는 아직 더 많은 데이터를 처리할 준비가 되지 않았음을 나타냅니다. 타겟과 통신 중인 컨트롤러는 현재 비트의 전송을 완료하지 못하고 클럭 라인이 실제로 하이가 될 때까지 기다려야 합니다. 대상이 클럭 스트레치인 경우 클럭 라인은 여전히 로우 상태가 됩니다(연결이 오픈 드레인 상태이기 때문). 두 번째로 느린 컨트롤러가 동시에 시계를 구동하려고 하는 경우에도 마찬가지입니다. (컨트롤러가 한 명 이상일 경우, 그 중 한 명을 제외한 모든 컨트롤러는 일반적으로 중재를 잃게 됩니다.)

컨트롤러는 클럭 라인이 하이 상태로 이동하는 것을 관찰할 때까지 기다려야 하며, 추가적인 최소 시간(표준 100kbit/s2 IC의 경우 4μs)을 기다려야 클럭 로우를 다시 당길 수 있습니다.

컨트롤러가 원하는 만큼 SCL 라인을 낮게 유지할 수도 있지만(이는 프로토콜의 Rev. 6 – Subsection 3.1.1 이후에는 허용되지 않습니다), "클럭 스트레칭"이라는 용어는 일반적으로 타겟이 수행할 때만 사용됩니다. 이론적으로는 클럭 펄스가 늘어날 수 있지만 일반적으로 사용되는 확인 비트 전후의 간격입니다. 예를 들어 대상이 마이크로컨트롤러인 경우 IC 인터페이스는2 소프트웨어가 긍정적인 확인 응답을 보낼지 NACK을 보낼지 결정할 때까지 각 바이트 후에 클럭을 연장할 수 있습니다.

클럭2 스트레칭은 IC에서 대상이 SCL을 구동하는 유일한 시간입니다. 많은 대상이 클록 스트레치를 할 필요가 없으므로 SCL을 구동할 회로가 없는 입력으로 엄격하게 취급합니다. 사용자 지정 ASIC 내부에 있는 컨트롤러와 같은 일부 컨트롤러는 클럭 스트레칭을 지원하지 않을 수 있습니다. 종종 이러한 장치는 IC가2 아닌 "2-와이어 인터페이스"로 표시됩니다.

SMBus는 최소한의 버스 처리량을 보장하기 위해 클럭의 길이를 제한합니다. 이러한 제한을 준수하는 호스트 및 대상은 짧은 시간 이상 버스에 대한 액세스를 차단할 수 없으며, 이는 순수 IC2 시스템이 보장하는 것이 아닙니다.

SDA를 이용한 중재

모든 컨트롤러는 버스의 시작 및 정지 비트를 모니터링하고 다른 컨트롤러가 버스를 계속 사용 중인 동안에는 메시지를 시작하지 않습니다. 그러나 두 컨트롤러가 거의 동시에 전송을 시작할 수 있습니다. 이 경우 중재가 발생합니다. 컨트롤러가 여러 대상을 지정할 때 대상 전송 모드를 중재할 수도 있지만 이는 일반적이지 않습니다. 재시도를 발행하기 전에 랜덤 백 오프 지연을 사용하는 프로토콜(예: 이더넷)과 달리 IC는2 결정론적 중재 정책을 가지고 있습니다. 각 송신기는 데이터 라인(SDA)의 레벨을 확인하고 예상되는 레벨과 비교합니다. 일치하지 않으면 해당 송신기는 중재를 잃고 이 프로토콜 상호 작용에서 탈락합니다.

하나의 송신기에서 SDA를 1로 설정하고(신호를 구동하지 않음), 두 번째 송신기에서 0으로 설정하면(풀 투 그라운드), 결과적으로 회선이 낮음을 나타냅니다. 그런 다음 첫 번째 송신기는 회선의 레벨이 예상과 다른 것을 관찰하고 다른 노드가 송신하고 있다는 결론을 내립니다. 그러한 차이를 가장 먼저 알아차리는 노드는 중재를 잃는 노드입니다. 즉, SDA 구동을 중단합니다. 컨트롤러인 경우 SCL 구동을 중지하고 STOP(정지)를 기다립니다. 그러면 전체 메시지를 재발행하려고 할 수 있습니다. 한편, 다른 노드는 SDA에서 예상 레벨과 실제 레벨 사이에 어떠한 차이도 감지하지 못했기 때문에 전송을 계속합니다. 지금까지 신호가 예상한 대로 그대로였기 때문에 문제 없이 신호를 전송할 수 있습니다. 다른 어떤 송신기도 메시지를 방해하지 않았습니다.

두 컨트롤러가 서로 다른 두 대상에 메시지를 보내는 경우 하위 대상 주소를 보내는 컨트롤러는 항상 주소 단계에서 중재를 "승리"합니다. 두 컨트롤러가 동일한 대상 주소로 메시지를 보낼 수 있고, 주소가 여러 대상을 가리키는 경우도 있기 때문에 중재는 때때로 데이터 단계로 계속 진행되어야 합니다.

중재는 매우 드물게 발생하지만 적절한 멀티 컨트롤러 지원을 위해 필요합니다. 시계 스트레칭과 마찬가지로 모든 장치가 중재를 지원하는 것은 아닙니다. 그렇게 하는 사람들은 일반적으로 스스로를 "멀티 컨트롤러" 통신을 지원하는 것으로 분류합니다.

다중 컨트롤러 IC2 구현에서 신중하게 처리해야 하는 한 가지 경우는 컨트롤러가 서로 대화하는 경우입니다. 컨트롤러 하나가 수신 메시지에 대한 중재를 잃을 수 있으며, 자신의 주소를 확인하기 위해 컨트롤러에서 대상으로 역할을 변경해야 합니다.

두 컨트롤러가 동시에 동일한 메시지를 전송하는 극히 드문 경우에는 둘 다 통신이 성공적인 것으로 간주하지만 대상에는 하나의 메시지만 표시됩니다. 이러한 이유로 여러 컨트롤러가 대상에 액세스할 수 있는 경우 대상에 의해 인식되는 모든 명령은 idempot이어야 하거나 두 컨트롤러가 동시에 실행하지 않도록 보장해야 합니다. (예를 들어, 한 컨트롤러만 실행하는 명령은 idempotent일 필요는 없습니다. 또한 어떤 상호 배제 메커니즘이 특정 시간에 해당 명령을 발행하도록 단 하나의 컨트롤러를 발생시킬 수 있다는 것을 보장할 때 특정 명령이 idempot이어야 할 필요는 없습니다.)

SMBus의 중재

IC는2 컨트롤러 사이에서만 중재를 하지만 SMBus는 세 가지 추가적인 맥락에서 중재를 사용합니다. 여기서 여러 대상이 컨트롤러에 응답하면 하나가 메시지를 전달합니다.

  • 개념적으로 단일 컨트롤러 버스이지만 "호스트 통지 프로토콜"을 지원하는 대상 장치는 통지를 수행하는 컨트롤러 역할을 합니다. 버스를 캡처하고 예약된 "SMBus Host" 주소(0x08)에 3바이트 메시지를 기록하여 주소와 2바이트의 데이터를 전달합니다. 두 대상이 동시에 호스트에 알리려고 하면 그 중 하나가 중재를 잃어 재시도해야 합니다.
  • 대체 대상 알림 시스템은 별도의 SMBALERT# 신호를 사용하여 주의를 요청합니다. 이 경우 호스트는 일종의 브로드캐스트 주소인 예약된 "SMBus Alert Response Address"(0x0C)에서 1바이트 읽기를 수행합니다. 모든 경고 대상은 자신의 주소를 포함하는 데이터 바이트로 응답합니다. 대상이 자신의 주소를 성공적으로 전송하면(다른 사람에 대한 중재에서 승리) 해당 인터럽트의 상승을 중지합니다. 이 경우와 이전의 경우 모두 중재를 통해 한 대상의 메시지가 수신되고 다른 대상은 다시 시도해야 한다는 것을 알 수 있습니다.
  • SMBus는 또한 16바이트의 UDID(Unique Device Identifier)를 반환하는 "주소 해결 프로토콜"을 지원합니다. 여러 장치가 응답할 수 있습니다. UDID가 가장 낮은 장치가 중재에 참여하여 승인됩니다.

PMBus의 중재

PMBus 버전 1.3은 SMBus 경보 응답 프로토콜을 "영역 읽기" 프로토콜로 확장합니다.[6] 대상은 "영역"으로 그룹화될 수 있으며, 응답이 마스킹되거나(원하지 않는 정보를 생략함), 반전되거나(원하는 정보는 0비트로 전송되어 중재에서 승리함), 정렬 순서가 변경되는(가장 중요한 정보가 먼저 전송됨) 응답을 위해 지정될 수 있습니다. 중재는 가장 우선순위가 높은 응답이 컨트롤러로 먼저 반환되는 응답임을 보장합니다.

PMBus는 존 읽기와 쓰기를 위해 각각2 IC 주소 0x28과 0x37을 예약합니다.

모드 간 차이

IC2 통신에는 몇 가지 가능한 작동 모드가 있습니다. 모두 100kbit/s 표준 모드를 항상 사용할 수 있다는 점에서 호환되지만, 동일한 버스에 다른 기능의 장치를 결합하면 다음과 같은 문제가 발생할 수 있습니다.

  • 빠른 모드는 호환성이 뛰어나며 타이밍 파라미터 중 여러 개를 간단히 조여 400kbit/s 속도를 달성합니다. 고속 모드는 IC2 대상 장치에서 광범위하게 지원되므로 버스 용량과 풀업 강도가 허용한다는 것을 알기만 하면 컨트롤러가 사용할 수 있습니다.
  • 고속 모드 플러스는 더 강력한(20mA) 드라이버와 풀업을 사용하여 최대 1Mbit/s를 달성하여 더 빠른 상승 및 하강 시간을 달성합니다. 풀업의 강도를 줄일 수 있는 방법이 있다면 표준고속 모드 장치(3mA 풀다운 기능 포함)와의 호환성을 달성할 수 있습니다.
  • 고속 모드(3.4 Mbit/s)는 동일한 버스의 일반 IC2 장치와 호환되지만 고속 전송 중에 활성화된 클럭 라인에서 컨트롤러에 활성 풀업이 필요합니다. 첫 번째 데이터 비트는 정상적인 개방 드레인 상승 클록 에지와 함께 전송되며, 이는 늘어날 수 있습니다. 나머지 7개의 데이터 비트와 ACK에 대해서는 컨트롤러가 적절한 시간에 클럭을 높게 구동하고 타겟은 클럭을 늘이지 않을 수 있습니다. 모든 고속 전송에는 빠른 속도 또는 표준 속도로 단일 바이트 "제어기 코드"가 선행됩니다. 이 코드는 다음 세 가지 목적을 수행합니다.
    1. 고속 타이밍 규칙으로 변경하도록 고속 대상 장치에 알려줍니다.
    2. (주소와 일치하지 않기 때문에) 고속 또는 일반 속도 장치가 전송에 참여하려고 시도하지 않도록 보장합니다.
    3. 컨트롤러를 식별하기 때문에(8개의 컨트롤러 코드가 있고 각 컨트롤러는 다른 코드를 사용해야 함) 전송의 고속 부분 이전에 중재가 완료되도록 보장하므로 고속 부분은 해당 기능을 허용할 필요가 없습니다.
  • Ultra-Fast 모드는 기본적으로 쓰기 전용 IC2 서브셋으로 기존 IC2 인터페이스 하드웨어 설계에 지원을 추가하기 쉽다는 점을 제외하고는 다른 모드와 호환되지 않습니다. 하나의 컨트롤러만 허용되며, 데이터 라인을 항상 능동적으로 구동하여 5Mbit/s 전송 속도를 달성합니다. 시계 연장, 중재, 읽기 전송 및 확인은 모두 생략됩니다. 이는 주로 애니메이션 LED 디스플레이를 대상으로 하며, 전송 오류로 인해 중요하지 않은 짧은 시각적 결함만 발생합니다. 다른 IC2 버스 모드와 유사한 점은 다음과 같습니다.
    • 전송을 구분하기 위해 시작 및 중지 조건을 사용합니다.
    • IC2 어드레싱을 사용하면 SPI 버스 스타일의 타겟 선택 신호 없이 여러 타겟 장치가 버스를 공유할 수 있습니다.
    • 사용되지 않은 확인 비트의 위치를 표시하는 전송되는 바이트당 9번째 클럭 펄스가 전송됩니다.

공급업체 중 일부는 최대 1.4 Mbit/s의 속도를 가진 소위 비표준 터보 모드를 제공합니다.

모든 모드에서 클럭 주파수는 컨트롤러(들)에 의해 제어되며, 정상보다 긴 버스는 언더클럭에 의해 공칭보다 느린 속도로 동작할 수 있습니다.

회로 상호 연결

IC2 인터페이스가 있는 16비트 ADC 보드

IC는2 주변 회로를 아두이노 및 라즈베리 파이와 같은 프로토타이핑 시스템에 인터페이스하는 데 인기가 있습니다. IC는2 표준화된 커넥터를 사용하지 않지만, 보드 설계자들은 IC2 상호 연결을 위한 다양한 배선 방식을 만들었습니다. 0.1인치 헤더를 거꾸로 꽂는 것으로 인해 발생할 수 있는 손상을 최소화하기 위해 일부 개발자들은 (GND, SCL, VCC, SDA) 또는 (VCC, SDA, GND, SCL) 배선 방식의 신호 및 전원 연결을 교대로 사용할 것을 제안했습니다.[7]

대부분의 애플리케이션은 IC를2 원래 설계된 방식으로 사용합니다. 즉, 주변 IC는 동일한 인쇄 회로 기판의 프로세서에 직접 연결되며, 따라서 커넥터 없이 1피트(30cm) 미만의 비교적 짧은 거리에 걸쳐 있습니다. 그러나 차동 드라이버를 사용하는 대체 버전의 IC는2 CAT5 또는 기타 케이블을 통해 최대 20미터(100미터 이상)까지 통신할 수 있습니다.[8][9]

몇몇 표준 커넥터는 IC2 신호를 전달합니다. 예를들면, UEXT 커넥터는 IC를2, 10핀 iPack 커넥터는 IC를2,[10] 6P6C 레고 마인드스톰 NXT 커넥터는 IC를2,[11][12][13][14] 일부 사람들은 이더넷 물리 계층에 일반적으로 사용되는 8P8C 커넥터와 CAT5 케이블을 사용하여 차동 인코딩된 IC2 신호를[15] 대신 전달하거나 싱글 엔드 IC2 신호를 강화합니다.[16] 모든 HDMI 및 대부분의 DVIVGA 커넥터 DDC2 데이터를 IC를2 통해 전송합니다.

버퍼링 및 다중화

시스템에 많은 IC2 디바이스들이 있는 경우, 큰 버스 세그먼트들을 더 작은 것들로 분할하기 위해 버스 버퍼들 또는 멀티플렉서들을 포함할 필요가 있을 수 있습니다. 이는 버스 세그먼트의 용량을 허용 값 이하로 유지하거나 동일한 주소를 가진 여러 장치를 멀티플렉서로 분리할 수 있도록 하기 위해 필요할 수 있습니다. 많은 종류의 멀티플렉서와 버퍼가 존재하며 모두 IC2 라인이 양방향으로 지정된다는 사실을 고려해야 합니다. 멀티플렉서는 한 세그먼트를 다른 세그먼트에 묶을 수 있는 아날로그 스위치로 구현할 수 있습니다. 아날로그 스위치는 라인의 양방향 특성을 유지하지만 한 세그먼트의 캐패시턴스를 다른 세그먼트와 격리하거나 버퍼링 기능을 제공하지 않습니다.

버퍼는 한 세그먼트의 캐패시턴스를 다른 세그먼트로부터 격리하거나 또는 IC가2 더 긴 케이블 또는 트레이스를 통해 전송되도록 하는 데 사용될 수 있습니다. IC와2 같은 양방향 회선용 버퍼는 래치업을 방지하기 위한 여러 방식 중 하나를 사용해야 합니다. IC는2 개방형이므로 버퍼는 한쪽이 낮으면 한쪽이 낮아야 합니다. 래치업을 방지하기 위한 한 가지 방법은 버퍼가 드라이버의 출력 레벨이 입력 임계값보다 높도록 신중하게 입력 및 출력 레벨을 선택하여 트리거하는 것을 방지하는 것입니다. 예를 들어 버퍼는 로우 검출을 위한 입력 임계값이 0.4V이지만 출력 로우 레벨이 0.5V일 수 있습니다. 이 방법은 버스의 다른 모든 장치가 호환되는 임계값을 가져야 하며 종종 이 방법을 구현하는 여러 버퍼를 서로 직렬로 배치할 수 없음을 의미합니다.

또는 래치업을 방지하기 위해 전류 증폭기를 구현하거나 상태(즉, 어느 쪽이 버스를 낮게 구동했는지)를 추적하는 다른 유형의 버퍼가 존재합니다. 상태 방식은 일반적으로 한쪽이 버스를 낮게 주행할 때 핸드오프 중에 의도하지 않은 펄스가 생성되고 다른 한쪽이 낮게 주행한 다음 첫 번째 측이 해제되는 것을 의미합니다(IC2 확인 중에 일반적으로 발생합니다).

여러 버스 간 SCL 공유

단일 컨트롤러가 있는 경우 여러 IC 버스가 동일한 SCL 라인을2 공유하도록 할 수 있습니다.[17][18] 각 버스의 패킷은 차례로 전송되거나 동시에 전송됩니다. 이는 각 버스의 통신을 SCL이 높은 짧은 기간과 낮은 SCL이 있는 짧은 기간을 번갈아 가며 세분화할 수 있기 때문에 가능합니다. 그리고 한 버스가 한 상태에서 더 많은 시간이 필요할 경우 시계를 늘릴 수 있습니다.

동일한 주소를 가진 타겟 디바이스를 동시에 사용하고 동시에 여러 데이터 라인을 사용하여 연결을 저장하거나 처리량을 더 빠르게 하는 것이 장점입니다.

라인상태표

이 표는 IC 메시지2 중에 발생할 수 있는 다양한 원자 상태 및 비트 동작을 보여줍니다.

라인상태
유형 비활성버스

(N)

시작

(S)

게으른

(i)

일단멈춤

(P)

시계 늘이기

(CS)

메모 자유롭게 중재를 청구할 수 있습니다. 버스청구(제어기) 버스 클레임(제어기) 버스 프리(컨트롤러) 대상별 일시 중지
SDA 패시브 풀업 하강 모서리(제어기) 낮게 유지됨(컨트롤러) 상승엣지(제어기) 신경쓰지마
SCL 패시브 풀업 패시브 풀업 패시브 풀업 패시브 풀업 낮게 유지됨(표적)
라인상태
유형 하나의 데이터 비트 전송 (1) (0)

(SDA는 잘못된 상태 감지를 방지하기 위해 SCL 이후에 설정/샘플링됩니다)

ACK 비트가 포함된 수신기 응답

(보낸사람에게받은바이트)

수신자가 NACK 비트로 응답함

(보낸사람에게 받지못한바이트)

비트 설정(Bs) 샘플링 준비 완료(Bx) 비트 설정(Bs) ACK(A) 비트 설정(Bs) NACK(A')
메모 발신인 설정 비트(컨트롤러/대상) 수신기 샘플 비트(컨트롤러/대상) 송신기 hi-Z 보낸 사람이 SDA가 낮은 것으로 나타남 송신기 hi-Z 보낸 사람이 SDA가 높은 것으로 나타남
SDA 설정 비트(SCL 하락 후) 캡처 비트(SCL 상승 후) 수신기에 의해 낮게 유지됨(SCL 낙하 후) 수신기에 의해 하이(또는 패시브 하이) 구동(SCL 하강 후)
SCL 하강 모서리(제어기) 상승엣지(제어기) 하강 모서리(제어기) 상승엣지(제어기) 하강 모서리(제어기) 상승엣지(제어기)
라인상태(시작반복)
유형 ACK/NACK 후 (Sr) 신호 설정 반복시작(Sr)
메모 ACK에서 여기서부터 시작합니다. 정지(P) 상태 회피 여기서 NACK부터 시작 시동(S) 신호와 동일
SDA ACK에 대해 낮게 유지됨 상승엣지 패시브 하이 패시브 하이 하강 모서리(제어기)
SCL 하강 모서리(제어기) 낮게 유지됨 상승엣지(제어기) 패시브 하이 패시브 풀업

어드레싱 구조

7비트 주소 지정

필드: S IC주소2 필드 R/W' A IC2 메시지 시퀀스... P
유형 시작 바이트 1 ACK 바이트 X 등...

나머지 읽기 또는 쓰기

메시지가 여기로 갑니다.

일단멈춤
바이트 X의 비트 위치 7 6 5 4 3 2 1 0
7비트 주소 pos 7 6 5 4 3 2 1
메모 MSB LSB 1 = 읽기
0 = 쓰기

10비트 주소 지정

필드: S 10비트 모드 표시기 상첨자 R/W' A 주소하부필드 A IC2 메시지 시퀀스 P
유형 시작 바이트 1 ACK 바이트 2 ACK 바이트 X 등

나머지 읽기 또는 쓰기

메시지가 여기로 갑니다.

일단멈춤
바이트 X의 비트 위치 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
비트값 1 1 1 1 0 X X X X X X X X X X X
10비트 주소 pos 10 9 8 7 6 5 4 3 2 1
메모 10비트 모드를 나타냅니다. MSB 1 = 읽기 LSB
0 = 쓰기

7비트 주소 공간에 예약된 주소

두 그룹의 주소는 특수 기능을 위해 예약됩니다.

  • 0000 XXX
  • 1111 XXX
예약
주소.
색인의
8비트 바이트 묘사
7비트 주소 R/W값
MSB
(4비트)
LSB
(3비트)
1비트
1 0000 000 0 일반호출
2 0000 000 1 시작바이트
3 0000 001 X CBUS주소
4 0000 010 X 다른 버스 형식으로 예약됨
5 0000 011 X 미래 목적으로 예약됨
6 0000 1XX X HS모드제어기코드
7 1111 1XX 1 디바이스 ID
8 1111 0XX X 10비트 타겟(slave) 주소 지정

SMBus는 몇 가지 추가 주소를 예약합니다. 특히. 0001 000 는 SMBus 호스트용으로 예약되어 있으며 컨트롤러 지원 장치에서 사용할 수 있습니다. 0001 100 는 대역외 인터럽트 후 호스트에 의해 폴링되는 "SMBus 경보 응답 주소"이며, 1100 001 은 동적 주소 할당이 가능한 장치에서 처음 사용되는 기본 주소입니다.

이렇게2 하면 IC, SMBus, PMBus 간에 공통적으로 총 107개의 7비트 주소가 예약되지 않습니다.


7비트 주소 공간의 예약되지 않은 주소

MSB(4비트) 일반적인[19][20][21][22][23] 용법
0001 디지털 수신기, SMBus
0010 TV 비디오 라인 디코더, IPMB
0011 AV 코덱
0100 비디오 인코더, GPIO 익스팬더
0101 ACCESS.bus, PMBus
0110 VESA DDC, PMBus
0111 디스플레이컨트롤러
1000 TV 신호 처리, 오디오 처리, SMBus
1001 AV 스위칭, ADCDAC, IPMB, SMBus
1010 스토리지 메모리, 실시간 시계
1011 AV 프로세서
1100 PLL 및 튜너, 변조기 및 복조기, SMBus
1101 AV 프로세서 및 디코더, 오디오 전력 증폭기, SMBus
1110 AV공간 변환기

MSB 1111은 Device ID 및 10비트 타겟(슬레이브) 어드레싱용으로 예약되어 있지만 포인팅 디바이스와 같은 VESA DDC 디스플레이 종속 디바이스에서도 사용됩니다.[22]

거래형식

IC2 트랜잭션은 하나 이상의 메시지로 구성됩니다. 각 메시지는 시작 기호로 시작하고 트랜잭션은 중지 기호로 종료됩니다. 메시지를 시작하지만 트랜잭션을 시작하지 않는 첫 번째 뒤의 시작 기호를 반복 시작 기호라고 합니다.

각 메시지는 읽기 또는 쓰기입니다. 단일 메시지로 구성된 트랜잭션을 읽기 또는 쓰기 트랜잭션이라고 합니다. 여러 메시지로 구성된 거래를 결합 거래라고 합니다. 후자의 가장 일반적인 형태는 장치 내 주소 정보를 제공하는 쓰기 메시지이며, 그 다음에 읽기 메시지가 있습니다.

많은 IC2 장치는 결합된 거래와 개별 거래로 전송된 동일한 메시지를 구별하지 않지만 모두는 아닙니다. 디바이스 ID 프로토콜은 단일 트랜잭션을 필요로 하며, 대상이 중지 기호를 준수하는 경우 응답이 금지됩니다. 대상이 비정상적으로 반응하게 하는 구성, 보정 또는 자가 테스트 모드도 트랜잭션이 끝나면 자동으로 종료되는 경우가 많습니다.

타이밍도

Data transfer sequence
데이터전송순서
  1. SCL이 높은 상태를 유지하는 동안 SDA에 의해 신호를 받은 시작 조건(S)이 낮게 풀리면서 데이터 전송이 시작됩니다.
  2. SCL이 낮게 풀리고 SDA는 SCL을 낮게 유지하면서(블루 바 시간 동안) 첫 번째 데이터 비트 레벨을 설정합니다.
  3. 첫 번째 비트(B1)에 대해 SCL이 상승하면 데이터가 샘플링(수신)됩니다. 비트가 유효하려면 SDA가 SCL의 상승 에지와 후속 하강 에지(전체 녹색 막대 시간) 사이에서 변경되어서는 안 됩니다.
  4. 이러한 과정이 반복되어 SCL이 낮은 상태에서 SDA가 전이되고, SCL이 높은 상태에서 읽히는 데이터(B2~Bn)가 발생합니다.
  5. 마지막 비트는 클럭 펄스에 이어지는데, 이 기간 동안 SDA는 정지 비트에 대비하여 낮게 당겨집니다.
  6. SCL이 상승하면 정지 상태(P)가 표시되고 이어서 SDA가 상승합니다.

잘못된 마커 감지를 방지하기 위해 SCL 하강 에지와 변경 SDA 사이, 변경 SDA와 변경 SCL 상승 에지 사이에 최소 지연이 발생합니다. n개의 데이터 비트(승인 포함)를 포함하는 IC2 메시지에는 n + 1개의 클럭 펄스가 포함됩니다.

소프트웨어 디자인

IC는2 "버스 운전사" 소프트웨어 디자인에 적합합니다. 첨부된 장치들을 위한 소프트웨어는 실제 낮은 수준의 IC2 하드웨어를 다루는 "버스 드라이버"를 호출하기 위해 작성됩니다. 이를 통해 부착된 장치의 드라이버 코드를 비트 뱅 설계를 포함한 다른 하드웨어로 쉽게 포팅할 수 있습니다.

IC2 프로토콜의 비트-뱅잉 예

다음은 IC2 컨트롤러(마스터)로서 IC2 프로토콜을 비트-뱅하는 예입니다. 예제는 의사 C로 작성되어 있습니다. 앞에서 설명한 모든 IC2 기능(클럭 스트레칭, 중재, 시작/정지 비트, ack/nack)을 보여줍니다.[24]

// 사용자 정의해야 하는 하드웨어별 지원 기능: #I2CSPEED 100 정의 공허한 I2C_지연(공허한); 흥얼거리다 read_SCL(공허한);  // SCL 라인의 전류 레벨을 반환합니다(0 또는 1). 흥얼거리다 read_SDA(공허한);  // SDA 라인의 전류 레벨을 반환합니다(0 또는 1). 공허한 set_SCL(공허한);   // SCL(Set pin high-impedance)을 구동하지 않음 공허한 클리어_SCL(공허한); // 능동적으로 SCL 신호 로우 구동 공허한 set_SDA(공허한);   // SDA(Set pin high-impedance)를 구동하지 않음 공허한 클리어_SDA(공허한); // 능동적으로 SDA 신호 로우 구동 공허한 중재_잃어버린(공허한);  흥얼거리다 시작된 = 거짓의; // 글로벌 데이터  공허한 i2c_start_cond(공허한) {   한다면 (시작된) {      // 시작된 경우 다시 시작 조건을 수행합니다.     // SDA를 1로 설정     set_SDA();     I2C_지연();     set_SCL();     하는 동안에 (read_SCL() == 0) { // 시계 늘이기       // 이 루프에 시간 초과를 추가해야 합니다.     }      // 반복적인 시작 설정 시간, 최소 4.7us     I2C_지연();   }    한다면 (read_SDA() == 0) {     중재_잃어버린();   }    // SCL이 높고 SDA를 1에서 0으로 설정합니다.   클리어_SDA();   I2C_지연();   클리어_SCL();   시작된 = 진실의; }  공허한 i2c_stop_cond(공허한) {   // SDA를 0으로 설정   클리어_SDA();   I2C_지연();    set_SCL();   // 시계 늘이기   하는 동안에 (read_SCL() == 0) {     // 이 루프에 시간 초과를 추가합니다.   }    // 중지 비트 설정 시간, 최소 4us   I2C_지연();    // SCL이 높음, SDA를 0에서 1로 설정합니다.   set_SDA();   I2C_지연();    한다면 (read_SDA() == 0) {     중재_잃어버린();   }    시작된 = 거짓의; }  // I2C 버스에 약간 쓰기 공허한 i2c_write_bit(흥얼거리다 조금) {   한다면 (조금) {     set_SDA();   } 또 다른 {     클리어_SDA();   }    // SDA 변경 전파 지연   I2C_지연();    // SCL 높음을 설정하여 새 유효 SDA 값을 사용할 수 있음을 나타냅니다.   set_SCL();    // SDA 값이 대상별로 판독될 때까지 대기(표준 모드의 경우 최소 4us)   I2C_지연();    하는 동안에 (read_SCL() == 0) { // 시계 늘이기     // 이 루프에 시간 초과를 추가해야 합니다.   }    // SCL이 높음, 이제 데이터가 유효함   // SDA가 높으면 다른 사람이 SDA를 운전하지 않는지 확인합니다.   한다면 (조금 && (read_SDA() == 0)) {     중재_잃어버린();   }    // 다음 변경에 대비하여 SCL을 낮게 지웁니다.   클리어_SCL(); }  // I2C 버스에서 좀 읽어보세요. 흥얼거리다 i2c_read_bit(공허한) {   흥얼거리다 조금;    // 대상 드라이브 데이터 허용   set_SDA();    // SDA 값이 대상별로 기록될 때까지 대기(표준 모드의 경우 최소 4us)   I2C_지연();    // SCL 높음을 설정하여 새 유효 SDA 값을 사용할 수 있음을 나타냅니다.   set_SCL();    하는 동안에 (read_SCL() == 0) { // 시계 늘이기     // 이 루프에 시간 초과를 추가해야 합니다.   }    // SDA 값이 대상별로 기록될 때까지 대기(표준 모드의 경우 최소 4us)   I2C_지연();    // SCL이 높음, 읽기 비트   조금 = read_SDA();    // 다음 작업 준비로 SCL 낮게 설정   클리어_SCL();    돌아가다 조금; }  // I2C 버스에 바이트를 씁니다. 대상이 확인할 경우 0을 반환합니다. 흥얼거리다 i2c_write_byte(흥얼거리다 send_start,                     흥얼거리다 send_stop,                     서명이 없는  바이트) {   서명이 없는 조금;   흥얼거리다     알맹이가 없는;    한다면 (send_start) {     i2c_start_cond();   }    위해서 (조금 = 0; 조금 < 8; ++조금) {     i2c_write_bit((바이트 & 0x80) != 0);     바이트 <<= 1;   }    알맹이가 없는 = i2c_read_bit();    한다면 (send_stop) {     i2c_stop_cond();   }    돌아가다 알맹이가 없는; }  // I2C 버스에서 바이트 읽기 서명이 없는  i2c_read_byte(흥얼거리다 알맹이가 없는, 흥얼거리다 send_stop) {   서명이 없는  바이트 = 0;   서명이 없는  조금;    위해서 (조금 = 0; 조금 < 8; ++조금) {     바이트 = (바이트 << 1)   i2c_read_bit();   }    i2c_write_bit(알맹이가 없는);    한다면 (send_stop) {     i2c_stop_cond();   }    돌아가다 바이트; }  공허한 I2C_지연(공허한) {    변덕스러운 인트의 v;   인트의 i;    위해서 (i = 0; i < I2C SPEED / 2; ++i) {     v;   } } 

운영체제 지원

  • 아미가OS one은 AmigaOS 4.x 및 MorphOS 3.x용 i2c.resource 구성[25] 요소 또는 Wilhelm Noeker가 이전 시스템용으로 공유한 라이브러리 i2c.library를 사용할 수 있습니다.
  • 아두이노 개발자들은 '와이어' 라이브러리를 이용할 수 있습니다.
  • 서킷PythonMicroPython 개발자는 busio를 사용할 수 있습니다.I2C 아니면 기계.각각 I2C 수업.
  • Maximite는 MMBasic의 일부로 IC2 통신을 기본적으로 지원합니다.
  • PICAXE는 i2c 및 hi2c 명령을 사용합니다.
  • eCos는 여러 하드웨어 아키텍처를 위한 IC를2 지원합니다.
  • ChibiOS/RT는 여러 하드웨어 아키텍처를 위한 IC를2 지원합니다.
  • FreeBSD, NetBSDOpenBSD는 또한 IC2 프레임워크를 제공하며, 다수의 공통 컨트롤러와 센서를 지원합니다.
    • OpenBSD 3.9 (2006년 5월 1일 출시, 17년(2006-05-01)) 이후, 중앙 i2c_scan 서브시스템은 부팅 중에 가능한 모든 센서 칩을 한 번에 탐색합니다. IC2 타겟들로부터 레지스터 값들을 판독하기 위한 애드혹 가중치 방식 및 로컬 캐싱 기능을 사용하는;[26] 이는 부팅 동안 사용자에 의한 어떠한 구성 또는 눈에 띄는 프로빙 지연 없이 범용 기성품 i386/amd64 하드웨어 상의 센서들을 프로빙할 수 있게 하는; 그리고 개별 드라이버들의 매칭 절차들은 단지, 일치를 위해 문자열 기반의 "friendly-name"에 의존합니다.[27] 결과적으로, 대부분의 IC2 센서 드라이버는 안정성에 나쁜 영향을 주지 않고 적용 가능한 아키텍처에서 기본적으로 자동으로 활성화됩니다. 개별 센서(IC2 및 다른 센서)는 sysctl hw.sensors 프레임워크를 통해 사용자 영역으로 내보냅니다. 2019년 3월 현재 오픈비SD에는 hw.sensors 프레임워크를 통해 일종의 센서를 내보내는 IC에2 24개 이상의 장치 드라이버가 있으며, 이러한 드라이버의 대부분은 i386/amd64에서 기본적으로 완전히 활성화됩니다. GENERIC OpenBSD의 커널.
    • NetBSD에는 하드웨어 모니터링 센서를 특징으로 하는 24개 이상의 IC2 대상 장치가 존재하며, 이들은 속성 목록으로 sysmon envys 프레임워크를 통해 액세스할 수 있습니다. 범용 하드웨어의 경우 각 드라이버가 자체 프로빙을 수행해야 하므로 의 NetBSD에서는 IC2 대상에 대한 모든 드라이버가 기본적으로 비활성화됩니다. GENERIC i386/amd64 빌드.
  • 리눅스에서 IC는2 특정 장치에 대한 장치 드라이버와 연결된 IC2(또는 SMBus) 어댑터에 대한 장치 드라이버로 처리됩니다. 수백 개의 드라이버가 현재 리눅스 커널 릴리스의 일부입니다.
  • 맥 OS X에는 전압, 전류, 온도, 모션 및 기타 물리적 상태를 읽기 위한 센서와 통신하는 약 24개의 IC2 커널 확장이 있습니다.
  • Microsoft Windows에서 IC는2 업계에서 사용 가능한 하드웨어의 각 장치 드라이버에 의해 구현됩니다. HID 내장/SoC 장치의 경우 Windows 8 이상에는 통합 I²C 버스 드라이버가 있습니다.[28]
  • Windows CE에서 IC는2 업계에서 사용 가능한 하드웨어의 각 장치 드라이버에 의해 구현됩니다.
  • IoT용 POSIX RTOS인 Unison OS는 여러 MCU 및 MPU 하드웨어 아키텍처를 위한 IC를2 지원합니다.
  • RISC OS에서 IC는2 IO 컨트롤러로부터 일반 IC2 인터페이스를 제공받고 OS 모듈 시스템으로부터 지원됩니다.
  • Sinclair QDOSMinerva QL 운영 체제 IC는2 TF Services에서 제공하는 일련의 확장 기능을 통해 지원됩니다.

개발도구

IC를2 사용하여 시스템을 개발하거나 문제를 해결할 때 하드웨어 신호 수준의 가시성이 중요할 수 있습니다.

호스트 어댑터

IC2 컨트롤러를 만들거나 호스트 컴퓨터에 대상으로 연결하거나 Linux, Mac 또는 Windows를 실행하기 위한 여러 IC2 호스트 어댑터 하드웨어 솔루션이 있습니다. 대부분의 옵션은 USB-IC2 어댑터입니다. 모두 독점 드라이버나 API가 필요한 것은 아닙니다.

프로토콜 분석기

IC2 프로토콜 분석기는 IC2 버스를 샘플링하고 전기 신호를 디코딩하여 버스에서 전송되는 데이터를 보다 높은 수준으로 볼 수 있는 도구입니다.

논리분석기

IC2 버스를 개발하거나 문제를 해결할 때 하드웨어 신호를 검사하는 것이 매우 중요할 수 있습니다. 로직 분석기는 신호를 수집, 분석, 디코딩 및 저장하는 도구이므로 사람들은 여가 시간에 고속 파형을 볼 수 있습니다. 로직 분석기는 각 신호 레벨 변화의 타임 스탬프를 표시하므로 프로토콜 문제를 찾는 데 도움이 될 수 있습니다. 대부분의 로직 분석기는 버스 신호를 높은 수준의 프로토콜 데이터로 디코딩하고 ASCII 데이터를 보여주는 기능을 가지고 있습니다.

한계

저전력 시스템에서는 풀업 저항기가 나머지 설계를 모두 합친 것보다 더 많은 전력을 사용할 수 있습니다. 이들 위에서 저항기는 종종 마이크로 컨트롤러의 DIO와 같은 스위칭 가능한 전압 소스에 의해 전력을 공급받습니다. 또한 풀업은 버스의 속도를 제한하고 약간의 추가 비용이 있습니다. 따라서 일부 설계자는 풀업이 필요 없는 다른 직렬 버스(예: I3C 또는 SPI)로 눈을 돌리고 있습니다.

대상2 주소의 할당은 IC의 약점입니다. 7비트는 사용 가능한 수천 개의 장치 간의 주소 충돌을 방지하기에는 너무 적습니다. 여러 공급업체 간의 주소 충돌 문제를 완화하고 동일한 여러 장치에 연결할 수 있는 것은 제조업체가 대상 주소를 장치당 몇 개의 주소 옵션 중 하나로 설정하는 데 사용할 수 있는 전용 핀을 제공한다는 것입니다. 2개 또는 3개의 핀이 일반적이며 많은 장치의 경우 주소 핀당 3개 이상의 배선 옵션이 있습니다.[29][30][31]

10비트 IC2 주소는 아직 널리 사용되지 않으며 많은 호스트 운영 체제에서 지원하지 않습니다.[32] 또한 주소를 동적으로 할당하는 복잡한 SMBus "ARP" 방식도 없습니다(SMBus가 필요한 PCI 카드의 경우 제외).

자동 버스 구성은 관련 문제입니다. 주어진 주소는 다양한 시스템에서 수많은 서로 다른 프로토콜 호환 장치에 의해 사용될 수 있으며 런타임에 장치 유형을 거의 감지할 수 없습니다. 예를들면, 0x51 24LC02 또는 24C32 EEPROM에서 호환되지 않는 주소 지정을 사용하거나 PCF8563 RTC에서 사용할 수 있습니다(장치 상태를 변경하지 않으면 허용되지 않을 수 있음). 호스트가 사용할 수 있는 유일한 신뢰할 수 있는 구성 메커니즘은 사용 가능한 디바이스를 나열하는 시스템 펌웨어에서 제공하는 테이블과 같은 대역 외 메커니즘을 포함합니다. 이 문제는 SMBus 시스템에서 ARP를 통해 부분적으로 해결할 수 있습니다. 특히 벤더와 제품 식별자가 사용되는 경우에는 더욱 그렇습니다. IC2 사양의 Rev. 3 버전은 장치 ID 메커니즘을 추가합니다.

IC는2 제한된 범위의 속도를 지원합니다. 멀티 메가비트 속도를 지원하는 호스트는 드뭅니다. Fm+ 1 Mbit/s 속도에 대한 지원은 더 광범위한데, 그 이유는 그 전자 제품이 더 낮은 속도에서 사용되는 것의 단순한 변형이기 때문입니다. 많은 장치가 400kbit/s 속도를 지원하지 않습니다(일부는 SMBus가 아직 지원하지 않기 때문입니다). (전용 하드웨어 대신) 소프트웨어로 구현된 IC2 노드는 100 kbit/s 속도조차 지원하지 않을 수 있으므로, 규격에 정의된 전체 범위는 거의 사용할 수 없습니다. 모든 장치는 적어도 부분적으로 사용되는 최고 속도를 지원해야 합니다. 그렇지 않으면 장치 주소를 신속하게 감지할 수 있습니다.

장치는 특정 요구에 맞게 클럭 사이클을 확장할 수 있으므로 더 빠른 장치가 필요로 하는 대역폭이 부족해지고 다른 장치 주소와 통화할 때 지연 시간이 증가할 수 있습니다. 특히 신호 상승 시간을 줄이기 위해 전류원을 사용하지 않는 경우 버스 캐패시턴스는 전송 속도에 제한을 둡니다.

IC는2 공유 버스이기 때문에 모든 장치에 결함이 발생하여 버스 전체를 걸 수 있습니다. 예를 들어, 장치가 SDA 또는 SCL 라인을 낮게 유지할 경우 컨트롤러가 버스를 재설정하기 위해 START 또는 STOP 명령을 전송할 수 없습니다. 따라서 설계에는 버스 장치를 재설정하는 외부 방법을 제공하는 재설정 신호가 포함되는 것이 일반적입니다. 그러나 많은 장치에는 전용 리셋 핀이 없기 때문에 설계자는 장치를 리셋해야 할 경우 전원을 껐다 켤 수 있도록 회로를 삽입해야 합니다.

이러한 한계(주소 관리, 버스 구성, 잠재적 결함, 속도) 때문에 심지어 12개의 장치를 가진 IC2 버스 세그먼트는 거의 없습니다. 시스템에는 이러한 세그먼트가 여러 개 있는 것이 일반적입니다. 하나는 저지연 전력 관리를 위해 고속 장치와 함께 사용하는 전용일 수 있습니다. 또 다른 세그먼트는 대기 시간과 처리량이 중요한 문제가 아닌 몇 가지 장치를 제어하는 데 사용될 수 있지만, 또 다른 세그먼트는 애드온 카드(예: DRAM 스틱에 사용되는 SPD 표준)를 설명하는 EEPROM 칩을 읽는 데만 사용될 수 있습니다.

파생기술

IC는2 ACCESS.bus, VESA 디스플레이 데이터 채널(DDC) 인터페이스, 시스템 관리 버스(SMBus), 전력 관리 버스(PMBus) 및 지능형 플랫폼 관리 버스(IPMB, IPMI 프로토콜 중 하나)의 기초가 됩니다. 이러한 변형은 전압 및 클럭 주파수 범위에 차이가 있으며 인터럽트 라인이 있을 수 있습니다.

고가용성 시스템(Advanced)TCA, MicroTCA)는 선반 관리를 위해 양방향 중복 IC를2 사용합니다. 이러한 시스템에는2 멀티 컨트롤러 IC 기능이 필요합니다.

TWI(Two-Wire Interface) 또는 TWSI(Two-Wire Serial Interface)는 기본적으로 Atmel 및 기타 공급업체의 다양한 시스템 온 칩 프로세서에 구현된 동일한 버스입니다.[33] 공급업체는 IC가2 2014-11-07 현재 등록 상표가 아님에도 불구하고 TWI라는 이름을 사용합니다.[34] 상표 보호는 해당 로고(오른쪽 상단 참조)에만 존재하며 IC에 대한2 특허는 현재 만료되었습니다.[citation needed] 마이크로칩 테크놀로지에 따르면 TWI와 I2C는 몇 가지 차이점이 있습니다. 그 중 하나는 TWI가 START 바이트를 지원하지 않는다는 것입니다.[35]

경우에 따라 "2-와이어 인터페이스"라는 용어를 사용하면 IC2 규격의 불완전한 구현을 나타냅니다. 중재 또는 클럭 스트레칭을 지원하지 않는 것은 일반적인 제한 사항 중 하나이며, 이는 클럭을 늘리지 않는 단순한 대상과 통신하는 단일 컨트롤러에 여전히 유용합니다.

MIPI I3C 센서 인터페이스 표준(I3C)은 2017년 개발 중인 IC의2 개발입니다.[36]

수정사항

IC2 규격 공개 내역
연도 버전 메모들 심판
1981 특허 U.S. Philips Corporation에 의해 1981년 11월 2일에 출원된 U.S. 특허 4,689,740. [37][38]
1982 원래의 100 kbit/s IC2 시스템은 다양한 필립스 칩으로 제어 전자제품을 구축하기 위한 간단한 내부 버스 시스템으로 만들어졌습니다.
1992 1 400kbit/s Fm(Fast-mode)과 10비트 어드레싱 모드를 추가하여 1008개의 노드로 용량을 늘렸습니다. 이것은 최초의 표준화된 버전이었습니다.
1998 2 전기 전압 및 전류에 대한 절전 요구 사항이 있는 3.4 Mbit/s 고속 모드(Hs)를 추가했습니다. [39]
2000 2.1 버전 2를 명확히 했고, 큰 기능적 변화 없이. [40]
2007 3 1 Mbit/s 고속 모드 플러스(Fm+)(20mA 드라이버 사용)와 장치 ID 메커니즘을 추가했습니다. [41]
2012 4 풀업 저항이 없는 푸시 로직을 사용하여 새로운 USDA(데이터) 및 USCL(클럭) 라인에 5Mbit/s의 UFM(Ultra Fast-Mode)을 추가했습니다.
그리고 할당된 제조업체 ID 테이블을 추가했습니다. 단방향 버스일 뿐입니다.
[42]
2012 5 실수를 수정했습니다. [43]
2014 6 두 개의 그래프를 수정했습니다. [44]
2021 7 I3C 버스 사양에 맞게 "마스터/슬레이브" 용어를 "컨트롤러/타겟"으로 변경했습니다.
업데이트된 표 5는 제조업체 ID를 할당했습니다. 섹션 9 I3C 버스 개요 추가. 현재 표준(로그인 필수)입니다.
[3]

참고 항목

참고문헌

  1. ^ "Financial Press Releases-NXP". investors.nxp.com. Retrieved 2018-04-29.
  2. ^ "MCP23008". Microchip. May 26, 2021. Archived from the original on May 26, 2021.
  3. ^ a b c d e "I2C-bus specification Rev 7" (PDF). NXP Semiconductors. October 1, 2021. Archived from the original (PDF) on October 6, 2022.
  4. ^ "7-bit, 8-bit, and 10-bit I2C Slave Addressing". Total Phase. Archived from the original on 2013-06-01. Retrieved 2018-04-29.
  5. ^ "8-Kbit serial I2C bus EEPROM (PDF)" (PDF). STMicroelectronics. October 2017. Archived (PDF) from the original on 2019-10-18. Retrieved 19 November 2019.
  6. ^ Using The ZONE_READ And ZONE_WRITE Protocols (PDF) (Application Note). Revision 1.0.1. System Management Interface Forum. 2016-01-07. AN001. Archived (PDF) from the original on 2017-09-22.
  7. ^ "Is there any definitive I2C pin-out guidance out there? Not looking for a "STANDARD"". StackExchange.
  8. ^ NXP Application note AN11075: Driving I2C-bus signals over twisted pair cables with PCA9605 (PDF), 2017-08-16, archived from the original (PDF) on 2017-08-16
  9. ^ Vasquez, Joshua (2017-08-16), Taking the leap off board: An introduction to I2C over long wires, archived from the original on 2017-08-16
  10. ^ iPack Stackable Board Format, 2017-08-19, archived from the original on 2017-08-19
  11. ^ Ferrari, Mario; Ferrari, Giulio (2018-04-29). Building Robots with LEGO Mindstorms NXT. Syngress. pp. 63–64. ISBN 9780080554334. Archived from the original on 2018-04-29.
  12. ^ Gasperi, Michael; Hurbain, Philippe (2010), "Chapter 13: I2C Bus Communication", Extreme NXT: Extending the LEGO MINDSTORMS NXT to the Next Level, ISBN 9781430224549
  13. ^ Philo. "NXT 커넥터 플러그" 웨이백 기계에서 아카이브된 2017-08-20
  14. ^ Sivan Toledo. "I2C 인터페이스 파트 1: 디지털 I/O 포트 추가" Wayback Machine에서 아카이브된 2017-08-12.
  15. ^ "Cat5 케이블을 통해 안정적으로 I2C 전송" Wayback Machine에서 아카이브된 2017-08-18
  16. ^ "I2C 버스 커넥터 & 케이블" 2017-08-18 Wayback Machine 보관
  17. ^ "Multiple I2C buses · Testato/SoftwareWire Wiki". GitHub.
  18. ^ "Sharing I2C bus Microchip".
  19. ^ "I2C Address Allocation Table" (PDF) (Selection Guide). Philips Semiconductors. 1999-08-24. Archived from the original (PDF) on 2017-10-16. Retrieved 2017-10-01.
  20. ^ 데이터 핸드북 IC12: I2C 주변기기, 필립스 주문 코드 9397 75000306
  21. ^ "System Management Bus (SMBus) Specification" (PDF). Version 3.0. System Management Interface Forum. 2014-12-20. pp. 81–82. Archived (PDF) from the original on 2016-01-29. Retrieved 2017-12-01.
  22. ^ a b "VESA Display Data Channel Command Interface (DDC/CI) Standard" (PDF). Version 1.1. VESA. 2004-10-29. pp. 15–16. Archived (PDF) from the original on 2016-09-09. Retrieved 2017-12-01.
  23. ^ "Intelligent Platform Management Interface Specification Second Generation V2.0" (PDF). Document Revision 1.1. Intel, NEC, Hewlett-Packard & Dell. 2013-10-01. p. 563. Archived (PDF) from the original on 2016-03-27. Retrieved 2017-12-01. The 7-bit portion of the slave address for the BMC is 0010_000b
  24. ^ TWI 마스터 비트 밴드 드라이버; Atmel; 2012년 7월 Wayback Machine에서 아카이브됨 2017-03-29.
  25. ^ i2c.Resource 구성 요소 AmigaOS 4.x용 Wayback Machine에서 아카이브된 2011-07-24.
  26. ^ Theo de Raadt (2015-05-29). "/sys/dev/i2c/i2c_scan.c#probe_val". Super User's BSD Cross Reference. OpenBSD. Retrieved 2019-03-04. static u_int8_t probe_val[256];
  27. ^ Constantine A. Murenin (2010-05-21). "5.2. I2C bus scan through i2c_scan.c". OpenBSD Hardware Sensors — Environmental Monitoring and Fan Control (MMath thesis). University of Waterloo: UWSpace. hdl:10012/5234. Document ID: ab71498b6b1a60ff817b29d56997a418.
  28. ^ I2C를 통한 HID 소개
  29. ^ Linear Technology의 LTC4151 Archive the Wayback Machine 2017-08-09에는 주소 선택을 위한 두 개의 핀이 있으며, 각각은 높게 묶이거나 낮게 묶이거나 연결되지 않은 상태로 둘 수 있으며, 9개의 다른 주소를 제공합니다.
  30. ^ Maxim's MAX7314 Archive 2017-07-13 at the Wayback Machine에는 주소 선택을 위한 단일 핀이 있으며, 주소를 높거나 낮게 묶거나 SDA 또는 SCL에 연결하여 4개의 다른 주소를 제공합니다.
  31. ^ TI의 UCD9224 Archive 2017-11-07 at the Wayback Machine은 두 개의 ADC 채널을 사용하여 각각 12개의 레벨을 구별하여 유효한 7비트 주소를 선택합니다.
  32. ^ Delvare, Jean (2005-08-16). "Re: [PATCH 4/5] add i2c_probe_device and i2c_remove_device". linux-kernel (Mailing list). Archived from the original on 2016-08-17.
  33. ^ avr-libc: Wayback Machine에서 TWI(Two-Wire Interface) Archive 2007-05-27을 사용한 예.
  34. ^ "TESS -- Error". tmsearch.uspto.gov. Retrieved 2018-04-29.[영구적 데드링크]
  35. ^ "What is TWI? How to Configure the TWI for I2C Communication" (PDF). Microchip Technology. 2018.
  36. ^ Thornton, Scott (2017-11-29). "The improved inter-integrated circuit (I3C)". Microcontroller Tips. Archived from the original on 2018-02-03.
  37. ^ 미국 특허 4689740, "시계선 및 다수의 스테이션을 상호 연결하기 위한 데이터선으로 구성된 2-와이어 버스-시스템", 1987-08-25호, 미국 필립스사에 할당
  38. ^ "Philips sues eight more companies for infringement of I2C bus patent". EE Times. October 17, 2001. Archived from the original on April 2, 2021.
  39. ^ IC 버스2 사양 Rev 2.0; Philips Semiconductors; 1998년 12월; 보관.
  40. ^ IC 버스2 사양 Rev 2.1; Philips Semiconductors; 2000년 1월; 보관.
  41. ^ IC-버스2 사양 Rev 3; NXP 반도체; 2007년 6월 19일, 아카이브.
  42. ^ IC-버스2 사양 Rev 4; NXP 반도체; 2012년 2월 13일, 아카이브.
  43. ^ IC-버스2 사양 Rev 5; NXP 반도체; 2012년 10월 9일, 아카이브.
  44. ^ "I2C-bus specification Rev 6" (PDF). NXP Semiconductors. April 4, 2014. Archived from the original (PDF) on April 26, 2021.

더보기

  • Himpe, Vincent (2011). Mastering the I2C Bus. Elektor International Media. ISBN 978-0-905705-98-9. (248페이지)
  • Paret, Dominique (1997). The I2C Bus: From Theory to Practice. Wiley. ISBN 978-0-471-96268-7. (314페이지)

외부 링크