케이블을 처음 연결할 때 수행 할 작업을 설명하는 USB 사양은 어디에 있습니까?


15

USB.org 사이트 에있는 USB 2.0 사양 에 대해 알고 있습니다 .

나는 조금 게으르고 참을성이 없다. USB 케이블이 연결되어있을 때 내 주변 장치에 필요한 것을 정확히 찾으려면 어디로 가야합니까?

예를 들어, 주변 장치가 프린터 인 경우 다른 쪽 컴퓨터에 프린터 (특정 모델 설명이있는)가 연결되었다고 어떻게 알 수 있습니까? 컴퓨터에서 프린터 드라이버는 어떤 USB 포트가 프린터에 연결되어 있는지 어떻게 알 수 있습니까?

내 응용 프로그램은 실제로 USB MIDI입니다. 나는 또한이 USB-MIDI doc을 얻었 지만 더 기본적인 USB 프로토콜이 부족합니다.

사람들의 정보를 위해 내가 사용하는 USB 칩은 FTDI FT220x 이며 ADSP-21479 SHArC의 SPI에 연결되어 있습니다. 이제 TeraTerm을 실행하는 PC를 "콘솔" 로 사용하는 텍스트 통신에 간단히 사용합니다 . SPI 포트를 설정하고 FTDI 칩에 연결하는 코드에 액세스 할 수 있지만 초기 통신을 수행하는 코드는 없습니다. FT220x가 PC에 처음 연결되었을 때 무엇을하는지 모르겠습니다.

나는 읽고 배우는 것이 불행하지만, 어디서부터 읽기를 시작해야하는지 알고 싶습니다. 100MB USB 사양은 촬영하기에 너무 큰 목표입니다. 실행 가능한 도움을 주신 모든 분께 진심으로 감사드립니다.


1
FTDI FT220x가 무대 뒤에서 무엇을하고 있는지 궁금하십니까? FTDI는 많은 USB 작업을 처리하기 때문에 수행 할 수있는 작업에 제한이 있습니다. 나는 한동안 FT2232H 제품군을 사용해 왔으며, 내가 아는 것을 설명하려고 노력할 것이다 ...
MarkU

내가 궁극적으로하려는 것은 이미 TeraTerm을 실행하는 PC에 텍스트를 앞뒤로 보낼 수있을만큼 똑똑한이 USB 포트를 사용하는 것입니다. 내가하고 싶었던 것은 동일한 USB 커넥터를 사용하여 USB MIDI를 수행하는 것입니다. 데이터를 32 비트 패킷으로 "패킷 화" 하는 방법을 이해해야 하지만, 다른 쪽 끝이 USB MIDI 장치임을 알려주는 프로토콜이 있어야한다고 생각했습니다. (지금까지는 USB 필수 요소를 파악하지 못했으며 귀하의 답변이 저에게 도움이 될 것 같습니다.)
robert bristow-johnson

답변:


21

USB에는 USB 2.0 사양에 설명되어있는 여러 계층이 있습니다 . OSI 계층 네트워크 모델에 익숙하다면 다음과 같이 생각할 수 있습니다.

  • 세션 계층 = 10 장 USB 호스트 하드웨어 및 소프트웨어 (장치 드라이버)
  • 전송 계층 = 9 장 USB 장치 프레임 워크
  • 네트워크 계층 = 8 장 프로토콜 계층 (비트 스트림)
  • 데이터 링크 계층 = 7 장 전기 (회로)
  • 물리 계층 = 6 장 기계 (케이블 및 커넥터)

개념적으로 USB는 Endpoints 라고하는 데이터 스트림을 기반으로 하며 IN (호스트로) 또는 OUT (호스트에서)이 될 수 있습니다. 모든 장치에는 제어 및 상태에 사용되는 Endpoint 0이 있습니다. 장치에는 응용 프로그램 데이터에 대한 추가 엔드 포인트가있을 수 있습니다. 각 엔드 포인트는 FIFO 버퍼처럼 작동합니다.

데이터는 엔드 포인트에서 대량 (TCP / IP와 같이 모든 바이트가 도착하고 올바른 순서로 보장됨) 또는 등시성 (UDP / IP와 같이 신선하지만 패킷을 떨어 뜨릴 수 있음)로 전송됩니다. 오해의 소지가있는 " 인터럽트 "전송 유형이 있으며 실제로 호스트에 의해 폴링됩니다.

USB 2.0은 데이터 링크에 차동 쌍을 사용합니다. USB 2.0 사양 7 장에서 다룰 것이기 때문에 자세한 내용은 다루지 않겠습니다. 일반적으로 PCB 레이아웃에서는이를 일치하는 길이, 차동 쌍으로 취급하고 USB PHY (물리적)에 필요한 직렬 저항을 넣습니다. 인터페이스)를 사용 중입니다. USB 주변 장치는 D + 또는 D- 라인 중 하나에서 높은 값의 저항을 사용하여 호스트에게 고속 또는 저속 주변 장치임을 알립니다.

USB 호스트가 장치가 있음을 발견 한 후 호스트는 장치에 설명자 무리를 요청합니다 . 이것은 FTDI 칩에 의해 배후에서 처리됩니다. 설명은 9.5 장 에 설명되어 있습니다. 여기에는 장치 설명자 , 구성 설명자 , 인터페이스 설명자 , 끝점 설명자 , 문자열 설명자 , 심지어 HID 보고서 설명 자도 포함 됩니다.

장치 설명자 의 USB 포함 VID (공급 업체 식별) 및 PID (제품 식별) 번호를. 운영 체제는이 숫자 쌍인 VID_PID를 사용하여이 장치에 어떤 장치 드라이버를 사용해야하는지 결정합니다. VID 번호는 USB 구현 자 포럼에 회원 자격을 부여하여 발급되므로 개인 발명가 인 경우 문제가됩니다.

또한 HID (Human Interface Device) 클래스 드라이버가 있습니다.이 드라이버는 키보드 / 마우스 등을위한 일반적인 입력 및 일반적인 입출력을 제공합니다. HID의 장점 중 하나는 사용자 지정 장치 드라이버를 제공 할 필요가 없지만 사용자 지정 대량 드라이버에 비해 처리량이 약간 제한되어 있다는 것입니다. HID 디스크립터에 대한 다른 스펙 문서 가 있습니다. 주어진 휴먼 인터페이스 장치에서 사용할 수있는 다양한 기능을 설명하는 모든 코드 번호를 자세히 설명 하는 HID Usage Table 문서 .

FT220X 데이터 시트 와 같은 FTDI 칩 은 USB "직렬 인터페이스 엔진"(SPI 직렬 또는 RS232 직렬과 혼동하지 않아야 함)을 제공합니다. 이것은 6 장, 7 장 및 8 장에 설명 된 대부분의 저수준 항목을 처리합니다.

FTDI는 EEPROM (FT2232H의 오프 칩, FT220X의 온칩)을 사용하여 디스크립터에 들어가는 약간의 정보를 포함합니다. VID / PID 값을 사용자 정의하고 사용자 정의 설명 문자열을 제공 할 수 있습니다.


6
나는 요약을 좋아했다. 몇 주에 걸쳐 ENTIRE 2.0 사양 (1000 페이지 이상)을 읽어야했기 때문에이 쓰레기를 모두 스스로 알아 내야했습니다. 즐거운 경험이 아니 었습니다. (제 경우에는 HID를 사용할 수 없었습니다.) 주제에 관한 좋은 책도 없습니다. 나는 Jan Axelson의 USB에 관한 책을 싫어했고 그녀의 책을 "거의 완전히 쓸모가 없다"고 생각했다. 그렇지 않으면 실제로는 대부분 쓸모가 없습니다. 구현 자 (맞춤형 하드웨어)를위한 좋은 책을 알고 있다면 제목을 듣고 기뻐할 것입니다 !! +1
jonk

1
Op의 잠재적 시장에 따라 VID / PID가 가장 큰 과제입니다. Axelsons 방법론을 사용하면 VID (자신의 비용 $ 3.5k)를 사용하고 PID 중 하나 이상을 무료로 요청할 수 있습니다. Microchip / Atmel, FTDI 및 TI (VID 기반)와 같은 조직에 PID를 요청할 수도 있습니다. 최고의 책 IMO는 Intel의 "예를 들어 USB 디자인"이며, 조금 길지만 USB 2.x에는 적합합니다. 불행히도 많은 코드 예제는 Visual Studio의 수정 사항으로 인해 변경되어 중단됩니다.
Jack Creasey

1
애호가가 VID / PID에 액세스하는 가장 좋은 방법은 LUFA (무료)를 사용하는 것입니다. fourwalledcubicle.com/files/LUFA/Doc/130303/html/… .....이 제품은 상용 제품에는 사용할 수 없지만 충돌을 광범위하게 제어 할 수있는 가정 / 데모 사용에 좋습니다.
Jack Creasey

1
추신. 훌륭한 소개는 "예를 들어 임베디드 USB 디자인을 사용하는 것입니다 : FTDI가 발표 한 것 : ftdichip.com/Support/Documents/TechnicalPublications/… ... 많은 유용한 예제가 있습니다 (물론 FTDI 장치를 기반으로 함). PSOC 컨트롤러 사용을 포함한 작업 파일
Jack Creasey

1
USB 장치가 자체 전원을 공급받는 경우 D + 또는 D- 풀업 저항을 적용하기 전에 VBUS 전압이 감지 될 때까지 기다려야합니다. 이것에 대한 인증에 실패했습니다.
Adam Haun

4

USB "파트너"(호스트 및 장치)의 동작 및 상호 작용은 USB 사양에 흩어져 있습니다. 근거를 얻는 가장 좋은 방법은 10 장과 11 장에서 가능한 (필수) 장치 상태 (그림 9-1)와 호스트 (및 허브) 프레임 워크를 설명하는 9 장 "장치 프레임 워크"를 보는 것입니다. 프로토콜 세부 정보 (파이프 / 트랜잭션 유형 / 추상 OSI 프로토콜 계층, PCB 레이아웃 등)의 경우 포트 상태 다이어그램 (그림 11-10)을 연구하여 초기 상호 작용을보다 잘 파악할 수 있습니다.

본질적으로 케이블이 호스트와 장치 사이에 연결되어 있지 않으면 호스트 포트는 "전원 상태"(VBUS 켜짐)이지만 "연결 끊김"상태입니다. D + 및 D- 와이어는 15k 풀다운으로 낮게 유지됩니다.

케이블이 연결되면 VBUS가 장치로 들어갑니다. 이 장치는 장치가 연결되고 있음을 인식하고 D 와이어 중 하나를 HIGH로 당겨 "연결"이벤트를, FS / HS 장치 인 경우 D +, LS 장치 인 경우 D-를 신호합니다.

특정 포트에서 D +/- 와이어를 당기면 "포트 상태 변경"을보고하는 호스트 소프트웨어에 인터럽트가 발생합니다. 호스트 소프트웨어 (일반적으로 ehci.sys) 그에 다음 동수 "포트 재설정"순서 특정 포트입니다. "USB 포트 재설정"이 성공적으로 완료되면 호스트 포트는 USB 통신을 위해 활성화됩니다. 포트가 활성화됩니다 (프레임 패킷 유출이 시작됨).

호스트는 USB 프로토콜을 사용하여이 장치에 고유 한 주소를 할당하고 "장치 설명자"를 읽습니다. "장치 열거"프로세스가 시작됩니다. 장치 설명자에는 해당 장치 클래스에 속하는 정보 (HID, COM, MIDI, 프린터 등)와 해당 장치의 VID / PID 및 기타 정보가 포함되어 있습니다 (표 9-8 참조).

장치 클래스 및 VID / PID를 얻은 후 호스트 소프트웨어는 장치 레지스트리에서이 정보를 일치 시키려고 시도하고 해당 장치 드라이버 (일반 드라이버 또는 공급 업체별) (있는 경우)를로드합니다. 그런 다음 장치 드라이버는 "장치 구성"설정으로 끝나는 장치 인터페이스를 선택하여 열거 프로세스를 완료합니다. 모든 패킷이 모든 활성화 된 포트로 브로드 캐스트 되더라도 전체 USB 통신은이 특정 포트 에서만 인식 됩니다.

위는 USB 연결 프로토콜의 일반적인 프레임 워크입니다. MIDI와 같은 특정 목적으로 데이터를 패킷 화하는 것은 다른 이야기이며 시스템이 적절한 장치 클래스를 얻는 경우 응용 프로그램 수준 또는 장치 드라이버 수준에서 처리됩니다. 네이티브 MIDI 통신을 얻으려면, 장치는 디스크립터에이 클래스가 있어야하고 모든 MIDI 클래스 정의를 따라야합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.