센서가 I²C에서 간헐적으로 NACK을 내거나 100 kHz에서는 되는데 400 kHz에서 실패한다면 SDA·SCL의 상승 파형부터 확인할 만합니다. I²C 출력은 LOW를 능동적으로 만들고 HIGH는 풀업 저항이 버스 용량을 충전해 만듭니다. 저항을 작게 하면 상승은 빨라지지만 LOW에서 장치가 더 많은 전류를 흘려야 합니다. NXP I²C 규격 UM10204의 상승 시간 제한과 TI 풀업 계산 보고서 SLVA689의 식을 함께 적용해 범위를 구해 보겠습니다.
저항의 상한과 하한
I²C 상승 시간 tᵣ은 SDA 또는 SCL이 공급 전압의 30%에서 70%까지 올라가는 데 걸리는 시간입니다. 단순 RC 근사에서 tᵣ ≈ 0.8473 × Rₚ × Cᵦ입니다. 따라서 Rₚ(max) = tᵣ(max) / (0.8473 × Cᵦ)입니다. NXP의 Standard-mode 최대 상승 시간은 1000 ns, Fast-mode는 300 ns입니다. 실제 핀·배선·커넥터·센서의 입력 용량을 합친 Cᵦ를 사용합니다. 단일 센서의 데이터시트 입력 용량만 넣으면 저항 상한을 과하게 높일 수 있습니다.
LOW를 보장하는 하한은 Rₚ(min) = (VDD − VOL(max)) / IOL입니다. 여기서 IOL은 연결된 장치가 해당 VOL을 유지하며 흘릴 수 있는 보장 전류로 잡아야 합니다. 다른 전압 도메인이나 장치에는 같은 숫자를 그대로 적용하지 마세요. 저항이 하한보다 작으면 HIGH 상승은 빨라도 LOW 전압 사양을 위반할 수 있습니다. SDA와 SCL 각각에 실제로 병렬 연결된 저항이 있으면 합성 저항으로 계산합니다.
3.3 V·200 pF 예제
가상의 3.3 V 버스에서 가장 약한 장치의 보장 조건을 VOL(max)=0.4 V, IOL=3 mA, 측정·추정한 버스 용량을 200 pF로 두겠습니다. 이것은 설계 예시값입니다. 실제 제품의 핀 사양과 보드 파형을 확인해야 합니다.
| 항목 | 계산값 |
|---|---|
| LOW 전류로 정한 최소 저항 | 약 967 Ω |
| Standard-mode 상승 시간으로 정한 최대 저항 | 약 5.90 kΩ |
| Fast-mode 상승 시간으로 정한 최대 저항 | 약 1.77 kΩ |
이 조건에서 4.7 kΩ은 약 796 ns이므로 Standard-mode 상승 시간에는 맞지만 Fast-mode에는 느립니다. 2.2 kΩ도 약 373 ns로 Fast-mode 제한을 넘습니다. 1.5 kΩ의 약 254 ns는 Fast-mode 제한 이내이고, LOW 전류는 (3.3−0.4)/1500 ≈ 1.93 mA로 예시의 3 mA 이내입니다. 이는 RC·전류 조건만 통과한 것이며 다른 타이밍·노이즈 조건과 실측 결과까지 보장하지 않습니다.
PC에서 계산 재현하기
아래 표준 C 프로그램을 i2c_pullup.c로 저장해 gcc -std=c11 -Wall -Wextra -Werror i2c_pullup.c -o i2c_pullup으로 빌드하세요. Windows에서는 ./i2c_pullup.exe, Linux에서는 ./i2c_pullup으로 실행할 수 있습니다. 특정 MCU나 회로를 구동하지 않는 계산 검사입니다.
예상 출력:
PASS는 입력한 가정 아래 저항 상·하한과 상승 시간 계산이 일치한다는 뜻입니다. 코드의 숫자를 보드의 실측 용량, 전압 및 가장 약한 장치의 데이터시트 값으로 바꿔 다시 계산하세요.
오실로스코프로 최종 확인
- SDA와 SCL을 각각 측정하고, 30%·70% 지점 사이의 시간을 재세요. 긴 케이블이나 센서 모듈을 연결한 최종 구성에서 확인합니다.
- LOW 전압이 연결된 모든 장치의 허용치 안에 있는지 확인하세요. 모듈에 내장된 풀업과 개발 보드의 풀업이 병렬이 되면 합성 저항이 너무 작아질 수 있습니다.
- 센서의 타이밍 요구사항과 MCU I²C 설정, 클록 스트레칭, 레벨 시프터의 제한을 별도로 확인하세요. 100 kHz에서 400 kHz로 바꿀 때는 저항만으로 성공을 판단할 수 없습니다.
- 실측 상승 시간이 경계값에 붙으면 용량 추정·측정 오차와 온도·부품 편차를 감안해 여유를 두세요. 필요하면 배선 축소, 버스 분리 또는 적절한 버퍼를 검토합니다.
공식 참고: NXP UM10204 I²C 규격, TI SLVA689 풀업 저항 계산.
댓글
첫 댓글을 남겨 보세요.