카테고리 없음

PS2 키보드 프로토콜

달남 2020. 6. 19. 17:33

http://panda.cs.ndsu.nodak.edu/~achapwes/PICmicro/PS2/ps2.htm

PS / 2 마우스 / 키보드 프로토콜
이 문서는 1999 년 Adam Chapweske 저작권
소개:
많은 최신 마우스 및 키보드에서 사용되는 PS / 2 디바이스 인터페이스는 IBM에서 개발했으며 원래 IBM 기술 참조 매뉴얼에 표시되었습니다. 그러나이 문서는 몇 년 동안 인쇄되지 않았으며 내가 아는 한 현재이 정보에 대한 공식적인 출판물은 없습니다. IBM 기술 참조 매뉴얼에 액세스 할 수 없으므로이 페이지의 모든 정보는 본인의 경험과이 페이지 맨 아래에 나열된 참조의 도움을 통해 얻은 것입니다.
이 문서는 PS / 2 마우스, PS / 2 키보드 및 AT 키보드가 사용하는 인터페이스를 설명합니다. 프로토콜뿐만 아니라 물리적 및 전기적 인터페이스도 다룰 것입니다. 명령, 데이터 패킷 형식 또는 키보드 또는 마우스와 관련된 기타 정보와 같은 고급 정보가 필요한 경우 두 장치에 대해 별도의 문서를 작성했습니다.

PS / 2 (AT) 키보드 인터페이스
PS / 2 마우스 인터페이스

또한이 사이트의 메인 페이지 에서 프로젝트, 코드, 마우스 및 키보드 관련 링크를 포함하여이 주제와 관련된 자세한 정보 를 확인하십시오 . 이 사이트에서 실수 나 잘못된 조언을 찾으면 이메일을 보내 십시오.

물리적 인터페이스 :
물리적 PS / 2 포트는 두 가지 스타일의 커넥터 중 하나입니다 : 5 핀 DIN 또는 6 핀 미니 DIN. 두 커넥터는 완전히 (전기적으로) 비슷합니다. 이 둘의 실질적인 차이점은 핀 배열입니다. 즉, 간단한 배선 어댑터로 두 가지 유형의 커넥터를 쉽게 변경할 수 있습니다. 이 비용은 각각 약 $ 6이거나 두 커넥터의 핀을 일치 시켜서 직접 만들 수 있습니다. DIN 표준은 독일 표준화기구 (Deutsches Institut fuer Norm)에 의해 작성되었습니다. 그들의 웹 사이트는 http://www.din.de에 있습니다 (이 사이트는 독일어로되어 있지만 대부분의 페이지는 영어로도 제공됩니다).
PC 키보드는 6 핀 미니 DIN 또는 5 핀 DIN 커넥터를 사용합니다. 키보드에 6 핀 미니 DIN이 있고 컴퓨터에 5 핀 DIN (또는 그 반대)이있는 경우 두 가지를 위에서 설명한 어댑터와 호환되도록 만들 수 있습니다. 6 핀 mini-DIN이있는 키보드는 종종 "PS / 2"키보드라고하며 5 핀 DIN이있는 키보드는 "AT"장치라고합니다 ( "XT"키보드는 5 핀 DIN도 사용함) PC 용으로 제작 된 모든 최신 키보드는 PS / 2, AT 또는 USB입니다. 이 문서  완전히 다른 인터페이스를 사용하는 USB 장치 에는 적용 되지 않습니다 .
마우스는 다양한 모양과 크기 (및 인터페이스)로 제공됩니다. 가장 인기있는 유형은 아마도 USB 마우스가 인기를 얻고있는 PS / 2 마우스 일 것입니다. 몇 년 전만해도 시리얼 마우스는 꽤 인기가 있었지만 컴퓨터 산업은 USB 및 PS / 2 장치를 지원하기 위해이를 버리고 있습니다. 이 문서는 PS / 2 마우스에만 적용됩니다. 직렬 또는 USB 마우스를 인터페이스하려면 웹의 다른 곳에서 많은 정보를 사용할 수 있습니다.

키보드 / 마우스를 컴퓨터에 연결하는 케이블의 길이는 일반적으로 약 6 피트이며 얇은 층의 얇은 포일 쉴드로 둘러싸인 4-6 개의 26 AWG 와이어로 구성됩니다. 더 긴 케이블이 필요한 경우 대부분의 가전 제품 판매점에서 PS / 2 확장 케이블을 구입할 수 있습니다. 여러 개의 연장 케이블을 함께 연결해서는 안됩니다. 30 피트 키보드 케이블이 필요한 경우 30 피트 키보드 케이블을 구입하십시오. 6 피트 케이블 5 개를 함께 연결하지 마십시오. 그렇게하면 키보드 / 마우스와 호스트 간의 통신이 제대로되지 않을 수 있습니다.
참고로, 키보드에는 다른 유형의 커넥터가 있습니다. 대부분의 키보드 케이블은 키보드에 유선으로 연결되어 있지만 일부 케이블은 영구적으로 연결되어 있지 않고 별도의 구성 요소로 제공됩니다. 이 케이블에는 한쪽 끝에 DIN 커넥터 (컴퓨터에 연결되는 쪽)와 키보드 끝에 SDL (Sheilded Data Link) 커넥터가 있습니다. SDL은 "AMP"라는 회사에서 만들었습니다. 이 커넥터는 전화 커넥터와 핀이 아니라 와이어와 스프링이 있으며 클립이 제자리에 고정되어 있다는 점에서 전화 커넥터와 다소 유사합니다. 이 커넥터에 대한 자세한 정보가 필요하면 AMP 웹 사이트 ( http://www.connect.amp.com) 에서 찾을 수 있습니다 .. SDL을 사용하는 AT 키보드도있을 수 있지만 (이전) XT 키보드에서 이러한 유형의 커넥터 만 보았습니다. SDL 커넥터와 USB 커넥터를 혼동하지 마십시오. 아래 다이어그램에서 둘 다 비슷할 수도 있지만 실제로는 매우 다릅니다. SDL 커넥터에는 스프링과 움직이는 부품이 있지만 USB 커넥터에는 없습니다.
각 커넥터의 핀 배치는 다음과 같습니다.





전기 인터페이스 :
참고 :이 문서 전체에서 더 일반적인 "호스트"라는 용어를 사용하여 컴퓨터 또는 키보드 / 마우스가 연결된 모든 것을 지칭하고 "장치"라는 용어는 키보드 / 마우스를 나타냅니다.
Vcc / Ground는 키보드 / 마우스에 전원을 공급합니다. 키보드 나 마우스는 호스트에서 100mA를 넘지 않아야하며 일시적인 서지를 피하기 위해주의를 기울여야합니다. 이러한 서지는 키보드 / 마우스를 "핫 플러그"하여 발생할 수 있습니다 (예 : 컴퓨터의 전원이 켜져있는 동안 장치를 연결 / 분리). 이전 마더 보드에는 키보드와 마우스 포트를 보호하는 표면 장착 퓨즈가있었습니다. 이 퓨즈가 끊어지면 마더 보드는 소비자에게 쓸모없고 일반 기술자에게는 고정 할 수 없었습니다. 대부분의 최신 마더 보드는이 문제를 해결하는 데 도움이되는 자동 재설정 "Poly"퓨즈를 사용합니다. 그러나 이것은 표준이 아니며 여전히 사용중인 구형 마더 보드가 많이 있습니다. 따라서 PS / 2 마우스 또는 키보드를 핫 플러그하지 않는 것이 좋습니다.

요약 : 전원 사양
Vcc = + 5V.  
최대 전류 = 100mA.

데이터 및 클록 라인은 모두 + 5V의 풀업 저항을 갖춘 오픈 컬렉터입니다. "오픈 컬렉터"인터페이스에는 두 가지 가능한 상태가 있습니다 : 낮은 임피던스 또는 높은 임피던스. "낮은"상태에서, 트랜지스터는 라인을 접지 레벨로 끌어 당긴다. "고 임피던스"상태에서 인터페이스는 개방 회로 역할을하며 라인을 낮게 또는 높게 구동하지 않습니다. 또한 버스와 Vcc 사이에 "풀업 (Pullup)"저항이 연결되어 있기 때문에 버스의 어떤 장치도 적극적으로 낮게 당기지 않으면 버스가 높게 당겨집니다. 이 저항기의 정확한 값은 그다지 중요하지 않습니다 (1 ~ 10kΩ). 저항이 클수록 전력 소비가 줄어들고 저항이 작을수록 상승 시간이 더 빠릅니다. 일반적인 오픈 컬렉터 인터페이스는 다음과 같습니다.

그림 1 : 일반 오픈 컬렉터 인터페이스 데이터와 클럭은 마이크로 컨트롤러의 핀 A와 B에서 각각 읽습니다. 두 라인 모두 일반적으로 + 5V로 유지되지만 C와 D에서 로직 "1"을 선언하여 접지로 풀링 할 수 있습니다. 결과적으로 데이터는 D, 반전, 클럭은 C와 반전됩니다.




참고 :이 웹 사이트의 예제를 살펴보면 PIC 마이크로 컨트롤러로 오픈 콜렉터 인터페이스를 구현할 때 몇 가지 요령을 사용합니다. 입력과 출력 모두에 동일한 핀을 사용하고 외부 저항을 사용하지 않고 PIC의 내부 풀업 저항을 활성화합니다. 해당 핀을 출력으로 설정하고 해당 포트에 "0"을 쓰면 선이 접지로 당겨집니다. 핀을 입력으로 설정하여 라인이 "고 임피던스"상태로 설정됩니다. PIC의 내장 보호 다이오드와 충분한 전류 싱크를 고려하면 이것이 올바른 구성이라고 생각합니다. 당신의 경험이 그렇지 않다는 것을 알려주세요.

커뮤니케이션 : 일반 설명
PS / 2 마우스 및 키보드는 양방향 동기식 직렬 프로토콜을 구현합니다. 두 라인이 모두 높은 경우 (오픈 콜렉터) 버스가 "유휴"상태입니다. 키보드 / 마우스가 데이터 전송을 시작할 수있는 유일한 상태입니다. 호스트는 버스를 완벽하게 제어 할 수 있으며 클럭 라인을 낮게 잡아서 언제든지 통신을 차단할 수 있습니다.  
장치는 항상 클럭 신호를 생성합니다. 호스트가 데이터를 보내려면 먼저 Clock low를 당겨 장치와의 통신을 금지해야합니다. 그런 다음 호스트는 Data low를 끌어와 Clock을 해제합니다. 이것은 "전송 요청"상태이며 장치에 클럭 펄스 생성을 시작하도록 신호를 보냅니다.

요약 : 버스 상태
데이터 = 높음, 클럭 = 높음 :   유휴 상태.
데이터 = 높음, 클럭 = 낮음 :   통신 금지.
데이터 = 낮음, 클럭 = 높음 :   호스트 요청 전송

  모든 데이터는 한 번에 한 바이트 씩 전송되며 각 바이트는 11-12 비트로 구성된 프레임으로 전송됩니다. 이 비트는 다음과 같습니다.

1 시작 비트. 항상 0입니다.

8 데이터 비트, 최하위 비트 우선.

1 패리티 비트 (홀수 패리티)

1 정지 비트. 항상 1입니다.

승인 비트 1 개 (호스트 간 통신에만 해당)

패리티 비트는 데이터 비트에 짝수의 1이 있으면 설정되고 데이터 비트에 홀수의 1이 있으면 재설정 (0)됩니다. 데이터 비트에서 1의 수에 패리티 비트를 더한 값은 항상 홀수 (홀수 패리티)에 합산됩니다. 이는 오류 감지에 사용됩니다. 키보드 / 마우스는이 비트를 확인해야하며 올바르지 않은 경우 잘못된 명령을받은 것처럼 응답해야합니다.
장치에서 호스트로 전송 된 데이터 는 클럭 신호 의 하강 에지에서 읽습니다 . 호스트에서 장치로 전송 된 데이터는 상승 에지 에서 읽습니다   클럭 주파수는 10-16.7 kHz 범위에 있어야합니다. 즉, 클럭은 30-50 마이크로 초 동안 높고 30-50 마이크로 초 동안 낮아야합니다. 키보드, 마우스 또는 호스트 에뮬레이터를 설계하는 경우 각 셀의 중간에있는 데이터 라인을 수정 / 샘플링해야합니다. 즉, 적절한 클럭 전환 후 15-25 마이크로 초입니다. 키보드 / 마우스는 항상 클럭 신호를 생성하지만 호스트는 항상 통신을 완벽하게 제어합니다.
타이밍은 절대적으로 중요합니다. 이 기사에서 제공하는 수량은 정확히 따라야합니다.

통신 : 장치-호스트
데이터 라인과 클럭 라인은 모두 오픈 컬렉터입니다. 저항은 각 라인과 + 5V 사이에 연결되므로 버스의 유휴 상태가 높습니다. 키보드 나 마우스가 정보를 보내려고 할 때 먼저 클럭 라인을 검사하여 로직 레벨이 높은지 확인합니다. 그렇지 않은 경우 호스트는 통신을 금지하고 있으며 호스트가 Clock을 해제 할 때까지 장치는 전송 될 데이터를 버퍼링해야합니다. 장치가 데이터 전송을 시작하기 전에 클럭 라인은 최소 50 마이크로 초 동안 지속적으로 높아야합니다. 
이전 섹션에서 언급했듯이 키보드와 마우스는 11 비트 프레임의 직렬 프로토콜을 사용합니다. 이 비트는 다음과 같습니다.

1 시작 비트. 항상 0입니다.

8 데이터 비트, 최하위 비트 우선.

1 패리티 비트 (홀수 패리티)

1 정지 비트. 항상 1입니다.

키보드 / 마우스는 클럭이 높을 때 데이터 라인에 비트를 쓰고 클럭이 낮을 때 호스트가 읽습니다. 그림 2와 3은이를 설명합니다.
그림 2 : 장치 간 통신 클럭이 높을 때 데이터 라인의 상태가 변경되고 클럭이 낮을 때 데이터가 유효합니다.




그림 3 : 키보드에서 컴퓨터로 전송되는 "Q"키 (15h)에 대한 스캔 코드. 채널 A는 클럭 신호입니다. 채널 B는 데이터 신호입니다.

---



클럭 주파수는 10-16.7 kHz입니다. 클럭 펄스의 상승 에지에서 데이터 전이까지의 시간은 5 마이크로 초 이상이어야합니다. 데이터 전환에서 클럭 펄스의 하강 에지까지의 시간은 5 마이크로 초 이상 25 마이크로 초 이하 여야합니다. 
호스트는 적어도 100 마이크로 초 동안 클럭 라인을 낮게 잡아 당김으로써 언제든지 통신을 금지 할 수 있습니다. 11 번째 클럭 펄스 이전에 전송이 금지 된 경우 장치는 현재 전송을 중단하고 호스트가 클럭을 해제 할 때 데이터의 현재 "청크"재전송을 준비해야합니다. 데이터의 "청크"는 작성 코드, 중단 코드, 장치 ID, 마우스 이동 패킷 등일 수 있습니다. 예를 들어, 2 바이트 중단 코드의 두 번째 바이트를 보내는 동안 키보드가 중단 된 경우 다시 전송해야합니다. 중단 된 바이트뿐만 아니라 해당 브레이크 코드의 두 바이트
호스트가 첫 번째 하이에서 로우로의 클럭 전환 이전 또는 마지막 클럭 펄스의 하강 에지 이후에 클럭을 로우로 끌어 올 경우 키보드 / 마우스는 데이터를 다시 전송할 필요가 없습니다. 그러나 전송해야 할 새 데이터가 작성되면 호스트가 Clock을 해제 할 때까지 버퍼링해야합니다. 키보드에는이 목적을위한 16 바이트 버퍼가 있습니다. 16 바이트 이상의 키 입력이 발생하면 버퍼에 공간이 생길 때까지 추가 키 입력이 무시됩니다. 마우스는 전송을 위해 가장 최근의 이동 패킷 만 저장합니다.
호스트 간 통신 :
패킷은 호스트 대 장치 통신에서 약간 다르게 전송됩니다.
우선, PS / 2 장치는 항상 클럭 신호를 생성합니다. 호스트가 데이터를 보내려면 먼저 다음과 같이 시계 및 데이터 라인을 "송신 요청"상태로 두어야합니다.

최소 100 마이크로 초 동안 클럭을 낮게 당겨 통신을 금지합니다.

데이터를 낮게 당겨 "송신 요청"을 적용한 다음 시계를 놓습니다.

장치는 10 밀리 초를 초과하지 않는 간격으로이 상태를 확인해야합니다. 장치가이 상태를 감지하면 8 개의 데이터 비트와 1 개의 정지 비트로 클럭 신호 및 클럭 생성이 시작됩니다. 호스트는 클럭 라인이 낮을 때만 데이터 라인을 변경하고 클럭이 높을 때 장치가 데이터를 읽습니다. 이는 장치 간 통신에서 사용되는 것과 반대입니다.
정지 비트가 수신 된 후 장치는 데이터 라인을 낮게 설정하고 마지막 클럭 펄스를 생성하여 수신 된 바이트를 확인합니다. 11 번째 클럭 펄스 후에 호스트가 데이터 라인을 해제하지 않으면 장치는 데이터 라인이 해제 될 때까지 계속 클럭 펄스를 생성합니다 (장치는 오류를 생성합니다).
호스트는 100 마이크로 초 이상 동안 클럭을 낮게 유지함으로써 11 번째 클럭 펄스 (승인 비트) 이전의 전송을 중단 할 수 있습니다.
이 과정을 좀 더 이해하기 쉽게하기 위해 호스트가 PS / 2 장치로 데이터를 보내기 위해 따라야하는 단계는 다음과 같습니다.

1) 클럭 라인을 최소 100 마이크로 초 동안 낮추십시오.
2) 데이터 라인을 낮추십시오.
3) 시계 라인을 해제하십시오.
4) 장치가 시계 라인을 낮출 때까지 기다립니다.
5) 첫 번째 데이터 비트를 전송하도록 데이터 라인을 설정 / 재설정합니다.
6) 장치가 클럭을 높이기를 기다립니다.
7) 장치가 클럭을 낮출 때까지 기다립니다.
8) 나머지 7 개의 데이터 비트와 패리티 비트에 대해 5-7 단계를 반복하십시오.
9) 데이터 라인을 해제하십시오.
10) 장치가 데이터를 낮출 때까지 기다립니다.
11) 장치가 시계를 낮출 때까지 기다립니다.
12) 장치가 데이터 및 시계를 놓을 때까지 기다립니다.


그림 3은이를 그래픽으로 보여 주며 그림 4는 호스트에서 생성 된 신호와 PS / 2 장치에서 생성 된 신호를 보여주기 위해 타이밍을 분리합니다. "ack"비트에 대한 타이밍의 변화에 ​​주목하십시오. 클럭 라인이 높을 때 (다른 11 비트의 경우처럼 낮을 때가 아니라) 데이터 전이가 진행됩니다.



 
그림 4를 참조하면 호스트가 찾는 두 가지 시간 수량이 있습니다. (a)는 호스트가 처음 클럭 라인을 낮춘 후 디바이스가 클럭 펄스 생성을 시작하는 데 걸리는 시간으로, 15ms 이하 여야합니다. (b)는 패킷이 전송되는 데 걸리는 시간이며 2ms 이하 여야합니다. 이러한 시간 제한 중 하나가 충족되지 않으면 호스트가 오류를 생성해야합니다. "ack"이 수신 된 직후, 호스트는 데이터를 처리하는 동안 통신을 금지하기 위해 클럭 라인을 낮게 가져올 수 있습니다. 호스트가 보낸 명령에 응답이 필요한 경우 호스트가 클럭 라인을 해제 한 후 20ms 이내에 응답을 수신해야합니다. 그렇지 않으면 호스트가 오류를 생성합니다.

다른 출처 / 참고 문헌 :

아담의 마이크로 리소스 홈