C언어,ARM

Push pull , Open drain

안녕1999 2020. 1. 2. 23:25

/** 
  * @brief  GPIO Output type enumeration 
  */  
typedef enum

  GPIO_OType_PP = 0x00,//Push pull
  GPIO_OType_OD = 0x01//Open drain (외부 Pull-Up 저항 필요)
}GPIOOType_TypeDef;

Push pull
- 출력포트의 FET/TR을 위, 아래 2개 사용.
  칩의 전원을 사용하여 신호 출력.
  예) Vcc or GND

Open drain
- 출력포트의 FET/TR을 아랫쪽 1개만 사용.
  외부 풀업저항의 전원을 사용하여 신호출력. (출력이 아니라, 포트의 FET/TR을 사용하여, GND에 붙였다, 떼었다)
  예) Vcc_ext or GND
- 출력 레벨쉬프터로 사용가능.(출력만 가능. 입력은 저항으로 전압분배 필요)
  예) cpu는 3.3V이고, 통신칩은 5V일때
  즉, 3.3V cpu로 5V칩을 제어(출력)를 할 수 있다.
- 여러 칩의 출력이 서로 묶여있는 경우에는

  전력소모가 커질 수 있어, Open drain으로 구성해야한다.
- Open drain만 가능한 칩(포트)가 있다.
  예) i2c 슬레이브 ic(외부 EEPROM 24C64)
  물론 1:1 사용이라면, 외부 풀업저항없이, Push pull로 사용해도 문제는 크게 없다.