본문 바로가기

통신/USB

[개념] USB 통신

1. Host가 Device의 가상 장치 정보(Class, Subclass)를 가져온다.

Class Subclass  
USB CDC CDC ACM 시리얼 통신 장치
CDC ECM 이더넷 통신 장치
USB MSC 없음 저장 장치

※ CDC(Communication Device Class), MSC(Mass Storage Class)

※ ACM(Abstract Control Model), ECM(Ethernet networking Control Model)

 

2. Host는 가져온 장치 정보를 기반으로 드라이버를 활성화한다.

해당 드라이버가 로딩되면, OS는 이를 추상화된 장치 파일로 나타낸다.

즉, 가상 포트가 생성되어 장치를 사용할 준비가 된다.

 

3. 사용자 프로그램은 이 가상 포트를 통해 데이터를 송수신한다.

예를 들어, 가상 포트가 USB CDC ACM으로 인식되면 사용자는 시리얼 통신 방식(baud rate, 데이터 비트, 정지 비트 등을 설정)을 통해 데이터를 송수신한다. 하지만 실제로 이 데이터는 USB 프로토콜을 통해 VX로 전송된다.

즉, 사용자 입장에서는 단순한 시리얼 통신처럼 보이지만, 내부적으로는 USB를 기반으로 한 데이터 전송이 이루어지는 것이다. 이는 USB 장치가 특정 하드웨어 장치를 Emulation하기 때문이다.

※ Emulation: 하나의 시스템이 다른 시스템을 흉내 내도록 하는 것

 


[자세한 내용: USB 통신 과정]

1) 연결 및 역할 결정

PC와 장치가 USB 케이블로 연결되면 USB 아키텍처상 PC는 Host, 장치는 Device 역할로 정해진다.

※ 아키텍처: 어떤 시스템이 어떻게 구성되고 동작하는지를 나타내는 설계도

 

2) USB Enumeration(장치 인식 과정)

Host는 USB 차동 신호를 감지하고 통신을 시작한다. 이후 Device로부터 Descriptor(정보 구조체)를 요청하여 어떤 장치인지 파악한다.

USB 장치는 “Class, Subclass, Protocol” 구조로 자신의 기능을 설명한다.

(예시)

Class 설명
USB CDC 통신 장치
USB HID 휴먼 인터페이스 장치(마우스, 키보드)
USB MSC 저장 장치(USB 메모리, 외장하드)

 

Subclass 설명
CDC ACM 가상 시리얼
CDC ECM 이더넷 장치
CDC NCM 고속 네트워크
CDC OBEX Bluetooth 파일 전송용
CDC RNDIS Windows 전용 USB 네트워크 에뮬레이션

 

3) 드라이버 할당

Host는 받은 Descriptor 정보를 기반으로 드라이버를 할당한다. 드라이버가 로딩되면 OS는 이를 추상화된 장치 파일로 나타낸다.

(예시)

장치 파일명 설명
/dev/ttyACM0 USB CDC ACM, 가상 시리얼 포트
COM3 가상 시리얼 포트(Windows 포트 이름 형식)
eth1 USB CDC ECM/NCM/RNDIS, 가상 네트워크 어댑터
sdb USB Mass Storage, USB 메모리 등 저장 장치처럼 인식

 

4) 실제 데이터 통신 시작

사용자는 할당된 /dev/ttyACM0 같은 포트를 통해 데이터를 read / write 할 수 있다. 하지만 이 통신은 내부적으로 USB 통신(USB 차동 신호 + USB 프로토콜)에 의해 처리된다.

 

[자세한 내용: USB 통신 예]

디바이스가 USB 프로토콜을 지원하는 경우

기본적으로 USB 프로토콜이 지원되는 PC와 장치가 USB to Type-C 케이블로 연결되어 데이터 통신을 하게 되며, PC가 USB 장치 정보를 요청하는 과정을 거치게 된다.

 

1) 디바이스가 USB 프로토콜, USB 시리얼 통신을 지원할 경우

USB 시리얼 장치(USB CDC)를 지원하는 장치는 PC에서 가상 COM 포트(/dev/ttyUSB0, COM3)로 인식된다. 이 가상 포트는 소프트웨어적으로 USB 데이터를 RS232처럼 보이게 하는 역할을 한다. 즉, 실제 물리적 데이터 전송 방식은 USB 프로토콜을 따르지만, 시리얼 프로그램에서는 마치 RS232 장치처럼 동작할 수 있다. 하지만, RS232 전압(±12V)이 출력되는 것은 아니므로, RS232 장치와 직접 연결하면 통신할 수 없다. 이는 “RS232처럼 보이는 USB 통신”일 뿐, 실제로 RS232 신호가 나오는 것은 아니다.

 

2) 디바이스가 USB 프로토콜, USB 시리얼 통신을 지원하고 USB to RS232 변환 회로도 내장한 경우

위 그림처럼 USB to RS232 변환 회로가 있다면 이제 RS232 장치를 RS232 케이블로 연결하여 통신이 가능하게 된다.


[참고 자료]

※ 데이터 통신 = 물리적인 데이터 전송 방식 + 통신 프로토콜

EX1) USB 시리얼 장치

USB 물리적 데이터 전송 방식(USB 차동 신호) + RS232처럼 동작하는 USB CDC 프로토콜

EX2) RS232 장치

RS232 물리적 데이터 전송 방식(TX/RX ±12V) + Modbus RTU 프로토콜

 

※ USB to Type-C 케이블

USB의 물리적 데이터 전송을 담당하는 케이블이다. 이 케이블을 통해 전송되는 신호는 USB 버전에 따라 다를 수 있다.

USB 2.0: D+/D- 차동 신호 사용

USB 3.0 이상: 추가적인 TX/RX 신호 선을 사용하여 고속 데이터 전송

이 케이블은 USB 프로토콜을 통해 데이터가 전달되므로, RS232 또는 RS485 같은 다른 통신 방식으로 직접 사용할 수 없다.

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

[적용] RaspberryPi로 USB 통신하기  (0) 2025.04.24