Есть ли действительно «протокол связи USB»?

9786
smeeb

Согласно Википедии, USB:

определяет кабели, разъемы и протоколы связи, используемые в шине для соединения, связи и питания между компьютерами и электронными устройствами

Но действительно ли существует « протокол связи USB »? Мое понимание таково:

  1. Вы подключаете USB-устройство к машине (например, Ubuntu или любой другой тип Linux)
  2. Linux находит драйвер устройства для этого устройства (как-то - бонус, если вы знаете!) И загружает его
  3. Теперь устройство подключено под /dev/theDevice
  4. Приложения пользовательского пространства теперь могут читать / записывать, /dev/theDeviceа драйвер обрабатывает низкоуровневый ввод-вывод на базовое устройство / оборудование

Для меня нигде в этом потоке не появляется «протокол связи USB». Если я правильно понимаю, USB - это просто кабель и электрическое соединение между ПК и устройством.

Я здесь не прав? USB действительно реализует какой-то протокол низкого уровня, подчеркивающий поток выше? Если так, что это и как это работает на 30 000 футов?

22
«драйвер обрабатывает низкоуровневый ввод-вывод базовому устройству / оборудованию», он делает это, используя протокол связи, который есть в стандарте. EBGreen 9 лет назад 45
Спасибо @EBGreen (+1), но понимаете ли вы иронию своего комментария? Я спрашиваю, что на самом деле протокол связи! Должны ли данные проходить по USB-кабелю определенным образом, если это так, то я предполагаю, что * это будет протокол. Но я думаю, что это будет зависеть от конкретного приложения. Мысли? smeeb 9 лет назад 0
Ох ... Я прочитал вопрос "Есть ли действительно" протокол связи USB "?" Так что ответ был бы да. Если вы хотите узнать, что такое настоящий протокол связи, просто прочитайте стандарт. Или прочитайте раздел 11 на странице вики, на которую вы ссылаетесь. EBGreen 9 лет назад 29
Описание USB уже содержит ответ на основной вопрос. Для идентификации USB-устройства вам необходим протокол, действительный для всех USB-устройств (в противном случае проблема с курицей и яйцом). MSalters 9 лет назад 2
«USB - это просто кабель и электрическое соединение между ПК и устройством». Кабель Ethernet - это просто кабель между ПК и коммутатором / маршрутизатором / чем угодно. Тем не менее, есть некоторые протоколы, используемые для связи по этому кабелю и выполнения полезных действий с ним. ysdx 9 лет назад 6
Силовой кабель по-прежнему «просто кабель и электрическое соединение» - нам все еще нужно стандартизировать, как течет этот ток! Представьте, что вы купили ПК с напряжением 6 В постоянного тока и подключили его к своему дому, который обеспечивал постоянное напряжение 3 В 3 в будние дни, и переменное напряжение 480 В в выходные. Насколько хорошо это пойдет ?! OJFord 9 лет назад 3
@ysdx - эти протоколы связи не зависят от стандарта, по крайней мере, в случае Ethernet. В случае USB стандарт связи также определяется в общем стандарте. Устройство сообщает хосту, что это такое, хост решает, как обрабатывать это (то есть драйверы), а затем устанавливает связь между устройством. По этой причине вы не можете соединить два хоста, по крайней мере, с обоими хостами. Ramhound 9 лет назад 1
«Linux находит драйвер устройства для этого устройства» Как вы думаете, Linux может определить, какое устройство подключено к другому концу. Возможно, общий протокол? spender 9 лет назад 13
_ "драйвер обрабатывает низкоуровневый ввод-вывод для базового устройства / оборудования" _ Правильно, используя протокол связи ... Lightness Races in Orbit 9 лет назад 2
«USB - это всего лишь кабель и электрическое соединение», все еще существует протокол связи, который включает, например, обработку концентраторов. njzk2 9 лет назад 1
@Ramhound «Эти протоколы связи не зависят от стандарта, по крайней мере, в случае Ethernet». Это неверно Протоколы Ethernet (как физического, так и MAC-уровня) определяются стандартами IEEE Ethernet (в частности, [стандартами 802.3] (http://standards.ieee.org/about/get/802/802.3.html).) Конечно, можно (и часто) отправлять что-то, кроме протокола Ethernet, по кабелю категории 6 с разъемами RJ-45, но в этот момент это уже не Ethernet. Это обычная практика, например, в телефонных системах, отличных от VoIP. reirab 9 лет назад 4
@reirab: «... можно (и часто) отправлять что-то, кроме протокола Ethernet, по кабелю категории 6 с разъемами RJ-45 ...» - как сигнал DSL или ISDN. Фактически, электрик, проводящий кабели в нашем доме, даже связал дверной звонок с некоторым запасным Cat.7 (вместо простого 2-проводного), как я недавно узнал. ;-) DevSolar 9 лет назад 0
Вот почему он называется "Универсальный" Peter 9 лет назад 0
Каждая коммуникационная технология использует протоколы. Существуют низкоуровневые протоколы, которые определяют, как биты представляются в виде напряжений на электрическом проводе, высокоуровневые протоколы для определения, что это за устройство, и как отправлять ему команды, и среднеуровневые протоколы для указания, какое устройство на шина, для которой предназначена команда. Barmar 9 лет назад 1

5 ответов на вопрос

48
RedGrittyBrick

Да, смотрите протоколы USB

Насколько я понимаю, спецификация USB определяет сложный набор многоуровневых протоколов и профилей устройств.

Например, устройства USB могут соответствовать шаблонам высокого уровня, таким как запоминающее устройство, клавиатура (или устройство интерфейса пользователя и т. Д.), И управляться общим драйвером устройства. Некоторые USB-устройства могут обмениваться данными на более низком уровне, так что поддержка USB низкого уровня в ОС может распознавать, что необходимы специфические для устройства драйверы более высокого уровня.

29
projectdp

Вопрос: Есть ли в действии низкоуровневый протокол связи USB и что это?

Ответ:

Да, спецификация USB включает протокол USB, который определяет способ использования шины на битовом уровне. Это будет протокол «низкого уровня», который лежит в основе протоколов более высокого уровня, например, Mass-Storage, HID и т. Д.

Для подробностей о том, как работает протокол USB, полезна эта вики OSDev . Вот еще одно интересное описание с использованием диаграмм последовательности для описания различных транзакций данных в соответствии с протоколом USB.

Дополнительный вопрос: как Linux находит и загружает драйвер устройства для этого устройства?

Бонусный ответ:

«В Linux при использовании ядра с поддержкой USB работающее устройство USB будет обнаруживаться через оборудование и ядро в соответствии со спецификацией USB. С аппаратной стороны обнаружение осуществляется хост-контроллером USB. Затем в ядре драйвер хост-контроллера вступает во владение и преобразует низкоуровневые биты на проводе в форматированную информацию протокола USB. Затем эта информация заполняется в драйвере ядра USB в ядре. '

Я перефразировал эту прекрасную статью об Opensourceforu, в которой есть гораздо больше деталей и ясности относительно вашего вопроса в контексте Linux.

Я надеюсь, что «Бонусный вопрос» означает «Баунти» для вас. dotancohen 9 лет назад 7
@projectdp - было бы очень полезно, если бы вы поместили часть информации из ваших первичных ссылок в сам ответ. Ramhound 9 лет назад 0
@Ramhound - Спасибо за ваш отзыв, я переписал свой ответ более полезным способом. Что касается добавления дополнительной информации из ресурсов, что бы вы хотели видеть, что имеет отношение к вопросам? projectdp 9 лет назад 0
14
reirab

Как и почти любой другой тип интерфейса связи, USB реализован как стек протоколов, Уровни в этом стеке, которые являются общими для всех или нескольких типов устройств, определяются самими стандартами USB, что обеспечивает совместимость и не позволяет каждому устройству создавать избыточные протоколы. Кроме того, каждый уровень протокола абстрагируется от деталей, о которых не нужно беспокоиться на следующем уровне. Таким образом, когда вы на самом деле пишете слой, специфичный для устройства, у вас просто есть общие функции отправки и получения, которые передают данные из конечной точки A в конечную точку B. Вам, как разработчику устройства, не нужно заботиться о как это происходит Кроме того, более низкие уровни в стеке протоколов могут изменить реализацию, если они предоставляют общий интерфейс для уровня над ними. Таким образом, при изменении одной части стека протоколов остальная часть стека не обязательно должна меняться.какой протокол используется на более низком уровне стека. Вообще говоря, каждый последовательный уровень вниз по стеку будет инкапсулировать сообщение, создаваемое следующим самым высоким уровнем в его собственном поле полезной нагрузки, во время отправки сообщения. Когда сообщение получено, каждый уровень снимает часть, относящуюся к этому уровню, и перенаправляет свою полезную нагрузку на следующий соответствующий уровень вверх по стеку. Это касается не только USB, но и почти всех коммуникационных шин. Например, стек TCP / IP / Ethernet, вероятно, является наиболее часто используемым из них. Задачи, за которые обычно отвечают эти уровни, описаны в моделях, таких как модель OSI .

В USB есть протокол физического уровня, который определяет состояния напряжения / время / и т.д. на проводе и как их следует интерпретировать. Этот протокол, очевидно, должен быть частью самих стандартов USB, а не только для конкретного устройства (тем более что хост не может знать, какое устройство будет подключено к данному USB-порту).

Далее, есть протокол управления шиной, используемый для описания, кто может разговаривать по шине, когда. Это называется уровнем доступа к среде в модели OSI. В USB этот уровень можно в значительной степени суммировать как «устройство может передавать, когда хост говорит ему об этом», так что на этом уровне в USB нет особенно сложного протокола.

Далее, есть стандартный протокол для описания пакета данных и того, как он должен быть направлен от отправителя к получателю. Этот уровень также должен быть частью самого стандарта USB, так что первоначальная связь с целью определения того, какой тип устройства был подключен, может произойти до того, как конкретный тип устройства будет фактически известен хосту. В дополнение к каждому устройству, имеющему конкретный идентификатор на этом уровне, в USB также существует концепция идентификатора конечной точки. Это позволяет любому устройству иметь несколько оконечных точек USB, которые мультиплексируются и демультиплексируются стандартным стеком USB, во многом так же, как сокеты мультиплексируются и демультиплексируются стандартным стеком TCP / IP. Приложение может обрабатывать каждую из этих конечных точек как отдельные потоки данных.

Наконец, есть протокол, определенный для самого устройства. Обратите внимание, что на самом деле есть некоторые общие предварительно разработанные, включенные как часть стандарта USB для общих случаев использования, таких как устройства хранения данных, мыши, клавиатуры и т. Д., Так что каждый производитель устройства не должен заново изобретать рулевое колесо. Тем не менее, более сложные устройства могут самостоятельно разрабатывать собственные протоколы на этом уровне. Выходные данные этого уровня для данной передачи передаются как полезная нагрузка пакета данных на предыдущем уровне. Обратите внимание, что для достаточно сложных устройств специфичная для устройства часть протокола сама может быть разделена на несколько независимых уровней, но нижние уровни не должны знать об этом или заботиться о них. Все, что им нужно знать, это то, что им нужно передать заданный набор байтов от хоста к конкретной конечной точке устройства или от конкретной конечной точки устройства к хосту. Опять же, наличие стандартного интерфейса между уровнями позволяет разделить задачи, поэтому один уровень не должен заботиться о внутренней работе другого уровня, а только о конкретных данных, которые он должен передать или ожидать получить от уровней непосредственно выше или ниже его в стеке.

9
MSalters

На самом деле существует множество связанных протоколов связи, которые взаимодействуют.

На самом низком уровне есть протокол, который описывает, как пакеты байтов отправляются через последовательное соединение. Это характерно для всех USB-устройств (но отличается для USB2 и USB3).

Один из первых отправленных пакетов просит устройство описать себя. Для предотвращения проблемы курицы и яйца протокол идентификации одинаков для всех USB-устройств. ОС может использовать эту идентификацию для загрузки правильного драйвера.

На еще одном уровне USB - это шина, которая означает, что несколько устройств должны совместно использовать пропускную способность. Это означает, что есть протокол, который сообщает каждому устройству, когда оно может говорить, а когда нет. Поскольку все устройства USB должны соответствовать этому, для этого используется общий протокол.

Наконец, многие простые USB-устройства настолько просты, что существуют дополнительные протоколы, которые описывают целый класс устройств (мыши, клавиатуры, хранилище, сетевые адаптеры, ...). Большинство устройств поддерживают ноль или один из этих функциональных протоколов.

* «USB - это шина, которая означает, что несколько устройств должны совместно использовать полосу пропускания» * - точка, которую OP упустил из виду, когда он использует только двухточечную настройку для своего вопроса. Поскольку два (или более) USB-устройства могут совместно использовать кабель с главным компьютером, мы можем заключить, что должен быть протокол. sawdust 9 лет назад 0
@sawdust Так как он работает вообще (даже точка-точка), мы можем сделать вывод, что существует протокол. Например, обнаружение устройства было бы невозможным, если бы не было стандартного протокола. reirab 9 лет назад 0
Действительно, существует стандарт связи, а по своей сути это последовательная связь, следовательно, «Универсальная последовательная шина». Ramhound 9 лет назад 0
@Ramhound Да, как и большинство современных конструкций шин для всего, кроме интерфейсов памяти, USB использует последовательные дифференциальные пары для передачи данных. У USB <= 2.0 была одна дифференциальная пара, а у USB 3 есть две дополнительные дифференциальные пары (одна для передачи SuperSpeed ​​и другая для приема SuperSpeed, что обеспечивает полнодуплексную связь со скоростью 5 Гбит / с в каждом направлении). reirab 9 лет назад 0
Я просто подумал, что я укажу его последовательную шину на ядро ​​стандарта, автор, похоже, не знал об этом факте, поэтому вопрос. Ramhound 9 лет назад 0
5
O.M.Y.

Возможно, часть ответа лежит в определении фразы « протокол связи ». Переходя к тому же источнику, который вы сделали (Википедия), вы найдете полезную информацию, такую ​​как:

  • Для установления связи протоколы должны быть согласованы.
  • Системы обмена сообщениями используют четко определенные форматы (протокол) для обмена сообщениями.
  • протокол должен определять синтаксис, семантику и синхронизацию связи.
  • Таким образом, протокол может быть реализован как аппаратное, программное обеспечение или оба.

Простой способ думать об этом заключается в том, что протокол - это заранее определенный и согласованный способ что-то делать, в данном случае что- то такое, как передавать данные на устройство, подключенное через USB, и обратно. Аппаратно каждый вывод имеет предопределенный уровень напряжения и протокол использования, у каждого типа устройства есть предопределенный протокол использования для каждого вывода, а каждый пакет данных имеет предопределенный синтаксис и формат данных. Также имеется протокол обмена рукопожатиями . В совокупности все это является частью набора стандартов для использования USB-устройств, или протокола USB, который определяется (то есть разрабатывается, предлагается, обсуждается, пересматривается и, в конечном итоге, согласовывается) членами USB Implementers Forum, Inc.

Так что да, есть это протокол USB, или более правильно там есть ряд заранее определенные и согласованная USB - протокол сек для различных видов использования USB.

Я могу показать контрпримеры к 3/4 из этих пунктов, а четвертый охватывает что-нибудь под солнцем. Если 1 верно, то кто-то должен сказать программе SETI (и моей собаке). Если вы считаете, что 2 соответствует действительности, то вы никогда не писали веб-сайт, совместимый с несколькими браузерами. Три на самом деле несколько разные вещи, но если протокол только аппаратный, то синтаксис и семантика не применяются. Простым примером случая, когда синхронизация не определена, является FM-радио. Вы регулируете ручку настройки, чтобы настроить синхронизацию. Он не определен, потому что он использует различную синхронизацию для каждого канала. Тем не менее, не плохой ответ. krowe 9 лет назад 0
** _ 1 ._ ** _процесс_ связи включает (как минимум) три элемента: (1) кодирование / отправка ** И ** (2) прием / декодирование (3) _информация_ (в отличие от случайного шума). Если какой-либо из этих 3 элементов отсутствует, процесс завершается ошибкой. Кроме того, могут присутствовать дополнительные элементы, такие как обратная связь, среда (канал) и контекст. ** ИСТОЧНИК: одна из моих степеней в области исследований связи ** O.M.Y. 9 лет назад 1
** _ 2 ._ ** SETI ** не ** о связи, речь идет об _исследовании и обнаружении_. Даже если мы обнаружим подлинный изготовленный сигнал, нет никакой гарантии, что мы когда-либо поймем его или сможем связаться с отправителем. ** ИСТОЧНИК: [Заявление миссии SETI] [1] ** [1]: http://www.seti.org/about-us O.M.Y. 9 лет назад 1
** _ 3 ._ ** Кросс-браузерная совместимость обычно вызывается (а) производителями браузеров **, которые не соблюдают ** протоколов, или (б) плохо написанными протоколами, приводящими к ошибочным реализациям (например, рассмотрим печально известные баги IE _box model_, а также увидеть ). Поэтому у нас теперь есть HTML _5_ и CSS _3_, потому что протоколы нуждались в улучшении. ** ИСТОЧНИК: Я владел и управлял моей собственной компанией веб-разработки в течение ряда лет ** O.M.Y. 9 лет назад 1
** _ 4 ._ ** Во-первых, радиосигналы, которые «синхронизируются» на частоте, используют протоколы АМ (амплитудной модуляции). Радиосигналы FM (частотной модуляции) синхронизируются с интегралом времени. Протоколы для систем FM включают элементы _fixed_ и _dynamic_ для обработки информации. Динамический элемент - это настройки _variablequency_, который ограничен предварительно определенным и ограниченным диапазоном частот. O.M.Y. 9 лет назад 1
Фиксированные элементы - это математические формулы для модуляции и демодуляции сигнала. Неважно, на каких частотах эти формулы постоянны и могут быть реализованы для обработки сигнала с помощью аналогового аппаратного или цифрового программного обеспечения. ** ИСТОЧНИК: Личный опыт любителя электроники, а также [Википедия] [1] ** [1]: http://en.wikipedia.org/wiki/Frequency_modulation O.M.Y. 9 лет назад 1