무한입력과 안티 고스팅...

by GON posted Mar 09, 2014
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
정확히 이해하시려면 "매트릭스"라는 개념을 먼저 이해하여야 합니다.

키보드에는 수많은 스위치가 있습니다. 그렇다보니 이걸 다 따로 따로 입력을 제어/인식하려면, 스위치 갯수만큼의 출력/입력단이 있어야 합니다. 그러면 키보드 스위치 100개라고만 잡아고, 200개의 입출력이 필요해지죠... 그런데 컨트롤러칩이 200개 이상의 다리를 가지고 있으려면... 그런건 BGA 밖에는 없고, 가격도 비싸지지요... 키보드의 가격대를 생각하면(양산형 기준...) 이렇게는 도저히 해결이 안되는거예요...

그래서 매트릭스라는 것을 사용합니다.

키보드에 4개의 키가 있다고 가정합시다.

원래는 컨트롤러에 신호 출력 4개, 신호 입력 4개의 다리(단자)가 필요합니다. 총 8개가 필요하죠...

그런데 이걸 매트릭스라는걸로 구성하면,

출력 2개, 입력 2개면 해결되요, 출력단이 a, b 가 있고, 입력단이 c, d가 있으면,

a출력-c입력 = 1번 스위치 입력
a출력-d입력 = 2번 스위치 입력
b출력-c입력 = 3번 스위치 입력
b출력-d입력 = 4번 스위치 입력

이런식으로 해결한거죠...

그런데 여기에 문제가 있어요,
각각을 눌렀을때는 상관이 없는데, 1번 스위치와 4번 스위치 동시에 누르면 어떻게 될까요?
a-b-c-d 접점이 모두 연결이 되어버려요, 즉 2번과 3번 스위치까지 입력이 된걸로 컨트롤러가 인식을 합니다.

이게 바로 고스팅 현상이예요... 누르지 않은 키가 누른 것으로 인식이 되는거지요,
그리고 안티 고스팅은 이것을 걸러내기 위해서 키보드 컨트롤러(펌웨어)에 로직을 심어서 처리하는 것을 말합니다.
(하드웨어로 처리하는 방법도 있는데.... 다이오드를 써요, 이건 나중에...)


무한입력은 또 다른 이야기 입니다. 키를 누르는대로 아무리 많은 키를 동시에 눌러도 다 입력이 된다는 의미인데,
스위치에 각각 다이오드를 연결해서 역방향 신호가 흐르지 않게 하고, 컨트롤러(펌웨어)에서는 안티 고스팅 로직을 아예 빼버리면 그게 무한입력이 가능하게 됩니다.

즉, 무한입력이 가능하게 되려면 컨트롤러(펌웨어)에서는 "안티 고스팅"로직이 무조건 "없어야"합니다.


무한입력과 안티 고스팅은 이처럼 서로 전혀 다른 관점의 이야기 입니다.