DUJINLABS.COM

전자회로 실무 / 통신·신호

I2C(Inter-Integrated Circuit) 모듈(module)을 추가했다면 이미 달린 풀업(pull-up) 저항부터 합산합니다

I2C(Inter-Integrated Circuit) 모듈(module)을 추가한 뒤 통신이 불안정해졌다면 풀업(pull-up) 저항이 몇 개 연결됐는지 세어 보세요. 모듈마다 달린 저항이 병렬로 연결되므로, SDA(Serial Data)와 SCL(Serial Clock)의 합성 저항과 파형이 달라질 수 있습니다.

먼저 알아둘 용어

I2C(Inter-Integrated Circuit)·SDA(Serial Data)·SCL(Serial Clock) — I2C는 여러 장치가 데이터선 SDA와 클록(clock)선 SCL을 공유하는 통신 방식입니다. 각 선을 LOW로 당기는 장치와 HIGH로 올리는 풀업 저항이 함께 동작합니다.

풀업(pull-up)·싱크 전류 — 풀업 저항은 신호를 정해진 전원 전압 쪽으로 올립니다. 장치가 LOW를 만들 때는 저항을 통해 흐르는 전류를 받아 내리는 싱크 능력이 필요합니다.

버스(bus) 용량·상승 시간 — 버스 용량은 연결된 핀(pin)과 배선에 축적되는 전하의 영향을 나타냅니다. 풀업이 이 용량을 충전하므로 저항이 너무 크면 HIGH로 올라가는 시간이 길어집니다.

VOL·IOL·VIH·VIL — VOL은 출력 LOW 전압, IOL은 그 조건에서 장치가 흡수하는 LOW 전류입니다. VIH는 수신기가 HIGH로 인정하는 최소 전압, VIL은 LOW로 인정하는 최대 전압입니다.

VDD·tr·C·단위 — VDD는 풀업 전원, tr은 정의된 구간의 상승 시간, C는 핀·배선을 합한 버스 용량입니다. pF는 10⁻¹² F, ns는 10⁻⁹초입니다.

여러 모듈에 있는 풀업 저항이 같은 버스 선에서 병렬이 되는 연결 관계입니다.
여러 모듈에 있는 풀업 저항이 같은 버스 선에서 병렬이 되는 연결 관계입니다. · 클릭하면 확대됩니다.

모듈마다 달린 저항은 같은 선에서 합쳐집니다

브레이크아웃 모듈은 작은 부품을 쉽게 연결하도록 핀과 주변 회로를 마련한 보드(board)입니다. 이 주변 회로에 풀업이 포함되어 있을 수 있습니다. MCU(Microcontroller Unit) 보드에도 풀업이 있으면 모듈을 늘릴 때 의도하지 않게 병렬 연결이 늘어납니다. SDA와 SCL은 서로 다른 선이므로 두 선을 섞어 합산하지 않습니다.

전원을 끄고 각 모듈의 회로도·점퍼(jumper)·실장 저항을 확인합니다. SDA와 SCL을 각각 조사하고, 어느 전압으로 올라가는지 기록합니다. MCU 보드, 센서(sensor) 모듈, 변환 보드에 나뉜 저항을 빠뜨리지 않습니다. 단순히 버스 전체를 저항계로 재면 반도체 경로나 커패시터(capacitor) 때문에 각 저항을 정확히 분리해 알기 어려울 수 있습니다.

같은 선에 같은 전압으로 연결된 4.7 kΩ 두 개는 2.35 kΩ, 세 개는 약 1.57 kΩ입니다. 같은 값 R인 저항 n개의 병렬 합성값은 R/n입니다. 서로 다른 값이면 1/R합=1/R1+1/R2+…로 구합니다. 전압이 다른 풀업은 이 계산만으로 적합하다고 판단하지 않습니다. 버스 버퍼(buffer)·스위치(switch)가 있으면 실제로 연결되는 구간도 나누어 조사합니다.

저항을 낮추면 상승 시간은 줄일 수 있지만 LOW를 만드는 장치가 더 큰 전류를 처리해야 합니다. 저항을 높이면 그 부담은 줄어도 상승이 늦어질 수 있습니다. 모듈 추가는 저항과 용량을 모두 바꾸므로 불필요한 풀업을 조정한 뒤 가장 불리한 위치의 LOW 전압과 상승 시간을 확인합니다. 모든 저항을 제거하는 것이 목적은 아닙니다. 사용 전압·통신 속도·총 용량·가장 약한 장치의 싱크 조건을 만족하도록 필요한 저항을 남깁니다.

합성 저항이 들어갈 수 있는 범위를 계산합니다

LOW 전류 제한으로 저항의 하한을 먼저 구합니다. 허용 LOW 전압을 VOLmax, 그 조건의 싱크 전류를 IOL이라 하면 Rmin≈(VDD−VOLmax)/IOL입니다. 반대로 버스 용량을 정해진 시간 안에 올리려면 저항이 너무 커서는 안 됩니다. I2C의 30~70% 상승 시간 기준에서는 tr≈0.8473RC이므로 Rmax≈tr허용/(0.8473C)로 계산할 수 있습니다. 다른 입력의 VIH 도달 시간을 이 기준과 같은 것으로 취급하지 않습니다.

설명용으로 VDD=3.3 V, VOLmax=0.4 V, IOL=3 mA를 가정하면 Rmin≈967 Ω입니다. C=100 pF에서 tr을 300 ns 이내로 요구한다면 Rmax≈3.54 kΩ입니다. 이 조건에서 10 kΩ은 요구되는 상승시간을 만족하지 못합니다. 이 계산의 입력값은 실제 연결 장치와 사용 모드의 규격으로 바꿔야 합니다.

합산 누설 전류가 HIGH 전압을 얼마나 낮추는지와 수신기의 VIH·VIL도 확인합니다. 가장 낮은 전원, 가장 큰 연결 부하에서 실제 수신 핀의 HIGH·LOW·상승 시간을 잽니다. 저항을 낮춰도 해결되지 않으면 배선 용량, 레벨 변환과 입력 임계값을 조사하고 출력이 오픈드레인인지 HIGH도 능동 구동하는지부터 구분합니다.

작업 순서를 다시 확인합니다

I2C 모듈을 추가했다면 이미 달린 풀업 저항부터 합산합니다 — 설명용 도해
I2C 모듈을 추가했다면 이미 달린 풀업 저항부터 합산합니다 — 설명용 도해 · 클릭하면 확대됩니다.