2020년 3월 10일 화요일

USB 공부


인터페이스와 속도 비교
인터페이스
유형
연결개수(최대)
거리(최대)
속도(최대 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 순서

  1. 시스템이 새 디바이스를 갖는다.
  2. 허브가 디바이스를 감지한다.
  3. 호스트가 새 디바이스 정보를 얻는다.
  4. 허브는 디바이스가 풀스피드인지 로우스피드인지 감지한다.
  5. 허브가 디바이스를 리셋한다.
  6. 호스트는 풀스피드 디바이스가 하이스피드도 지원하는지 확인한다.
  7. 허브는 디바이스와 버스 사이의 신호 경로를 설정한다.
  8. 호스트는 Get Descriptor 리퀘스트를 보내 기본 파이프의 최대 패킷 크기를 알아낸다.
  9. 호스트가 주소를 할당한다.
  10. 호스트는 디바이스 기능에 관한 정보를 읽어온다.
  11. 호스트가 디바이스에게 추가 정보를 요청한다.
  12. 호스트가 디바이스 드라이버를 할당하고 메모리로 가져온다(혼성 디바이스는 예외)
  13. 호스트 디바이스 드라이버가 컨피규레이션을 선정한다.

디바이스 디스크립터
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 완전정복