인터페이스와 속도 비교
인터페이스
|
유형
|
연결개수(최대)
|
거리(최대)
|
속도(최대 bps)
|
일반적인 용도
|
USB 3.1
|
이중 단방향 (dual simplex) 직렬
|
버스당 127개
|
1(5 허브 사용 시 5)m
|
10G
|
이동식 대용량 저장장치, 비디오
|
USB 3.0
|
이중 단방향 직렬
|
버스당 127개
|
2(5 허브 사용시 10)m
|
5G
|
이동식 대용량 저장장치, 비디오
|
USB 2.0
|
반 이중 (half duplex) 직렬
|
버스당 127개
|
5(5허브 사용시 30)m
|
1.5M, 12M, 480M
|
키보드, 마우스, 디스크 드라이브, 스피커, 프린터, 카메라
|
CAN 버스
|
직렬
|
다양한 하드웨어
|
500 @125kbps
|
1M @40m
|
자동차
|
eSATA
|
직렬
|
2(포트 확장 시 16)
|
2
|
6G
|
디스크 드라이브
|
이더넷
|
직렬
|
1024
|
500, 속도에 따라 다름, 광통신 이용 시 더욱 원거리 통신이 가능
|
10G
|
범용 네트워크 통신
|
IEEE-1394
(파이어와이어(FireWire))
|
직렬
|
64
|
100
|
3.2G
|
비디오, 이동식 대용량 저장장치
|
IEEE-488 (GPIB)
|
병렬
|
15
|
20
|
8M
|
산업용 장비
|
I2C
|
동기식 직렬
|
1007
|
부하와 속도에 따라 다양함
|
3.4M
|
임베디드 시스템, 범용
|
마이크로와이어(Microwire)
|
동기식 직렬
|
8
|
3
|
2M
|
임베디드 시스템, 범용
|
미디(MIDI)
|
직렬식 커런트 루프(current
loop)
|
2(MIDI 쓰루 포트로 확장
가능)
|
15
|
31.25k
|
음악, 무대 제어
|
병렬 프린터 포트
|
병렬
|
2(데이지 체인 지원시 8)
|
3 ~ 10
|
16M
|
프린터, 스캐너, 디스크 드라이브
|
RS-232
(EIA/TIA-232)
|
비동기 직렬
|
2
|
15 ~ 30
|
20k (특수 목적 하드웨어
사용시 고속 통신 가능)
|
임베디드 시스템, 범용
|
RS-485
(TIA/EIA-485)
|
비동기 직렬
|
32 단위 부하(하드웨어에 따라 256개까지 확장 가능)
|
1200
|
10M
|
데이터 수집 및 제어 시스템
|
SPI
|
동기식 직렬
|
하드웨어에 따라 다양함
|
부하와 속도에 따라 다양함
|
2M 또는 하드웨어에 따라 고속
통신 가능
|
임베디드 시스템, 범용
|
썬더볼트 (Thunderbolt)
|
전이중(full duplex) 직렬
|
7
|
3m(구리선), 100m(광통신)
|
10G(v1), 20G(v2)
|
이동식 대용량 저장장치, 비디오
|
USB 트랜잭션 관련 정보
패킷 유형
|
PID
|
값
(이진)
|
사용되는 전송방식
|
소스
|
버스 속도
|
설명
|
토큰
(트랜잭션 형식 식별)
|
OUT
|
0001
|
전부
|
호스트
|
전부
|
OUT 트랜잭션용 디바이스, 엔드포인트 주소
|
IN
|
1001
|
전부
|
호스트
|
전부
|
IN 트랜잭션용 디바이스, 엔드포인트 주소
|
|
SOF
|
0101
|
프레임 시작
|
호스트
|
전부
|
프레임 시작 마커와 프레임 번호
|
|
SETUP
|
1101
|
제어
|
호스트
|
전부
|
SETUP 트랜잭션용 디바이스, 엔드포인트 주소
|
|
데이터
(데이터와 상태 코드 전송)
|
DATA0
|
0011
|
전부
|
호스트,
디바이스
|
전부
|
데이터 토글 또는 데이터 PID 시퀀싱
|
DATA1
|
1011
|
전부
|
호스트,
디바이스
|
전부
|
데이터 토글 또는 데이터 PID 시퀀싱
|
|
DATA2
|
0111
|
등시성
|
호스트,
디바이스
|
하이
|
데이터 PID 시퀀싱
|
|
MDATA
|
1111
|
등시성,
분할 트랜잭션
|
호스트,
디바이스
|
하이
|
데이터 PID 시퀀싱
|
|
핸드셰이크
(상태 코드 전송)
|
ACK
|
0010
|
제어, 벌크,
인터럽트
|
호스트,
디바이스
|
전부
|
수신 측에서 데이터 패킷을 에러 없이 받았음
|
NAK
|
1010
|
제어, 벌크,
인터럽트
|
디바이스
|
전부
|
수신 측에서 데이터를 받지 못했거나 송신 측이 데이터를 보내지 못했거나
전송할 데이터가 없음
|
|
STALL
|
1110
|
제어, 벌크,
인터럽트
|
디바이스
|
전부
|
지원하지 않는 제어 리퀘스트이거나 엔드포인트가 멈췄음
|
|
NYET
|
0110
|
제어 쓰기,
벌크 OUT,
분할 트랜잭션
|
디바이스
|
하이
|
디바이스가 데이터 패킷을 에러 없이 수신했으나, 추가 데이터에 대해서는 준비되지 않음. 또는 허브가 분할 데이터를
완전히 처리하지 못함
|
|
특수
|
PRE
|
1100
|
제어,
인터럽트
|
호스트
|
풀
|
다음 패킷이 로우스피드라는 것을 식별할 수 있도록 호스트가 선행해서 만들어냄(로우/풀 스피드 구간에서만 사용)
|
ERR
|
1100
|
전부
|
허브
|
하이
|
분할 트랜잭션에서 로우/풀 스피드
에러를 보고하기 위해 허브가 반환(하이스피드 구간에서만 사용)
|
|
SPLIT
|
1000
|
전부
|
호스트
|
하이
|
분할 트랜잭션을 나타내는 토큰 패킷 앞에 옴
|
|
PING
|
0100
|
제어 쓰기,
벌크 OUT
|
호스트
|
하이
|
NYET 후에 벌크 OUT, 제어 쓰기 데이터 트랜잭션용 BUSY 체크
|
|
EXT
|
0000
|
-
|
호스트
|
전부
|
프로토콜 확장 토큰
|
일반적인 USB 2.0 순서
- 시스템이 새 디바이스를 갖는다.
- 허브가 디바이스를 감지한다.
- 호스트가 새 디바이스 정보를 얻는다.
- 허브는 디바이스가 풀스피드인지 로우스피드인지 감지한다.
- 허브가 디바이스를 리셋한다.
- 호스트는 풀스피드 디바이스가 하이스피드도 지원하는지 확인한다.
- 허브는 디바이스와 버스 사이의 신호 경로를 설정한다.
- 호스트는 Get Descriptor 리퀘스트를 보내 기본 파이프의 최대 패킷 크기를 알아낸다.
- 호스트가 주소를 할당한다.
- 호스트는 디바이스 기능에 관한 정보를 읽어온다.
- 호스트가 디바이스에게 추가 정보를 요청한다.
- 호스트가 디바이스 드라이버를 할당하고 메모리로 가져온다(혼성 디바이스는 예외)
- 호스트 디바이스 드라이버가 컨피규레이션을 선정한다.
디바이스 디스크립터
Offset
|
필드
|
크기
|
설명
|
0
|
bLength
|
1
|
디스크립터 바이트 크기(0x12)
|
1
|
bDescriptorType
|
1
|
상수 값 DEVICE(0x01)
|
2
|
bcdUSB
|
2
|
USB 규격 릴리스 번호(BCD)
|
4
|
bDeviceClass
|
1
|
클래스 코드
|
5
|
bDeviceSubClass
|
1
|
서브클래스 코드
|
6
|
bDeviceProtocol
|
1
|
프로토콜 코드
|
7
|
bMaxPacketSize0
|
1
|
엔드포인트 0의 최대 패킷 크기
|
8
|
idVendor
|
2
|
Vendor ID
|
10
|
idProduct
|
2
|
Product ID
|
12
|
bcdDevice
|
2
|
디바이스 릴리스 번호(BCD)
|
14
|
iManufacturer
|
1
|
제조사에 대한 문자열 디스크립터 인덱스
|
15
|
iProduct
|
1
|
제품에 대한 문자열 디스크립터 인덱스
|
16
|
iSerialNumber
|
1
|
일련번호에 대한 문자열 디스크립터 인덱스
|
17
|
bNumConfigurations
|
1
|
가능한 컨피규레이션 개수
|
참조 : [도서] USB 완전정복
작성자가 댓글을 삭제했습니다.
답글삭제안녕하세요, 6년차 SW 제품 회사 엔지니어입니다. 블로그 보다가 감명 깊어 문의드립니다. 무슨 일을 하시는 것인가요?
답글삭제