MCU지식/USB통신

USB2.0 데이터 신호 인코딩

원원 2024. 4. 10. 15:21

안녕하세요. 오늘은 USB2.0에서 사용하는 데이터 신호 인코딩 방식에 대해 알아보겠습니다.

USB2.0은 D+, D-라인을 통해서 통신을 합니다. D+,D-라인에서 읽은 전압을가지고 연산을 통해서 값을 얻습니다. D+,D-를 사용하므로 차등신호라고 부릅니다. 예를들어 D+ -  D-  > 0.2V면 1이라고하고 D+ - D- <0.2면 0이라고 가정해보겠습니다.
D+ LOW  ,  D- HIGH  : 0
D+ HIGH ,  D- LOW : 1
1은 J라고 부르고 0은 K라고 부르겠습니다.

이렇게 D+, D-를 가지고 J,K로 나눈다음에 NRZI방식으로  데이터를 해석하면 됩니다. NRZI방식은 이전상태와 같으면 1이고 다르면 0으로 해석합니다.
J에서 K로 변했으면 0, K에서 J로 변했으면 1입니다.
J에서 J로 변했으면 1, K에서 K로 변했으면 1입니다.

USB 2.0 데이터시트에있는 그림입니다.

Figure 7-31. NRZI Data Encoding (185 page)

NRZI을 보면 처음부분이 JKKKJJ입니다.
(1) JK니까 데이터가 0입니다.
(2) KK니까 데이터가 1입니다.
(3) KK니까 데이터가 1입니다.
(4) KJ니까 데이터가 0입니다.
(5) JJ니까 데이터가 1입니다.
위와같은 방식으로 데이터를 얻으면 됩니다.

추가적으로 위의 NRZI 방식과 비트스터핑(Bit Stuffing) 방식을 사용합니다. 
비트스터핑이란 데이터의 오작동을 방지하기위해서 1이 6번 만들어질때 6번째에 0을 삽입합니다. 그리고 데이터를 해석할때는 0을 제거합니다.


이제 실제 파형을 측정해서 확인해보겠습니다.
파형의 처음 부분에서 D-가 D+보다 더 크므로 K입니다.  이런 방식으로 K와 J가 모두 나왔습니다.
데이터는 0000 0001이라고 적혀있습니다.

(1) KJ니까 데이터가 0입니다.
(2) JK니까 데이터가 0입니다.
(3) KJ니까 데이터가 0입니다.
(4) JK니까 데이터가 0입니다.
(5) KJ니까 데이터가 0입니다.
(6) JK니까 데이터가 0입니다.
(7) KJ니까 데이터가 0입니다.
(8) JJ니까 데이터가 1입니다.

참고로 SYNC는 패킷의 시작을 의미합니다.

'MCU지식 > USB통신' 카테고리의 다른 글

USB2.0 기본개념  (0) 2024.03.30