USB 키보드는 신호 만 보내거나 컴퓨터에서도 신호를 받습니까?


83

키보드는 컴퓨터의 신호가 필요하지 않습니다. 또는 신호를 수신하고 전송해야합니까?

편집 : 나는이 질문이 많은 관심을 생성 기대하지 않았다! 키보드를 사용하여 한 번에 두 대의 컴퓨터에 동일한 문자를 보낼 수 있도록 신호를 복제하는 두키를 만드는 꿈이 있었기 때문에 나는 그것을 물었다. (응답에서 만들 수있는 것에서) 컴퓨터는 다른 장치와 마찬가지로 키보드를 적극적으로 제어하기 때문에 분명히 불가능합니다. 어쨌든 나는 그것을 구축하는 기술이 없었기 때문에 큰 문제는 아닙니다!


40
예를 들어 잠금 키의 상태를 수신 할 수 있습니다. 많은 키보드에는 잠금 키의 상태를 나타내는 LED가 있습니다. Caps Lock을 켠 다음 키보드를 교체하십시오. 상태가 여전히 잠겨있을 수 있습니다.이 정보는 PC에서 가져와야합니다.
Máté Juhász

8
PS / 2 키보드조차도 PC에서 신호를 수신합니다. 그렇지 않으면 어떻게 LED를 켜거나 끌 수 있습니까?
phuclv

8
@Devsman 당신은 그렇게 할 수 없습니다. 그렇지 않으면 잠금 상태는 소프트웨어에 의해 변경 될 수 있기 때문에 동기화되지 않을 것입니다. 예를 들어, 2 개의 키보드를 연결하고 numlock을 누르면 다른 LED가 토글됩니다. 온 스크린 키보드로도
마찬가지입니다


7
USB 장치에는 특정 장치 클래스를 활성화하기위한 초기 핸드 쉐이킹 요구 사항으로 인해 양방향 데이터가 있어야합니다.
Steve

답변:


101

" HID (Human Interface Devices)에 대한 장치 클래스 정의"버전 11.1 "스펙에서 :

LED 상태와 CAPS LOCK, NUM LOCK, SCROLL LOCK, COMPOSE 및 KANA 이벤트 간의 동기화는 키보드가 아닌 호스트에 의해 유지됩니다. 부록 B의 키보드 설명자를 사용하는 경우 Set_Report (Output) 요청을 통해 5 비트 절대 보고서를 키보드 로 보내 LED 상태가 설정됩니다 .

키보드 LED를 변경하기 위해 키보드는 명령을 수락합니다. 따라서 "입력 전용"장치가 아닙니다 (즉, 데이터를 호스트로만 출력 함).

즉, 호스트와 장치 사이의 대화가 필요한 모든 USB 장치와의 협상 및 열거 프로세스가 있습니다. "읽기 전용"USB 장치를 가질 수 없습니다.

USB 이전에도 PC 키보드 컨트롤러는 키보드를 읽는 것 외에 몇 가지 작업을 수행했기 때문에 명령을 받아 들였습니다 ( reference ).

키보드가 별도의 주변 장치 시스템 장치 (예 : 대부분의 최신 데스크톱 컴퓨터) 인 경우 키보드 컨트롤러는 키에 직접 연결되지 않지만 일종의 직렬 인터페이스를 통해 키보드에 내장 된 마이크로 컨트롤러에서 스캔 코드를받습니다. 이 경우 컨트롤러는 일반적으로 와이어를 통해 키보드로 데이터를 다시 보내 키보드의 LED를 제어합니다.

IBM PC AT는 Intel 8042 칩을 사용하여 키보드와 인터페이스했습니다. 이 컴퓨터는 또한 Intel 80286의 칩 버그에 대한 해결 방법을 구현하기 위해 A20 라인에 대한 액세스를 제어했습니다. 1 키보드 컨트롤러는 또한 CPU가 보호 모드에서 실제 모드로 전환 될 수 있도록 소프트웨어 CPU 재설정을 시작하는 데 사용되었습니다. 286은 CPU가 재설정되지 않는 한 CPU가 보호 모드에서 실제 모드로 전환 할 수 없었기 때문에 모드 1 입니다. BIOS 및 운영 체제 서비스는 실제 모드의 프로그램 만 호출 할 수 있기 때문에 문제가되었습니다.

이러한 동작은이 동작을 예상하는 많은 소프트웨어에서 사용되었으므로 키보드 컨트롤러를 통한 재설정이 Intel 80386의 스위치 기능으로 인해 없어진 경우에도 키보드 컨트롤러는 A20 라인을 계속 제어하고 소프트웨어 CPU 재설정을 수행했습니다. CPU 재설정없이 보호 모드에서 실제 모드.


15
우리가 "신호"레벨에 대해 이야기하고 있다면 열거와 LED를 잊어 버린 경우에도 USB 입력은 폴링을 기반으로합니다. 호스트가 요청하지 않는 한 장치는 사전에 호스트에 데이터를 보낼 수 없습니다. 입력 장치는 매우 자주 폴링되어보고 할 새로운 것이 있는지 묻습니다.
Matti Virkkunen

"출력 전용"을 의미합니까?
Daniel

tbh, 키보드는 "입력"장치이며 "입력 전용"이란 말은 데이터를 호스트로만 보내지 만 수신하지 않는다는 것을 의미합니다. 관점이 키보드 또는 호스트인지에 따라 다릅니다.
LawrenceC

1
@Daniel 대부분의 사람들은 키보드를 "출력"장치라고 부르지 않습니다. 주변기기는 외부에 부착되어 있으므로 PC의 관점에서 입 / 출력이라고 부릅니다. 키보드, 마우스 또는 기타 주변 장치가 아닌 사용하려는 PC입니다.
phuclv

@ LưuVĩnhPhúc 알고 있지만 그는 So it is not an "input-only" device (meaning it only outputs data to the host)나를 혼란스럽게합니다
Daniel

56

클래스에 관계없이 모든 USB 장치가 작동하려면 양방향 통신이 필요합니다 . 모든 USB 장치 (또는 USB 사양의 기능 )는 데이터를 받거나받는 버퍼로 생각할 수있는 엔드 포인트 집합으로 표시됩니다 . 그러나 데이터 만 전송할 수있는 엔드 포인트조차도 토큰 이라는 특수 패킷을 기다렸다가 응답합니다. 여기에 이미지 설명을 입력하십시오

( 여기 에서 이미지는 회색 상자가 USB 호스트를 나타내고 흰색 상자가 USB 기능을 나타냄)

토큰 패킷을 사용하여 USB 호스트 폴링 연결 장치를 사용하여 소위 인터럽트 전송도 이러한 방식으로 수행됩니다. 일반 (벌크) 전송과 인터럽트 전송의 차이점은 폴링 시간이 짧고 후자의 경우 보장된다는 것입니다. 여전히 모든 전송은 호스트에 의해 시작됩니다.


18

이 질문은 USB 장치가 키를 눌렀을 때 (또는 마우스가 움직일 때) 스스로 PC에 무언가를 "보내는"일반적인 오해를 반영하고 있기 때문에주의가 많이 필요합니다. 실제로 USB 장치는 호스트로부터 해당 요청을받을 때까지 아무것도 보내지 않습니다. 일시 중단 된 장치의 깨우기 프로세스는 예외입니다.

USB는 표면 상 단순 해 보이지만 실제로는 기능이 매우 복잡합니다. 새로운 USB 장치는 기능을 시작하기 전에 먼저 "열거되어야"합니다. 순서는 다음과 같습니다.

  1. 키보드가 연결되면 호스트 포트는 "연결 상태"신호를받습니다 (LS 신호의 경우 키보드가 D-를 HIGH로 끌어옵니다).

  2. 그런 다음 호스트는 포트를 "포트 재설정"모드로 설정하고 USB PHY (물리 계층 드라이버)는 D + / D- 라인으로 "USB_RESET"을 보냅니다 (두 라인 모두 미리 정해진 시간 동안 LOW로 구동 됨). FS / HS 장치의 "포트 재설정"에 대한 일부 정보는 여기를 참조하십시오 .

  3. 그런 다음 호스트는 1ms 간격으로 프레임 경계 패킷을 출력하기 시작합니다. 일반 유선 키보드와 같은 저속 (LS) 장치의 경우이 장치는 "유효 상태 유지"펄스이며 FS의 경우 특수 SOF-프레임 시작 패킷이 생성됩니다. 이 패킷은 장치를 활성 모드로 유지하고 저전력 SUSPEND를 방지합니다.

  4. 그런 다음 "열거"가 시작됩니다. 호스트는 장치 설명자를 가져 오기위한 요청을 보냅니다. 장치 주소가 "0"인 "기본 파이프"로 요청이 전송됩니다. [현재 버스에있는 다른 모든 장치에는 이미 개별적으로 할당 된 USB 주소가 있어야하므로 이러한 장치는 현재 키보드 만 있습니다.]

  5. 키보드는 요청 된 정보를 반환하므로 호스트는 어떤 종류의 드라이버를로드해야하는지 결정할 수 있습니다.

  6. 호스트는 장치가 기본 주소를 새로운 할당 된 주소로 변경하도록 요구하는 트랜잭션을 보냅니다.

  7. 그런 다음 호스트는 이제 새로운 할당 된 주소에서 장치와의 새로운 통신 라운드를 시작합니다. 다른 모든 장치는이 통신이 처리되지 않으므로이 통신을 무시합니다.

  8. 호스트는 여러 다른 디스크립터에서 더 많은 정보를 읽고 결국 "장치 구성"을 선택합니다. 이것으로 열거 프로세스가 끝납니다.

  9. USB 장치 클래스에 따라 호스트가 장치와 통신을 시작합니다. 키보드의 경우 호스트는 본질적으로 "IN"요청을 주기적으로 전송하여 장치를 폴링합니다 (이 주기적 파이프가 "인터럽트"파이프라고하더라도). 키보드에 키를 눌렀거나 눌렀을 경우 키보드는이 정보를 반환합니다. 그렇지 않으면 데이터가 장치 드라이버로 반환되지 않습니다.

간단히 말해, 모든 USB 장치는 USB 호스트에서 고유 한 주소를 수신해야하며 두 개의 USB 호스트는 버스 충돌, 주소 불일치, 키 누르기 데이터의 임의 가로 채기 등과 같은 장치와 통신하기가 어렵습니다. USB 프로토콜을 사용하면 두 개의 USB 호스트 사이의 장치.


If keyboard has any key pressed/depressed, the keyboard will return this information-그러면 어떻게 유령 키가 발생합니까? 키보드가 키업 및 키 다운 이벤트를 보내야한다는 인상을 받았습니다. 키업 이벤트를 놓치면 고스트 키가있을 이유를 설명 할 수 있습니다.
Shadow

2
@shadow, 당신은 무엇을 요구하는지 확실하지 않습니다. 키보드의 폴링 속도는 8ms입니다. 키를 비동기식으로 누르고 있으므로 일부 이벤트 (make 또는 break)가 다른 폴링 프레임으로 들어갈 수 있으며 일부 이벤트는 IN 요청이 진행 중일 때 정확하게 발생합니다. 올바른 키보드 컨트롤러는 모든 이벤트 교차를 올바르게 처리해야하며 누락 된 이벤트가 없어야합니다. 키보드가 왜 "고스트 키"를 생성하는지 모르겠지만 USB 프로토콜과는 아무런 관련이 없습니다.
Ale..chenski

4
고스트 키는 실제 키가 연결된 방식과 관련이 있습니다. 더 저렴한 키보드 컨트롤러에는 각 키에 단일 핀이 없으며, 컨트롤러가 열 와이어를 나타내는 행 및 열과 같은 주소 지정 그리드 시스템이 있으며 행 와이어에서 신호를 찾습니다. 이 시나리오에서 두 개의 키 (예 : E 및 S)를 동시에 누르는 것은 타이밍을 제외하고 W 및 D를 누르는 것과 구별 할 수 없습니다.
Ben

2

다른 답변에서 설명했듯이 USB는 작동 방식의 일부로 양방향 통신이 필요합니다. PS / 2는 양방향 통신을 허용하면서 컴퓨터로 키를 전송하는 데 필요하지 않지만 키보드 LED를 설정해야합니다.

이론적으로 PS / 2 신호를 복제하여 두 번째 컴퓨터로 전송하고 컴퓨터에서 모든 명령을 버리는 장치를 만들 수 있으므로 키 누르기를 여러 컴퓨터에 보낼 수는 있지만 키보드 LED는 그렇지 않습니다. Num Lock, Caps Lock 및 Scroll Lock 상태에 응답합니다 (또는 Linux의 경우와 같이 LED 상태의 다른 변경 사항은 키보드 LED가 대체 용도로 사용됨).

그런 프로젝트가 얼마나 복잡한 지 잘 모르겠습니다. PS / 2와 함께 일한 지 오래되었습니다. 따라서 단순히 두 개의 전선 / 커넥터를 브리지 할 수 있는지 또는 명령을 한 방향으로 전달하지만 폐기하는 활성 장치 (예 : 마이크로 컨트롤러)가 필요한지 모르겠습니다. 다른 사람. 마이크로 컨트롤러를 사용했다면 키보드 LED 명령을 해석하고 디스플레이를 위해 "결합"할 수 있도록 장치를 만들 수도 있습니다 (예 : 컴퓨터 1에는 켜져 있지만 컴퓨터 2에는 꺼져 있으면 짧게 깜박임). 컴퓨터 2에는 켜져 있지만 컴퓨터 1에는 꺼져 있으면 LED, 두 컴퓨터에 모두 있으면 LED가 켜져 있고 두 컴퓨터에 모두 있으면 LED가 꺼져 있습니다). 그래도 더 발전 할 것입니다.

또한 목표가 다른 컴퓨터의 한 컴퓨터 또는 같은 책상의 두 대의 컴퓨터 등을 제어하는 ​​것이라면 다음을 살펴볼 수 있습니다.

  • VNC (네트워크를 통해 한 컴퓨터를 다른 컴퓨터에서 제어 할 수 있음)
  • RDP (또한 Microsoft Windows에 내장되어 있지만 Professional 버전이 필요한 네트워크를 통해 다른 컴퓨터에서 한 컴퓨터를 제어 할 수 있음)
  • KVM (두 대의 컴퓨터간에 하나의 주변 장치 세트를 전환 할 수있는 하드웨어)

1

USB 키보드 이전에 PS / 2 키보드는 하나의 키보드를 2 개의 장치에 연결하여 작동시킬 수있는 훨씬 간단한 프로토콜을 사용했습니다. 간단한 Y 연결 만 있으면됩니다.

오래된 USB 키보드에는 여전히 PS / 2 에뮬레이션 모드가 내장되어 있습니다. 자주색 커넥터 어댑터 중 하나를 사용하면 컴퓨터 뒷면의 PS / 2 포트에 연결할 수 있습니다. 따라서 두 대의 컴퓨터에서 USB to PS / 2 브레이크 아웃 케이블을 사용하면 USB 키보드로 돌아가는 자주색 어댑터가 제대로 작동 할 수 있습니다.

최신 USB 키보드는 기존 PS / 2 모드를 삭제 했으므로이 경우에는 작동하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.