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로 사용해도 문제는 크게 없다.