I2C 타이밍: 상승 시간, 풀업, 프로브 트랩

I2C Timing: Rise Time, Pull-Ups, and Probe Traps

벤치에서의 I2C 타이밍: 상승 시간, 풀업, 프로브 함정

대부분의 I2C 실패는 프로토콜 버그가 아닙니다. 규격을 벗어난 상승 시간, 습관적으로 선택한 풀업, 또는 측정값을 바꿀 만큼 충분한 커패시턴스를 추가하는 프로브입니다.

빠른 답변

  • 상승 시간: tr ≈ 0.8473 × Rp × Cbus. 4.7 kΩ에 200 pF를 적용하면 796 ns입니다 — 100 kHz에서는 적합하지만 400 kHz에서는 규격을 벗어납니다.
  • 풀업 윈도: 상승 시간으로부터 Rp 최대, 싱크 전류로부터 Rp 최소. 3.3 V, 3 mA에서 하한은 약 0.97 kΩ입니다.
  • 400 kHz: 최대 상승 300 ns, 최대 버스 400 pF. 긴 케이블에서는 두 한계가 동시에 제약이 됩니다.
  • 30–70 %에서 측정하십시오., 최악 조건의 디바이스에서, 짧은 접지로 — 그리고 프로브가 10–15 pF를 추가한다는 점을 기억하십시오.

1. 모드별 한계

모드 클록 tr max Cbus max tSU;DAT min
Standard 100 kHz 1000 ns 400 pF 250 ns
Fast 400 kHz 300 ns 400 pF 100 ns
Fast Plus 1 MHz 120 ns 550 pF 50 ns
High Speed 3.4 MHz 40 ns 100 pF 10 ns

이는 NXP I2C 사양(UM10204) 및 해당 타이밍 표에서 나옵니다. 보드에서 중요한 두 수치는 tr과 Cbus이며, 이 둘은 풀업에 의해 서로 연결됩니다.

버스가 그렇게 동작하는 이유

I2C는 오픈 드레인 방식입니다: 모든 디바이스가 라인을 로우로 당길 수 있으며, 풀업 저항 외에는 라인을 하이로 구동할 수 없습니다. 이것이 멀티 마스터 중재와 클록 스트레칭을 가능하게 하며, 상승 에지가 구동 에지가 아니라 RC 곡선이 되는 이유이기도 합니다.

그 결과 타이밍은 비대칭입니다: 하강 에지는 빠르고(트랜지스터가 풀다운), 상승 에지는 느립니다(저항이 버스를 충전). 따라서 I2C 버스의 모든 타이밍 문제는 상승 에지 또는 이를 만들어내는 저항과 관련된 문제입니다.

확인 비트(ACK)는 또 다른 타이밍 민감 부분입니다: 수신기는 8번째 클록 이후 ACK 윈도 내에서 SDA를 로우로 당겨야 하며, 마스터는 SDA를 제때 릴리스해야 합니다. 약한 풀업을 사용하는 느린 버스에서는 ACK가 너무 늦게 도착하여 NACK으로 읽힐 수 있습니다.

2. 상승 시간과 풀업

tr ≈ 0.8473 x Rp x Cbus

4.7 kOhm, 100 pF: 0.8473 x 4700 x 100e-12 = 398 ns
4.7 kOhm, 200 pF: 796 ns
2.2 kOhm, 200 pF: 373 ns
1.8 kOhm, 200 pF: 305 ns

100 kHz에서 4.7 kΩ은 약 250 pF까지 양호합니다. 400 kHz에서는 약 75 pF를 초과하면 실패합니다. 이 값은 마진을 고려하기 전에 세 개의 디바이스와 짧은 케이블만으로도 도달합니다.

두 가지 세부 사항이 실제 수치를 바꿉니다. 저항 허용오차: 1 % 부품은 문제없고, 5 % 부품은 tr을 5 % 이동시키지만 일반적으로 여전히 허용 가능합니다. 온도: 풀업 저항은 약간 드리프트하지만, 디바이스 입력 커패시턴스와 케이블 커패시턴스는 더 많이 드리프트합니다. 따라서 검사는 25 °C에서만이 아니라 온도 극한에서 반복해야 합니다.

I2C rise time versus pull-up resistance for 50, 100, 200 and 400 pF
그림 1 — 동일한 4.7 kΩ 저항은 커패시턴스에 따라 100 kHz에서는 규격을 충족하고 400 kHz에서는 규격을 충족하지 않습니다.

3. 풀업 윈도우

상승 시간은 최대 저항을 결정하고, 싱크 전류는 최소 저항을 결정합니다:

Rp max = tr / (0.8473 x Cbus)
Rp min = (VDD - VOL) / IOL = (3.3 - 0.4) / 0.003 = 967 Ohm
Pull-up maximum and minimum versus bus capacitance
그림 2 — 400 kHz에서는 윈도우가 빠르게 닫힌다: 400 pF에서 최댓값은 1 kΩ 미만이고 하한도 그 근처이다.

그것이 400 kHz 설계에서 4.7 kΩ이 아니라 1.5–2.2 kΩ을 사용하는 이유이다. 또한 "개발 보드에서는 작동한다"가 증거가 되지 않는 이유이기도 하다: 개발 보드에는 세 개의 장치와 8 cm의 트레이스가 있고, 제품에는 여섯 개의 장치, 커넥터 하나, 40 cm의 케이블이 있다.

실제 버스용 저항기 선택

주어진 조건: 400 kHz 모드, Cbus = 200 pF, VDD = 3.3 V

Rp max = 300 ns / (0.8473 x 200 pF) = 1.77 kOhm
Rp min = (3.3 - 0.4) / 3 mA      = 0.97 kOhm
선택 1.5 kOhm: tr = 254 ns, sink current = 1.9 mA

이것은 유효한 설계이며, 대부분의 참조 회로도에 나오는 4.7 kΩ과는 전혀 다릅니다. 그런 회로도는 100 kHz와 짧은 버스를 가정합니다. 이를 400 kHz 제품에 복사하는 것은 타이밍 문제를 물려받는 가장 흔한 방법입니다.

버스 커패시턴스 Rp 최대, 100 kHz Rp 최대, 400 kHz 실용적인 선택
100 pF 11.8 kΩ 3.5 kΩ 4.7 kΩ
200 pF 5.9 kΩ 1.8 kΩ 1.5–2.2 kΩ
300 pF 3.9 kΩ 1.2 kΩ 1.2 kΩ, check IOL
400 pF 2.9 kΩ 0.9 kΩ Below the floor: reduce speed

4. 오실로스코프가 실제로 보여주는 것

0–100 %가 아니라 30–70 %를 측정

I2C 상승 시간은 VDD의 30 %와 70 % 사이로 규정되는데, 이는 버스가 RC 네트워크이고 꼬리 부분이 점근적이기 때문입니다. 0–100 %를 측정하면 대략 1.5–2배 너무 큰 값이 나오며, 규격을 충족하는 버스도 한계 상태처럼 보이게 합니다.

프로브는 버스의 일부입니다

표준 10:1 프로브는 10–15 pF를 추가합니다. 이는 200 pF 버스의 5 %이며, 마진이 작은 설계를 한계 너머로 밀어낼 수 있을 만큼 충분합니다. 더 나쁜 것은 접지 리드가 인덕턴스를 추가한다는 점입니다. 10 cm 클립 리드는 대략 100 nH이며, 이는 버스 커패시턴스와 함께 링잉을 일으켜 실제 버스에는 없는 오버슈트를 보여줍니다.

Same I2C bus measured with a long ground lead and a short ground spring
그림 3 — 예시: 링잉은 버스가 아니라 긴 접지 리드가 만듭니다. 스프링 접지 또는 짧게 납땜한 접지를 사용하십시오.

실용 규칙: 스프링 접지 또는 납땜한 동축 피그테일을 사용하고, 마스터에서 가장 먼 디바이스에서 측정하며, SCL과 SDA를 각각 별도로 프로브하고 긴 리드 두 개로 동시에 프로브하지 말며, 상승 시간을 보고할 때 프로브 커패시턴스를 명시하십시오.

미세 피치 보드를 프로브해야 한다면, 프로브 팁을 패드 위에 얹는 대신 0.1 mm 와이어를 핀에 납땜하고 프로브를 그 와이어에 클립하십시오. 기계적 접촉이 더 안정적이며, 추가 커패시턴스는 압력에 따라 변하는 값이 아니라 알려진 12 pF입니다.

5. 셋업 및 홀드는 클록 에지 기준입니다

I2C SCL and SDA waveform with setup and hold markers
그림 4 — 데이터는 SCL이 로우일 때 변경되며 상승 에지에서 안정적이어야 합니다. 드라이버가 아니라 수신기에서 측정하십시오.

여기에는 두 가지 측정 실수가 있습니다. 첫째, 마스터에서 측정하는 것입니다: 긴 버스 끝의 슬레이브가 보는 데이터는 더 늦게 도착하며, 그 지점에서 셋업 마진이 더 작습니다. 둘째, SDA가 양방향임을 잊는 것입니다: 확인 응답 동안에는 슬레이브가 이를 구동하므로 에지 형상이 다릅니다.

패스트 모드에서 tSU;DAT는 100 ns이고 tHD;DAT는 내부 홀드 300 ns로 사실상 0입니다. 이러한 수치는 짧은 버스에서는 충족하기 쉽고, 약한 풀업이 있는 긴 버스에서는 잃기 쉽습니다.

클록 스트레칭은 별도의 측정이 필요합니다

슬레이브가 클록을 스트레칭하면 마스터가 이를 해제한 후에도 SCL이 로우로 유지됩니다. 이를 직접 측정하십시오: 하강 에지에서 트리거하고 슬레이브가 해제할 때까지 라인이 상승하지 않는지 확인하십시오. 스트레칭을 지원하지 않는 마스터는 클록을 그대로 통과시켜 읽기를 손상시키며, 증상은 NACK 또는 0xFF 한 바이트로 나타나 배선 문제처럼 보입니다.

6. 버스 커패시턴스 예산

Example I2C bus capacitance budget
그림 5 — 디바이스, 트레이스, 커넥터 및 프로브가 모두 포함된다. 400 pF 한계는 대부분의 예산 산정이 가정하는 것보다 더 빨리 도달한다.

일반적인 패스트 모드 보드: 각각 8–10 pF인 디바이스 6개(50–60 pF), 약 1 pF/cm인 8 cm 트레이스(8 pF), 커넥터와 케이블(50–150 pF), 프로브(12 pF). 케이블은 보통 가장 큰 단일 항목이며, 이것이 긴 I2C 구간에 버스 버퍼 또는 더 낮은 속도가 필요한 이유이다.

두 가지 실무적 결과가 있다. 첫째, 제어 가능한 변수는 디바이스가 아니라 케이블이다 — 케이블을 줄이거나, 차폐하거나, 100 kHz를 수용하라. 둘째, 예산은 벤치 구성이 아니라 제품이 지원하는 최악의 구성에 대해 계산해야 한다: 외부 센서용 헤더가 있는 보드는 개발자의 10 cm 케이블이 아니라 사용자의 케이블을 견뎌야 한다.

수치가 근접하면 저항값을 줄이기보다 저항에 마진을 추가하라: 약간 더 느린 에지는 VOL에서 충분한 전류를 싱크할 수 없는 풀업보다 안전하다.

7. 고장 패턴과 그 의미

대표적인 사례

6개의 디바이스가 있는 보드, 30 cm 케이블, 4.7 kΩ 풀업은 100 kHz에서 작동하지만 400 kHz에서는 마지막 디바이스로부터 NACK과 함께 실패한다. 본능적으로 디바이스나 펌웨어를 탓하게 된다. 측정 결과 원단에서 1.1 µs의 상승 시간이 나타나며, 이는 300 ns 한계의 거의 네 배에 해당하며, 원인은 케이블 커패시턴스와 4.7 kΩ이다.

두 가지 수정이 가능하다: 풀업을 1.5 kΩ로 줄이거나(400 pF에서 상승 시간이 약 350 ns로 감소하지만 여전히 마진이 작다), 동일한 버스가 규격을 충족하는 100 kHz로 낮추는 것이다. 세 번째 옵션인 버스 버퍼는 커패시턴스를 분할하여 고속 모드가 작동하도록 한다. 어느 것이 올바른지는 전송 시간이 중요한지에 달려 있다.

증상 일반적인 원인 이를 확인하는 측정
NACK on the last device only Rise time too slow at the far end tr at the furthest device vs mode limit
Works at 100 kHz, fails at 400 Pull-up too large for Cbus tr and Rp; check the window
Random bit errors under load Crosstalk or ground bounce Scope both lines with a short ground
Bus stuck low after a reset Slave holding SDA, or no clock stretching support Count clocks; check the slave state machine
Intermittent after adding a device Capacitance budget exceeded Recompute tr with the new total

8. 신뢰성을 갖춘 측정 절차

  1. 보드의 전원은 실제 전원 공급장치로, 실제 케이블과 실제 장치 수를 사용해 공급하십시오.
  2. 버스를 제품이 사용할 가장 빠른 모드로 설정한 다음, 분석에서 20 % 마진을 추가하십시오.
  3. 마스터에서 가장 멀리 있는 장치에서 짧은 접지로 프로브하십시오.
  4. SCL과 SDA를 캡처하고, 양쪽 에지에서 30 %와 70 % 사이의 tr을 측정하십시오.
  5. 수신기에서 SCL 임계값 교차를 기준으로 사용하여 tSU;DAT를 측정하십시오.
  6. 프로브 커패시턴스를 해당 수치 옆에 기록하십시오. 그것 없이 측정한 상승 시간은 재현할 수 없습니다.
  7. 풀업 저항과 드라이버 강도가 모두 드리프트하므로 최저 및 최고 동작 온도에서 반복하십시오.
확인 통과 실패하면
Rise time at worst device ≤ 300 ns (400 kHz) Reduce Rp or Cbus
Pull-up current at VOL ≤ 3 mA Raise Rp; check VOL spec
Acknowledge on every device ACK at address + 1 Address conflict or missing pull-up
Clock stretching Master waits while SCL held low Master lacks support; use a different peripheral
Temperature extremes Same margin at −20 and +70 °C Recompute with worst-case Rp tolerance

풀업 크기 산정 자체에 대해서는, 함께 제공되는 다음 가이드를 참조하십시오:I2C 풀업 저항저항 선택을 더 자세히 다룹니다. 당사의PCA9535 IO 확장기는 테스트 기준으로 사용하기에 적합한 일반적인 400 kHz 장치입니다.

간단한 보고서 형식은 수치를 정직하게 유지합니다: 모드, 클록, Cbus 추정치, Rp, 측정된 tr(30–70 %), 프로브 정전용량, 온도, 장치 위치. 이 일곱 가지 값이 없으면 ‘버스는 괜찮다’는 주장은 다른 누구도 확인할 수 없습니다.

I2C 장치의 입고 검사 — 날짜 코드, 마킹, 로트 확인 — 에 관해서는 당사의추적성 프로세스.

9. FAQ

왜 내 버스는 벤치에서는 작동하지만 현장에서는 실패하나요?

현장 버스는 커패시턴스가 더 큽니다: 더 긴 케이블, 더 많은 장치, 커넥터가 있기 때문입니다. 상승 시간은 커패시턴스에 비례하므로, 200 pF에서 한계였던 설계는 350 pF에서 실패합니다.

클럭을 그냥 100 kHz로 낮추면 되나요?

흔히 그렇습니다. 버스가 길 때는 합당한 해결책입니다. 전송 시간이 두 배가 되는데, 이는 대용량 전송에는 중요하지만 센서 폴링에는 무관합니다.

상승 시간은 어떻게 올바르게 측정하나요?

VDD의 30 %~70 %, 버스의 먼 쪽 끝에서, 짧은 접지와 알려진 프로브 커패시턴스를 사용하여. 프로브 커패시턴스를 해당 숫자와 함께 보고하십시오.

버스 버퍼가 필요합니까?

커패시턴스가 모드 한계를 초과하면 그렇습니다 — 버퍼가 버스를 세그먼트로 분할합니다. 긴 케이블에서 400 kHz의 경우, 버퍼 또는 더 낮은 속도가 일반적으로 유일한 신뢰할 수 있는 옵션입니다.

장치를 추가하면 기존 버스가 왜 깨지나요?

각 장치는 입력 커패시턴스를 추가하고, 구동력이 약하면 에지 모양을 바꿉니다. 새로운 총합으로 상승 시간과 풀업 윈도우를 다시 계산하십시오.

4.7 kΩ는 400 kHz에서 항상 잘못인가요?

항상 그런 것은 아니지만, 저 커패시턴스에서만 규격을 충족합니다 — 대략 75 pF 이하입니다. 커넥터가 있는 대부분의 보드는 그 값을 초과합니다.

측정하지 않고 버스 커패시턴스를 어떻게 알 수 있나요?

합산하세요: 데이터시트의 소자 입력 커패시턴스, 약 1 pF/cm의 트레이스, 사양서의 케이블, 그리고 프로브용 12 pF를 더하세요. 20 % 이내일 것이며, 이는 저항을 선택하기에 충분합니다.

10. 출처

I2C 버스 디버깅 중이신가요?

장치 수, 케이블 길이, 현재 풀업 저항 값을 보내주세요. 상승 시간을 계산하여 버스가 모드 한계 내에 있는지 알려드리겠습니다.

풀업 저항 크기 산정 가이드 BOM 보내기

Check stock by part number

Turn this insight into a sourcing decision.

Need pricing or a drop-in alternative? Submit a BOM / RFQ or talk to our team.