출력 타입중 push-pull 타입에 대해 알아보겠습니다.
open drain( open collector ) 타입에 대해서는 많이 들어보았을텐데요
이 타입에 대해서는 본포럼에 있는 아래 링크를 참고 하시기 바랍니다.

http://forum.falinux.com/zbxe/index.php?_filter=search&mid=hardware&search_target=content&search_keyword=open&document_srl=565526
http://forum.falinux.com/zbxe/index.php?_filter=search&mid=hardware&search_target=content&search_keyword=open&document_srl=565631

open drain 과 open collector 는 MOSFET 로 만들었냐 BJT 로 만들었냐에 따라 이름이 달라졌지만, Push-pull 출력타입은 그냥 같은 이름을 사용 합니다.

1.jpg 
위 그림에서 윗쪽 TR 이 VCC 쪽으로 밀어 올리는 PUSH 역할이고, 아랫쪽 TR 이 GND 쪽으로 당기는 PULL 의 역할을 합니다.

동작 원리는 TR 을 스위치로 바꿔 아래 그림과 같이 이해 하면 됩니다.
2.jpg

두개의 TR 의 입력 신호는 동일하게 들어가면 안되므로 일반적으로 아래와 같이  NOT GATE 를 통해 서로 다른
신호가 입력되도록 설계됩니다.
3.jpg
두개의 TR 의 입력 신호는 동일하게 들어가면 안되므로 일반적으로 NOT GATE 를 통해 서로 다른 신호가 입력되도록 설계됩니다.
open drain 의 경우 내부 출력 신호가 high 일때 output 은 low 가 되지만, low 일 경우 정해진 상태 값을 갖지 못합니다.
회로적으로 알수 없는 상태가 되며, 이때문에 외부에서 이 신호를 입력을 받을 경우 반드시 pull-up 회로를 추가 해 주어야 합니다.
일반적으로 이 신호를 수신해 처리하는 입력장치의 회로에 pull-up 저항을 연결하며, 만약 이 출력 포트에 디바이스가 연결되지 않는다면
출력 상태를 정확하게 판단 할 수 없게 됩니다.
반면 push-pull 회로는 반드시 vcc, gnd 둘중 하나의 상태를 갖기 때문에 외부에 디바이스가 연결되지 않더라도 자체적으로 출력 상태를
갖고있어 스코프 등으로 확인 할 수 있습니다.

-이미지출처 : 구글링-