FirmGod

I²C 풀업 저항 계산기

장치가 라인을 끌어내릴 수 있는 최소 저항과 시간 안에 올라오는 최대 저항을 계산해, 그 사이에 들어가는 표준값을 보여 줍니다.

상승 허용 시간 300 ns

볼트. 풀업이 이 레일에 연결됩니다.

피코패럿. 한 라인의 전체 용량입니다.

밀리암페어. 버스에서 가장 약한 장치 기준입니다.

볼트. 데이터시트의 V_OL 값입니다.

±5% 부품

The usual choice. The rise-time budget is a third of Standard-mode, so capacitance starts to matter.

허용 범위

966.7 Ω – 3.54k Ω · 1.8k Ω 사용
상승 153 ns (여유의 51%) — 싱크 1.61 mA (정격의 54%)
최소 — 장치가 라인을 끌어내릴 수 있어야 합니다966.7 Ω
최대 — 라인이 시간 안에 올라와야 합니다3.54k Ω
창의 배율3.7×

창 안에 들어가는 표준값

저항이 작으면 빨리 올라오고 전류를 더 씁니다. 크면 그 반대입니다. 권장값은 두 한계에서 같은 배율만큼 떨어진 기하 중간에 있습니다.

저항상승 시간여유 사용률싱크 전류소비 전력 (로우일 때)
1k Ω빠듯함84.7 ns28%2.9 mA (97%)8.41 mW
1.1k Ω93.2 ns31%2.64 mA (88%)7.65 mW
1.2k Ω102 ns34%2.42 mA (81%)7.01 mW
1.3k Ω110 ns37%2.23 mA (74%)6.47 mW
1.5k Ω127 ns42%1.93 mA (64%)5.61 mW
1.6k Ω136 ns45%1.81 mA (60%)5.26 mW
1.8k Ω권장153 ns51%1.61 mA (54%)4.67 mW
2k Ω169 ns56%1.45 mA (48%)4.21 mW
2.2k Ω186 ns62%1.32 mA (44%)3.82 mW
2.4k Ω203 ns68%1.21 mA (40%)3.5 mW
2.7k Ω229 ns76%1.07 mA (36%)3.11 mW
3k Ω254 ns85%967 µA (32%)2.8 mW
3.3k Ω280 ns93%879 µA (29%)2.55 mW

빠듯함으로 표시된 값은 시리즈 허용오차를 적용하면 창을 벗어납니다. 편차의 불리한 쪽에 있는 부품은 두 한계 중 하나를 못 지킵니다.

두 한계 사이의 창

I²C는 오픈 드레인입니다. 장치는 라인을 끌어내리기만 하고, 올리는 것은 풀업 저항의 몫입니다. 그래서 저항값은 양쪽에서 압박을 받습니다.

  • 너무 작으면 — 라인을 끌어내릴 때 흘려야 하는 전류가 장치의 능력을 넘습니다. 로우 레벨이 올라가 상대가 0으로 읽지 못합니다.
  • 너무 크면 — 상승이 느려져 다음 클럭 에지 전에 하이에 도달하지 못합니다.

이 계산기는 두 한계를 각각 구하고 그 사이에 들어가는 표준값을 보여 줍니다. 창이 비어 있다면 어떤 저항으로도 조건을 만족할 수 없다는 뜻이고, 속도를 낮추거나 버스 용량을 줄여야 합니다.

4.7k는 계산 결과가 아닙니다

회로도에서 가장 자주 보이는 값이지만 근거가 있는 것은 아닙니다. 100kHz 표준 모드에 버스 용량이 100pF 남짓인 흔한 조건에서 창 안에 들어가기 때문에 관행이 됐습니다.

조건이 달라지면 맞지 않습니다. 400kHz로 올리면 상승 시간 요구가 세 배 빡빡해지고, 장치를 여러 개 달아 용량이 300pF가 되면 4.7k로는 올라오지 못합니다. 그럴 때 증상은 통신이 아예 안 되는 것이 아니라 가끔 실패하는 형태라 원인을 찾기 어렵습니다.

버스 용량을 세는 법

장치의 핀 용량은 데이터시트에 있고, 배선은 대략 1cm당 1pF를 더합니다. 여기에 커넥터와 브레드보드가 더해집니다.

정확히 알기 어려우므로 넉넉하게 잡는 편이 안전합니다. 규격 상한은 400pF이고 그 근처라면 풀업을 아무리 세게 해도 400kHz는 어렵습니다. 그때는 버스를 나누거나 버퍼를 쓰는 쪽이 답입니다.

모듈마다 풀업이 실려 있습니다

브레이크아웃 보드에는 대개 풀업이 붙어 있습니다. 하나만 쓸 때는 편하지만, 여러 개를 같은 버스에 물리면 전부 병렬이 됩니다.

4.7k 세 개가 병렬이면 1.57k입니다. 상승은 빨라지지만 끌어내릴 때 전류가 2mA를 넘어 장치가 로우 레벨을 못 만들 수 있습니다. 보통은 모듈 하나만 남기고 나머지의 풀업을 떼거나, 애초에 풀업이 없는 모듈을 고릅니다.

끌어내리는 전류의 상한

규격은 장치가 3mA까지 흘릴 수 있다고 봅니다. 실제로는 데이터시트의 V_OL 조건에 적힌 전류가 기준이고, 많은 마이크로컨트롤러가 3mA에서 0.4V를 보장합니다.

그 전류를 넘기면 로우 레벨이 올라갑니다. 0.4V였던 것이 0.8V가 되면 상대의 입력 문턱에 걸쳐 불안정해집니다. 계산기가 최소 저항을 구할 때 쓰는 것이 이 조건입니다.

계산에 없는 것

버스 길이에 따른 반사, 다른 신호와의 결합, 온도에 따른 저항 변동은 계산에 들어 있지 않습니다. 창의 가장자리에 걸친 값을 고르기보다 가운데 근처의 표준값을 쓰는 편이 안전합니다.

주소 충돌이나 스캔 문제를 보고 계시다면 I²C 주소 변환기 쪽입니다.

자주 묻는 질문

왜 4.7k를 쓰나요?

관행일 뿐 계산 결과가 아닙니다. 100kHz 표준 모드에 버스 용량이 100pF 근처면 4.7k가 창 안에 들어가서 널리 쓰이게 됐습니다. 400kHz로 올리거나 장치를 여러 개 달아 용량이 커지면 4.7k로는 상승 시간을 못 맞춥니다. 조건을 넣고 계산해 보는 편이 안전합니다.

버스 용량을 어떻게 아나요?

장치마다 데이터시트에 핀 용량이 적혀 있고, 배선도 1cm당 대략 1pF 정도 더합니다. 정확히 측정하기 어려우므로 넉넉하게 잡는 편이 낫습니다. 규격 상한은 400pF이고, 그 근처라면 풀업을 세게 해도 400kHz가 어렵습니다.

저항을 낮추면 항상 좋은가요?

아닙니다. 낮출수록 상승은 빨라지지만 장치가 라인을 끌어내릴 때 흘려야 하는 전류가 커집니다. 규격상 3mA까지만 보장되고, 그 이상을 요구하면 로우 레벨이 올라가 상대가 0으로 읽지 못합니다. 소비 전류도 함께 늘어나므로 배터리 기기에서는 더 신경 써야 합니다.

풀업이 양쪽에 다 있으면?

병렬이 되어 합성 저항이 절반 이하로 떨어집니다. 모듈마다 풀업이 실려 있는 경우가 많아, 세 개를 연결하면 4.7k 세 개가 병렬로 1.57k가 됩니다. 계산기에는 그 합성값을 넣어야 하고, 대개는 모듈 하나만 남기고 나머지를 떼는 것이 맞습니다.

전원 전압이 다른 장치를 섞으면?

레벨 시프터가 필요합니다. 풀업을 어느 쪽 전원에 물릴지 정하는 문제가 아닙니다. 3.3V 장치의 입력이 5V를 견디지 못하면 손상되고, 반대로 5V 장치가 3.3V를 하이로 인식하지 못할 수도 있습니다. I²C용 양방향 레벨 시프터는 MOSFET 하나로 만드는 표준 회로가 있습니다.

이 계산의 코드

이 페이지가 쓰는 산식은 i2cpullup 모듈로 공개돼 있습니다. 브라우저에서 보는 것과 같은 함수이고, 같은 테스트를 돕니다. MIT, 의존성 없음.

소스 보기npm 패키지npm i electronics-math