실제로 "USB 통신 프로토콜"이 있습니까?


24

Wikipedia 에 따르면 USB :

컴퓨터와 전자 장치 간의 연결, 통신 및 전원 공급을 위해 버스에서 사용되는 케이블, 커넥터 및 통신 프로토콜을 정의합니다.

그러나 실제로 "USB 통신 프로토콜 "이 있습니까? 내 이해 는 :

  1. USB 장치를 컴퓨터에 연결합니다 (예 : Ubuntu 또는 모든 종류의 Linux)
  2. Linux는 해당 장치의 장치 드라이버를 찾고 (어떻게 든 알고 있다면 보너스 !)로드합니다.
  3. 이제 장치가 연결되었습니다 /dev/theDevice
  4. 사용자 공간 앱은 이제 읽고 쓸 수 /dev/theDevice있으며 드라이버는 기본 장치 / 하드웨어에 대한 저수준 IO를 처리합니다.

나에게이 흐름의 어느 곳에서도 "USB 통신 프로토콜"이 나타나지 않습니다. 내 이해가 정확하다면 USB는 PC와 장치 사이의 케이블과 전기 연결 일뿐입니다.

내가 틀렸어? USB는 실제로 어떤 종류의 저수준 프로토콜을 구현하여 위의 흐름을 밑줄입니까? 그렇다면 30,000 피트에서 어떻게 작동합니까?


45
"드라이버는 기본 장치 / 하드웨어에 대한 저수준 IO를 처리합니다"는 표준에있는 통신 프로토콜을 사용하여이를 수행합니다.
EBGreen

29
아 .. "USB 통신 프로토콜이 실제로 있습니까?"라는 질문을 읽었습니다. 대답은 '예'입니다. 실제 통신 프로토콜이 무엇인지 알고 싶다면 표준을 읽으십시오. 또는 링크 한 위키 페이지에서 섹션 11을 읽으십시오.
EBGreen

6
"USB는 PC와 장치 사이의 케이블과 전기 연결 일뿐"입니다. 이더넷 케이블은 PC와 스위치 / 라우터 / 무엇이든 케이블입니다. 이 케이블을 통해 통신하고 유용한 작업을 수행하는 데 사용되는 프로토콜이 여전히 있습니다.
ysdx

13
"Linux가 해당 장치의 장치 드라이버를 찾습니다"Linux가 다른 장치에 연결된 장치를 감지 할 수 있다고 어떻게 생각합니까? 아마도 일반적인 프로토콜입니까?
쓰셨

4
@Ramhound "이러한 통신 프로토콜은 최소한 이더넷의 경우 표준과 독립적입니다." 이것은 거짓입니다. 이더넷 프로토콜 (물리적 및 MAC 계층 모두)은 IEEE 이더넷 표준 (구체적으로 802.3 표준 )에 의해 정의됩니다 . 물론 이더넷 프로토콜 이외의 다른 것을 카테고리 6 케이블로 보낼 수 있습니다 (그리고 일반적). RJ-45 커넥터이지만이 시점에서는 더 이상 이더넷이 아닙니다. 예를 들어 비 VoIP 전화 시스템의 경우 일반적인 방법입니다.
reirab

답변:


47

예, USB 프로토콜 참조

내가 이해하는 것처럼 USB 사양은 복잡한 계층 프로토콜 및 장치 프로파일 세트를 정의합니다.

예를 들어, USB 장치는 대용량 저장 장치, 키보드 (또는 휴먼 인터페이스 장치 등)와 같은 고급 템플릿을 준수하고 일반 장치 드라이버로 관리 할 수 ​​있습니다. 일부 USB 장치는 하위 수준에서 통신 할 수 있으므로 OS 하위 수준 USB 지원은 장치 별 상위 수준 드라이버가 필요하다는 것을 인식 할 수 있습니다.


30

질문 : 작동중인 저수준 USB 통신 프로토콜이 있습니까?

대답:

USB 사양에는 버스가 비트 레벨에서 사용되는 방식을 정의하는 USB 프로토콜 이 포함되어 있습니다. 이것은 대용량 저장 장치, HID 등 높은 수준의 프로토콜에 기반을 둔 '낮은 수준'프로토콜입니다.

USB 프로토콜 작동 방식에 대한 자세한 내용은이 OSDev 위키 가 도움이됩니다. 다음은 USB 프로토콜 당 다양한 데이터 트랜잭션을 설명하기 위해 시퀀스 다이어그램을 사용하는 또 다른 흥미로운 설명 입니다.

보너스 질문 : Linux는 해당 장치의 장치 드라이버를 어떻게 찾고로드합니까?

보너스 답변 :

'Linux에서 USB 지원 커널을 사용하는 경우 USB 사양으로 인해 하드웨어커널을 통해 작동하는 USB 장치가 감지됩니다 . 하드웨어 측에서는 USB 호스트 컨트롤러가 감지합니다. 그런 다음 커널에서 호스트 컨트롤러 드라이버가 와이어의 하위 레벨 비트를 USB 프로토콜 형식 정보로 인계하고 변환합니다. 이 정보는 커널의 USB 코어 드라이버에 채워집니다. '

나는이 훌륭한 Opensourceforu 기사 에서 역설을 보았는데 , Linux 컨텍스트에서 귀하의 질문에 대해 더 자세하고 명확하게 설명합니다.


7
"Bonus question"은 "Bounty"를 의미하기를 바랍니다.
dotancohen

@projectdp-기본 참조의 일부 정보를 답변 자체에 배치하는 경우 매우 유용합니다.
Ramhound

@Ramhound-의견을 보내 주셔서 감사합니다.보다 유용한 방식으로 답변을 다시 작성했습니다. 자료에서 더 많은 정보를 추가 할 때 질문과 관련하여 무엇을보고 싶습니까?
projectdp

14

거의 모든 다른 유형의 통신 인터페이스와 마찬가지로 USB는 프로토콜 스택으로 구현됩니다.. 이 스택 내에서 모든 또는 여러 유형의 장치에 공통적 인 레벨은 USB 표준 자체에 의해 정의되며, 이는 호환성을 가능하게하고 각 장치가 중복 프로토콜 설계를 수행하지 못하게합니다. 또한 프로토콜의 각 계층은 다음 계층에서 걱정할 필요가없는 세부 정보를 추상화합니다. 따라서 실제로 장치 별 계층을 작성할 때는 끝점 A에서 끝점 B로 데이터를 가져 오는 일반 '보내기'및 '받기'기능 만 있으면됩니다. 장치 디자이너는 신경 쓰지 않아도됩니다. 어떻게되는지 또한 프로토콜 스택 내의 하위 레벨은 상위 인터페이스에 공통 인터페이스를 노출하는 한 구현을 변경할 수 있습니다. 이렇게하면 프로토콜 스택의 일부가 변경 될 때 나머지 스택을 반드시 변경할 필요는 없습니다.이는 프로토콜 스택의 약간 낮은 수준으로 사용되고있다. 일반적으로 스택 아래의 각 연속 레이어는 메시지가 전송 될 때 고유 한 페이로드 필드 내에서 다음으로 높은 레이어가 생성 한 메시지를 캡슐화합니다. 메시지가 수신되면 각 레이어는 해당 레이어와 관련된 부분을 벗겨 내고 페이로드를 스택의 다음 적절한 레이어로 전달합니다. 이것은 USB뿐만 아니라 거의 모든 통신 버스에서도 마찬가지입니다. 예를 들어 TCP / IP / 이더넷 스택이 가장 일반적으로 사용됩니다. 주어진 계층이 일반적으로 담당하는 작업은 OSI 모델 과 같은 모델로 설명됩니다 .

USB에는 전압 상태 / 타이밍 등을 정의하는 물리 계층 프로토콜이 있습니다. 전선에서 어떻게 해석해야하는지 이 프로토콜은 분명히 특정 장치에 국한되지 않고 USB 표준 자체의 일부 여야합니다 (특히 호스트는 어떤 종류의 장치가 주어진 USB 포트에 연결 될지 알 수 없기 때문에).

다음으로 버스에서 대화 할 수있는 사람을 설명하는 데 사용되는 버스 관리 프로토콜이 있습니다. 이것을 OSI 모델에서 미디어 액세스 계층이라고합니다. USB에서이 계층은 "호스트가 지시 할 때 장치가 전송할 수 있음"으로 요약 될 수 있으므로 USB의이 계층에는 특별히 복잡한 프로토콜이 없습니다.

다음으로, 데이터 패킷설명하기 위한 표준 프로토콜 과 발신자에서 수신자로 라우팅되는 방법이 있습니다. 이 계층은 USB 표준 자체의 일부 여야하므로 특정 유형의 장치가 호스트에 의해 실제로 알려지기 전에 어떤 유형의 장치가 연결되었는지 알아 내기위한 초기 통신이 발생할 수 있습니다. 이 계층에서 특정 ID를 가진 각 장치 외에 엔드 포인트 ID의 USB 개념도 있습니다. 이를 통해 특정 장치에 표준 USB 스택에 의해 다중화 및 역 다중화되는 여러 USB 엔드 포인트를 가질 수 있습니다. 표준 TCP / IP 스택에 의해 소켓이 다중화 및 역 다중화되는 것과 같은 방식입니다. 애플리케이션은 이러한 각 엔드 포인트를 개별 데이터 스트림으로 처리 할 수 ​​있습니다.

마지막으로 장치 자체에 대해 정의 된 프로토콜이 있습니다. 실제로 대용량 저장 장치, 마우스, 키보드 등과 같은 일반적인 사용 사례에 대한 USB 표준의 일부로 사전 디자인 된 것들이 포함되어 있기 때문에 모든 장치 제조업체는 제품을 다시 발명 할 필요가 없습니다. 바퀴. 그러나 더 복잡한 장치는이 계층에서 자체 사용자 지정 프로토콜을 자유롭게 디자인 할 수 있습니다. 주어진 전송에 대한이 계층의 출력은 이전 계층에서 데이터 패킷의 페이로드로 전달됩니다. 충분히 복잡한 장치의 경우 프로토콜의 장치 별 부분이 여러 개의 독립적 인 계층으로 나눌 수 있지만 하위 수준에서는 알지 못하거나 신경 쓰지 않아도됩니다. 그들이 알아야 할 것은 호스트에서 특정 장치 엔드 포인트로 또는 특정 장치 엔드 포인트에서 호스트로 주어진 바이트 세트를 전달해야한다는 것입니다. 다시 한 번, 계층 간 표준 인터페이스를 사용하면 우려 사항을 분리 할 수 ​​있으므로 한 계층은 다른 계층의 내부 작업에 신경 쓰지 않아도되며, 바로 위 또는 계층에서 전달하거나 수신해야하는 특정 데이터 만 스택 아래에.


9

실제로 상호 작용하는 관련 통신 프로토콜 세트가 있습니다.

가장 낮은 수준에는 직렬 연결을 통해 바이트 패킷이 전송되는 방법을 설명하는 프로토콜이 있습니다. 이것은 모든 USB 장치에 공통적이지만 USB2와 USB3에서는 다릅니다.

전송 된 첫 번째 패킷 중 하나가 장치에 자신을 설명하도록 요청합니다. 닭과 계란 문제를 방지하기 위해 식별 프로토콜은 모든 USB 장치에서 동일합니다. OS는이 식별을 사용하여 올바른 드라이버를로드 할 수 있습니다.

또 다른 수준에서, USB는 여러 장치가 대역폭을 공유해야 함을 의미하는 버스입니다. 즉, 각 장치에 통신 할 수있는 시간과 그렇지 않은 시간을 알려주는 프로토콜이 있습니다. 모든 USB 장치는이를 준수해야하므로 공통 프로토콜을 사용하여이를 정렬합니다.

마지막으로, 많은 간단한 USB 장치가 너무 단순하여 전체 장치 클래스 (마우스, 키보드, 저장소, 이더넷 어댑터 등)를 설명하는 추가 프로토콜이 있습니다. 대부분의 장치는 이러한 기능 프로토콜 중 하나 또는 하나를 지원합니다.


"USB는 여러 장치가 대역폭을 공유해야 함을 의미하는 버스" -OP가 질문에 지점 간 설정 만 사용할 때 간과했던 지점입니다. 두 개 이상의 USB 장치가 케이블을 호스트 PC와 공유 할 수 있으므로 프로토콜이 있어야한다고 추론 할 수 있습니다.
톱밥

@sawdust 전혀 작동하지 않기 때문에 (프로토 포인트 간) 프로토콜이 있다고 추측 할 수 있습니다. 예를 들어 표준 프로토콜이 없으면 장치 검색이 불가능합니다.
reirab

실제로 통신 표준이 있으며 그 핵심에는 직렬 통신이 Universal Serial Bus있습니다.
Ramhound

@Ramhound 예, 메모리 인터페이스를 제외한 모든 최신 버스 설계와 마찬가지로 USB는 데이터 전송에 직렬 차동 쌍을 사용합니다. USB <= 2.0에는 단일 차동 쌍이 있고 USB 3에는 2 개의 추가 차동 쌍이 있습니다 (하나는 SuperSpeed ​​전송 용이고 다른 하나는 SuperSpeed ​​수
신용이며

나는 표준의 코어에서 직렬 버스를 가리킬 것이라고 생각했는데 저자는이 사실을 알지 못했기 때문에 질문이었습니다.
Ramhound

5

아마도 대답의 일부는 " 통신 프로토콜 " 이라는 문구의 정의에있을 것 입니다. 당신이 한 것과 같은 출처 (Wikipedia)로 가면 다음과 같은 유용한 정보를 찾을 수 있습니다 :

  • 의사 소통이 이루어 지려면 프로토콜이 합의되어야합니다.
  • 통신 시스템은 메시지 교환을 위해 잘 정의 된 형식 (프로토콜)을 사용합니다.
  • 프로토콜은 구문, 의미 및 통신 동기화를 정의해야합니다.
  • 따라서 프로토콜은 하드웨어, 소프트웨어 또는 둘 다로 구현 될 수 있습니다.

그것을 생각하는 간단한 방법은이다 프로토콜은 미리 정의 된 무언가를하는 방법에 동의 이 경우에는, 뭔가 에와 USB 연결 장치에서 데이터를 이동하는 방법입니다. 하드웨어 적으로 각 에는 미리 정의 된 전압 레벨 및 사용 프로토콜이 있으며 각 유형의 장치에는 모든 핀에 대해 미리 정의 된 사용 프로토콜이 있으며 각 데이터 패킷 에는 미리 정의 된 구문 및 데이터 형식이 있습니다. 통합 된 통신 핸드 쉐이킹 프로토콜도 있습니다. 전체적으로 이들은 USB 프로토콜 , 일명 USB 프로토콜 사용에 대한 표준 모음의 모든 부분입니다.USB Implementers Forum, Inc. 의 구성원이 결정 (예 : 설계, 제안, 토론, 수정 및 최종 동의)합니다 .

그래서 그래,가 이다 의 USB 프로토콜, 또는 좀 더 정확하게이 있는 다수의 사전 정의 및 USB 프로토콜 합의 다른 USB 용도.


1
1. 프로세스 통신은 (최소로) 포함 세 요소 (1) 인코딩 / 전송 AND (2) (랜덤 노이즈와는 대조적으로) (3) _information_ / 디코딩 수신. 이 3 가지 요소 중 하나라도 없으면 프로세스가 실패합니다. 피드백, 매체 (채널) 및 상황과 같은 추가 요소가 존재할 수도 있습니다. 출처 : 저의 학위 중 하나는 커뮤니케이션 연구
OMY

1
2. SETI는의사 소통이 아니라 탐험과 발견 에 관한 것입니다. 실제 제조 된 신호를 감지하더라도이를 이해하거나 발신자와 통신 할 수 있다는 보장은 없습니다. 출처 : [SETI 사명 선언문] [1] [1] : seti.org/about-us
OMY

1
3. 브라우저 간 호환성은 일반적으로 (a)프로토콜을 따르지 않는 브라우저 제조업체또는 (b) 결함이있는 구현을 야기하는 잘못 작성된 프로토콜에 의해 발생합니다 (예 : 악명 높은 IE 박스 모델 버그를고려하고< quirksmode.org> 참조). 이제프로토콜을 개선해야했기 때문에이제 HTML 5 및 CSS 3이 있습니다. 출처 : 몇 년 동안 제 웹 개발 회사를 소유하고 운영했습니다
OMY

1
4. 먼저 주파수에서 "동기화"된 무선 신호는 AM (진폭 변조) 프로토콜을 사용합니다. FM (주파수 변조) 무선 신호는 시간 적분과 "동기화"됩니다. FM 시스템을위한 프로토콜 것을 포함 고정 동적 요소는 정보를 처리 할 수 있습니다. 동적 요소는 가변 주파수 설정으로, 사전 정의되고 제한된 주파수 범위로 제한됩니다.
OMY

1
고정 요소는 신호를 변조 및 복조하기위한 수학 공식입니다. 주파수에 상관없이이 공식은 일정하며 아날로그 하드웨어 또는 디지털 소프트웨어를 통해 신호를 처리하도록 구현할 수 있습니다. 출처 : 전자 취미 애호가로서의 개인 경험 [Wikipedia] [1] [1] : en.wikipedia.org/wiki/Frequency_modulation
OMY
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.