해결된 질문
작성
·
14
답변 1
0
안녕하세요, 답변 남겨드립니다.
I²C 버스의 풀업 저항 개념을 시스템 관점에서 조금 더 풀어서 설명드리겠습니다. I²C의 SCL, SDA 라인은 오픈드레인(Open-Drain) 구조입니다. 즉, 디바이스가 ‘0’을 만들 때는 트랜지스터로 라인을 강제로 Low로 당겨주지만, ‘1’을 만들 때는 라인을 직접 끌어올리지 않고 외부 풀업 저항을 통해 전원이 끌어올리도록 설계되어 있습니다. 따라서 풀업 저항은 단순한 풀업 용도라기보다는 라인 전체의 부하 용량을 충전하는 전류 공급원 역할을 합니다.
질문 주신 “소자 쪽 입력 임피던스가 작은 경우”는 실제로 중요한 포인트입니다. 원래 I²C 입력은 CMOS 게이트 입력이라 수 MΩ 이상으로 매우 크고, 부하 성격은 사실상 정전용량(수 pF~수십 pF) 으로 나타납니다. 따라서 일반적인 상황에서는 풀업 저항을 통해 라인이 정상적으로 High 레벨까지 올라갈 수 있습니다. 하지만 만약 연결된 소자가 비정상적으로 낮은 임피던스를 가진다면(예를 들어 손상된 IC 입력, 혹은 내부 풀다운 구조가 켜져 있는 경우), 풀업 저항이 공급하는 전류가 그 부하로 흘러들어가 버려서 라인이 VDD까지 도달하지 못하게 됩니다. 이 경우 말씀하신 것처럼 사실상 풀업 동작이 무력화됩니다. 쉽게 말해 풀업 저항이 “라인을 끌어올리려는 힘”보다 부하가 “끌어내리는 힘”이 강하면 High 레벨이 제대로 형성되지 못하는 것이지요.
정상적인 경우라면 고려해야 할 부하는 저항성 임피던스가 아니라 라인의 총 캐패시턴스입니다. I²C 사양서에는 “버스 캐패시턴스 400 pF 이하”라는 조건이 있습니다. 풀업 저항 R, 버스 캐패시턴스 C에 의해 상승 시간(tr)은 근사적으로 tr ≈ 0.8473 × R × C로 표현됩니다. 예를 들어 R = 4.7 kΩ, C = 100 pF라면 tr ≈ 400 ns 정도가 되는데, 이는 표준 모드(100 kHz, tr < 1000 ns)에서는 허용되지만 패스트 모드(400 kHz, tr < 300 ns)에서는 너무 느려집니다. 이때는 풀업 저항 값을 줄여서 더 많은 전류를 공급해야 하고(예: 2.2 kΩ), 또는 Bus buffer를 써야 합니다.
따라서 강의에서 말씀하신 “소자 쪽 임피던스가 작은 경우 풀업 동작이 성립하지 않는다”는 의미는, 단순히 입력이 저항성으로 Low를 잡아버린 상황을 설명하신 것일 가능성이 큽니다. 즉, 이론적으로는 I²C 라인이 High로 올라가야 하지만, 부하가 너무 강하게 끌어내려서 풀업 저항이 아무리 있어도 VDD에 근접한 ‘1’ 레벨을 만들지 못하는 경우를 가리킵니다.
정리하면, 일반적인 I²C 회로에서는 입력 임피던스가 충분히 크므로 풀업 저항이 정상적으로 동작하고, 문제는 주로 버스 캐패시턴스 때문에 발생합니다. 그러나 특정 디바이스가 손상되었거나 내부 풀다운 상태라면 말씀하신 것처럼 풀업이 무력화되어 라인이 High로 올라가지 못하는 현상이 생깁니다.