임베디드 면접 용어 사전
주변장치·타이머

open-drain

Low만 구동하고 High는 풀업에 맡기는 출력 모드. 여러 장치가 한 선을 공유하는 I2C에 쓰인다.

출력이 Low로 당기는 것만 가능하고 High는 구동하지 못하는 방식. High는 외부 풀업 저항이 만든다.

구조

         ├──── 출력 핀 (풀업 저항으로 VCC에 연결되어 있어야 한다)
         │
      [N-MOS]  ← 켜지면 Low, 꺼지면 하이임피던스(Hi-Z)
         │
        GND

P-MOS가 없다. 그래서 High를 만들 수 없고, 출력이 꺼진 상태는 0도 1도 아닌 하이임피던스다.

바이폴라 트랜지스터로 만들면 open-collector라 부르지만 원리는 같다.

무엇이 가능해지는가

① 와이어드 AND — 여러 출력을 연결할 수 있다

장치 A ─┐
장치 B ─┼──── 공통 신호선 ──[풀업]── VCC
장치 C ─┘

하나라도 Low로 당기면 → 신호선은 Low
전부 놓으면            → 풀업이 High로

= 논리 AND 가 배선만으로 구현된다

push-pull이면 단락되어 소자가 파괴되지만, open-drain은 안전하다. 당기는 것만 하므로 충돌할 수 없기 때문이다.

② 레벨 변환

3.3V MCU ──[open-drain]──┬──[풀업 10k]── 5V
                          └── 5V 장치 입력

MCU가 Low로 당기면 → 0V
MCU가 놓으면       → 풀업이 5V로 올린다

MCU 핀에 5V가 인가되지만, 5V 톨러런트 핀이면 문제없다

3.3V 시스템에서 5V 장치를 제어하는 간단한 방법이다. 다만 MCU 핀이 5V 톨러런트인지 반드시 확인해야 한다.

③ 인터럽트 라인 공유

센서1 INT ─┐
센서2 INT ─┼──[풀업]── MCU 인터럽트 핀
센서3 INT ─┘

어느 센서든 이벤트가 있으면 Low로 당긴다
MCU는 인터럽트를 받고 각 센서에 물어봐 누구인지 확인한다

핀 하나로 여러 장치의 인터럽트를 받는다.

④ I2C — 규격상 필수

SDA/SCL이 open-drain이어야 ACK와 클럭 스트레칭이 성립한다.

대가 — 느리다

Low로 당기기 : 트랜지스터가 능동적으로 → 빠르다

  • High로 복귀 — : 풀업 저항이 커패시턴스를 충전 → RC 시정수만큼 느리다

t_rise ≈ 2.2 × R × C R = 10kΩ, C = 100pF 이면 → 2.2μs

상승 에지가 지수 곡선을 그린다. 이것이 I2C 속도의 근본 한계다.

저항을 작게 하면 빨라지지만 Low일 때 흐르는 전류가 커진다. I = VCC / R = 3.3V / 1kΩ = 3.3mA 싱크 능력(보통 3~20mA)을 넘으면 Low 레벨이 충분히 내려가지 않는다.

설정

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;    // open-drain
GPIO_InitStruct.Pull = GPIO_NOPULL;            // 외부 풀업 사용

// 또는 내부 풀업 (I2C에는 값이 부정확해 권장하지 않는다)
GPIO_InitStruct.Pull = GPIO_PULLUP;

실무 활용 — 페일세이프

릴레이나 MOSFET 게이트를 open-drain + 풀다운으로 제어하면 MCU가 리셋 중(핀이 Hi-Z)일 때 자동으로 OFF 상태가 된다

부팅 중이나 고장 시 안전한 쪽으로 떨어지는 회로를 만들 수 있다. push-pull은 리셋 중 Hi-Z가 되어 상태가 불확정이지만, open-drain + 외부 저항이면 확정적이다.

흔한 실수

❌ open-drain 으로 설정하고 풀업을 안 달았다

  • 핀이 Low와 Hi-Z만 오간다. High가 안 나온다
  • 오실로스코프로 보면 신호가 0V와 플로팅 사이를 오간다

❌ LED를 open-drain 으로 구동

  • 켜지긴 하지만 풀업을 통해 전류가 흘러 어둡다
  • push-pull 을 쓰거나 LED를 VCC 쪽에 단다

❌ I2C 에 push-pull 사용

  • 두 장치가 동시에 출력하면 단락. 통신 실패 또는 소자 손상

"출력이 High가 안 된다" 면 open-drain 설정에 풀업이 없는지부터 확인한다.

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — 주변장치·타이머 — GPIO(push-pull/open-drain)·PWM(PSC/ARR/CCR)·워치독·ADC·클럭