안녕하세요. 오늘은 USB 키보드 통신 파형에 대해 알아보겠습니다. 1편에서는 키보드 통신파형을 분석하기위한 지식들을 알아보겠습니다.
해당 글은 아래의 유튜브를 참고했습니다.
https://www.youtube.com/watch?v=wdgULBpRoXk
키보드는 LS인 것도 있고 FS인 것도 있습니다. 이전 글에서 LS는 D-가 pull-up이고 FS는 D+가 pull-up이라고 했었는데 실제 키보드를 가지고 그렇게 나오는지 확인해 보겠습니다.
먼저 LS 키보드를 연결했습니다. D-가 HIGH 입니다.
FS 키보드를 연결했습니다. D+가 HIGH입니다.
LS키보드의 통신파형을 분석해보겠습니다.
Differential 1일때는 D+ 가 HIGH고 D-가 LOW입니다.
Differential 0일때는 D+가 LOW고 D-가 HIGH입니다.
LS에서 J => Differential 0이고 K => Differential 1입니다.
그러므로 J면 D+가 LOW, K면 D+가 HIGH라고 생각하면 됩니다. (FS면 반대입니다)
J,K가 중요한 이유는 USB스펙문서에 J,K를 사용해서 시작조건/끝나는조건등등 나타냅니다.
그리고 0일때는 D+, D-가 모두 LOW인경우를 나타냅니다 (SE0)
Start-of-Packet(SOP)의 설명을 보면 데이터라인이 IDLE에서 K state로 변할때입니다. IDLE는 J상태입니다.
End-of-Packet(EOP)를 보면 SE0가 2bit time이고 J가 1bit가 나오게 됩니다
Sync는 패킷의 시작을 의미합니다. 아래 설명을보면 3*KJ + 2*KK면 Sync를 의미합니다.
위의 그림을 보면 숫자가 적혀있습니다 0000 0001 이거는 NRZI 데이터 인코딩으로 나타낸 값입니다. 해당 값을 정하는 방법은 이전값과 비교했을때 다르면 0이고 같으면 1로 나타냅니다.
SYNC 다음에는 패킷 ID가 나옵니다. SYNC 이후에 100110110이 PID IN 이라고 적혀있습니다.
앞에있는 4비트가 패킷 ID이고, 뒤에있는 0110은 오류검출을위해서 패킷 ID를 반전시키는것입니다.
1001은 PID IN입니다. PID IN은 호스트가 디바이스에게 데이터를 요청한다는 의미입니다.
토큰 패킷 포맷을보면 PID다음에 ADDR과 ENDP와 CRC5입니다.
ADDR은 디바이스의 주소를 나타냅니다. 위의 그림에서는 디바이스의 주소가 0x20입니다. 실제 컴퓨터에서도 디바이스 주소가 0x20이라고 나와있습니다.
ENDP는 엔드포인트를 의미합니다.
CRC는 데이터의 오류를 검사하는 값입니다.
컴퓨터는 키보드에게 주기적으로 IN패킷을 보내서 키 입력이 있는지 확인합니다. 만약 키보드는 보낼 데이터를 준비하지못했으면 PID NAK을 보냅니다.
키보드가 보낼 데이터가 입력한 키를 아래처럼 전달합니다. 키보드의 응답은 다음편에서 자세히 알아보겠습니다.
'지식 > MCU지식' 카테고리의 다른 글
MCU-Open drain 알아보기 (0) | 2023.10.15 |
---|---|
ARM 명령어 아키텍처 (1) | 2023.04.23 |
엔디안이란?(빅엔디안, 리틀엔디안) (0) | 2023.03.26 |
MCU GPIO 전류 측정하기 (0) | 2023.01.23 |
UART통신 알아보기 (1) | 2022.12.24 |