[Protocol] WIEGAND 통신

1. WIEGAND 통신 방식이란?
두 개의 D0, D1 라인을 이용해 소량의 데이터를 전송 하는 방식으로 , 주로 출입통제 장치의 리더와 컨트롤러 간의 통신 방식에
사용 됩니다.
물론 리더는 RS-485, RS-232, ABA-Track II 와 같이 다양한 통신 방식을 취하기도 하지만, 주로 WIEGAND 방식을
많이 사용 합니다. 그 이유는 .. 개인적으로 생각했을때 구현이 쉽고, 별도의 PHY 칩을 사용 하지 않기 때문에 생산 단가를
좀더 줄일 수 있어서가 아닌가.. 생각해 봅니다. 

2. WIEGAND 통신 타이밍도

위 그림과 같이 D0, D1  두 신호선으로 통신 합니다.
D0, D1 이 각각 의미 하는 것은, D0 가 LOW 이면 그 비트 값이 '0' 이고, D1 이 LOW 이면 그 비트 값이 '1' 임을 의미 합니다.
따라서 D0 와 D1 은 동시에 LOW 가 되지 않으며, 정해진 타이밍이 있습니다.
예를 들어 위 그림의 신호를 데이터로 변환해 보자면, 4 번 LOW 값이 있으므로 4 비트 임을 알 수 있고, 값은
1101 임을 알 수 있습니다.

3. WIEGAND 신호 구현
실제 WIEGAND 통신 방식으로 데이터를 전송 할때는 데이터가 손상될 수 있으므로, 앞뒤에 패리티비트를 추가 하거나,
복잡한 계산방법을 적용해 데이터를 암호화 하는 경우도 있습니다.
하지만 생성된 데이터는 약 20 ~ 40 Bit 이내의 데이터이고, 이를 0 번 비트 부터 차례대로 전송 하면 됩니다.
해당 비트가 0 이면 D0 가 연결된 PIN 을 LOW 로 하고, 비트 값이 1 이면 D1 이 연결된 PIN 을 LOW 로 해주면 그만 입니다.
물론 회로적으로 GPIO 의 출력을 그대로 내보내지는 않고 트랜지스터 등을 이용해 힘을 실어 주어야 겠지요.
그럼 받는 쪽은 어떻게 해야 할까요?
위 회로의 좌측이 리더에서 들어온 WIEGAND 신호이고, 우측이 CPU 입니다. 
사실 중간에 OPAMP 등을 이용해 신호의 H / L 의 구분을 정확하게 하는 회로가 있지만 생략 했습니다.
위 회로를 보면 두개의 D0 , D1 신호는 MCU 의 두개의 인터럽트 PIN에 연결되어 있습니다.
각각 INT0 , INT1 에 연결되어 있기 때문에 INT0 에 인터럽트가 발생하면 그냥 현재 비트가 0 , INT1 에 인터럽트가
발생 하면 비트 값이 1 임을 알 수 있고, 전역변수로 선언된 데이터를 쉬프트하며 채워 넣기만 하면 됩니다.
아주 간단한 방식이지요.
그런데 만약 외부 인터럽트 PIN 이 여유롭지 않다면 어떻게 해야 할까요?
두 개의 D0,D1 을 AND 게이트를 통해 하나의 INTERRUPT 로 연결하고 D0 만 다른 GPIO 로 연결합니다.
그리고나서 연결된 인터럽트가 발생하면 D0 값을 읽어 D0 가 L 이면 값은 0 고, D0 가 1 이면 무조건 D1이 0 이기 때문에
값은 1 로 판단 합니다.
위 방법은 어차피 두개의 PIN 을 사용 해야 하는건 맞지만, 인터럽트 소스를 하나만 쓴다는 장점이 있습니다.


참고도.


댓글

이 블로그의 인기 게시물

Orange for Oracle에서 한글 깨짐 해결책

[UI] GNB·LNB·SNB·FNB 용어 설명