반응형

 USB 프로토콜은 우리가 자주 쓰는 USB 통신에 대한 통신 방식을 정의합니다.

해당 USB 프로토콜이 어떻게 통신하는 지 이해해보는 시간을 갖겠습니다.

 

 먼저, 아래의 개념을 이해해야합니다.

 각 USB 트랜잭션은 아래의 것들로 구성되어 있습니다.

Token Packet : 토큰 패킷 (패킷이 기대하는, 다음에 따라야할 것이 뭔지에 대해서, 정의하는 헤더를 가짐.)

Optional Data Packet : 데이터 패킷 (이건, 페이로드를 포함하고 있음), 그리고

Status Packet : 상태 패킷 (트래적션을 이해하기 위해서 사용되고, 에러 정정을 위한 방법을 제공하기 위해 사용됨)

 

 이렇게 3가지의 트랜잭션. 즉, 패킷들이 있다는 걸 알아보았으니, 각 Token이 무얼하는 지 알아볼까요?

Token Packet

 USB는 호스트 중앙의 버스 (a host centric bus)입니다. 즉, Host는 모든 트랜잭션들을 시작하게 되는데요. token으로 불리우는, 첫번째 패킷은 host에 의해 생성이 됩니다. 그것의 목적은, 아래의 세가지를 설명하기 위함입니다.

 - 다음에 따라야할 내용

 - 데이터 트랜잭션은 읽어야하는 지 혹은 써야하는 지 그리고, 

 - 디바이스 주소와, 지정된 엔디포인트가 무엇인지.

 

 Token 패킷은 OUT Token, IN Token, SOF Token, SETUP Token 이렇게 4가지 토큰이 있습니다.

 Token Packets은 3개의 유형이 있습니다.

In - 호스트가 USB 디바이스에게, 자신이 정보를 읽고싶다고 알립니다.

Out - 호스트가 USB 디바이스에게, 자신이 정보를 보내고싶다고 알립니다.

Setup - 호스트가 전송(Control transfers)을 시작하기 위해, 사용합니다.

 

Interrupt Transfers

 인터럽트는, 디바이스에 의해 일어난다는 걸 아실겁니다.

 인터럽트 요청 (Interrupt request)는 디바이스에 의해, 대기줄(큐)에 저장됩니다, 호스트가 USB 디바이스에게 데이터를 요청하기 위해, poll을 하기 전까지 말이죠.

 

 IN 패킷을 보냄으로써,

호스트는 주기적으로 인터럽트 엔드포인트 (Interrupt endpoint)를 poll(폴링)합니다. 어느 주기로 할지는, 엔드포인트 디스크립터에 명시되어있습니다.

 

 디바이스에 의해, 인터럽트가 큐에 저장이 되어 있다면, 그 function (디바이스라고 이해해도 좋습니다)은 해당 인터럽트와 관련있는 데이터를 포함하여, Data Packet을 보냅니다. 이 과정은, 디바이스가 IN Token을 받았을 때, 일어납니다.

 

 

 

 

Endpoint Types

USB 스펙은 4가지의 전송/엔드포인트 타입을 정의합니다.

1. Control Transfers

2. Interrupt Transfers

3. Isochronous Transfers

4. Bulk Transfers

 

 

 

https://www.beyondlogic.org/usbnutshell/usb5.shtml

 

 

반응형