Согласно Википедии , USB:
определяет кабели, разъемы и протоколы связи, используемые в шине для соединения, связи и питания между компьютерами и электронными устройствами
Но действительно ли существует « протокол связи USB »? Мое понимание таково:
- Вы подключаете USB-устройство к машине (скажем, Ubuntu или любой вид Linux)
- Linux находит драйвер устройства для этого устройства (как-то - бонус, если вы знаете!) И загружает его
- Теперь устройство подключено под
/dev/theDevice
- Приложения пользовательского пространства теперь могут читать / записывать,
/dev/theDevice
а драйвер обрабатывает низкоуровневый ввод-вывод на базовое устройство / оборудование
Для меня нигде в этом потоке не появляется "протокол связи USB". Если я правильно понимаю, USB - это просто кабель и электрическое соединение между ПК и устройством.
Я здесь не прав? USB действительно реализует какой-то протокол низкого уровня, подчеркивающий поток выше? Если так, что это и как это работает на 30 000 футов?
linux
usb
linux-device-driver
smeeb
источник
источник
Ответы:
Да, смотрите протоколы USB
Насколько я понимаю, спецификация USB определяет сложный набор многоуровневых протоколов и профилей устройств.
Например, USB-устройства могут соответствовать шаблонам высокого уровня, таким как запоминающее устройство, клавиатура (или устройство интерфейса пользователя и т. Д.), И управляться общим драйвером устройства. Некоторые USB-устройства могут обмениваться данными на более низком уровне, так что поддержка USB низкого уровня ОС может распознать, что необходимы специфические для устройства драйверы более высокого уровня.
источник
Вопрос: Есть ли в действии низкоуровневый протокол связи USB и что это?
Ответ:
Да, спецификация USB включает в себя протокол USB, который определяет способ использования шины на битовом уровне. Это будет протокол «низкого уровня», который лежит в основе протоколов более высокого уровня, например, Mass-Storage, HID и т. Д.
Для подробностей о том, как работает протокол USB, полезна эта вики OSDev . Вот еще одно интересное описание с использованием диаграмм последовательности для описания различных транзакций данных в соответствии с протоколом USB.
Бонусный вопрос: как Linux находит и загружает драйвер устройства для этого устройства?
Бонусный ответ:
«В Linux при использовании ядра с поддержкой USB работающее устройство USB будет обнаруживаться через оборудование и ядро в соответствии со спецификацией USB. С аппаратной стороны обнаружение осуществляется хост-контроллером USB. Затем в ядре драйвер хост-контроллера вступает во владение и преобразует низкоуровневые биты на проводе в форматированную информацию протокола USB. Эта информация затем заполняется в драйвере ядра USB в ядре. '
Я перефразировал эту прекрасную статью об Opensourceforu , в которой есть гораздо больше деталей и ясности относительно вашего вопроса в контексте Linux.
источник
Как и почти любой другой тип интерфейса связи, USB реализован в виде стека протоколов., Уровни в этом стеке, которые являются общими для всех или нескольких типов устройств, определяются самими стандартами USB, которые обеспечивают совместимость и не позволяют каждому устройству создавать избыточные протоколы. Кроме того, каждый уровень протокола абстрагирует детали, которые не должны беспокоить следующий уровень. Таким образом, когда вы на самом деле пишете слой, специфичный для устройства, у вас просто есть общие функции отправки и получения, которые передают данные из конечной точки A в конечную точку B. Вам, как разработчику устройства, не нужно заботиться о как это происходит Кроме того, более низкие уровни в стеке протоколов могут изменить реализацию, если они предоставляют общий интерфейс для уровня над ними. Таким образом, когда одна часть стека протоколов изменяется, остальная часть стека не обязательно должна меняться.какой протокол используется на более низком уровне стека. Вообще говоря, каждый последовательный уровень вниз по стеку будет инкапсулировать сообщение, создаваемое следующим самым высоким уровнем в его собственном поле полезной нагрузки, во время отправки сообщения. Когда сообщение получено, каждый уровень снимает часть, относящуюся к этому уровню, и перенаправляет свою полезную нагрузку на следующий соответствующий уровень вверх по стеку. Это касается не только USB, но и почти всех коммуникационных шин. Например, стек TCP / IP / Ethernet является наиболее часто используемым из них. Задачи, за которые обычно отвечают эти уровни, описаны в моделях, таких как модель OSI .
В USB есть протокол физического уровня, который определяет состояния напряжения / время / и т.д. на проводе и как их следует интерпретировать. Этот протокол, очевидно, должен быть частью самих стандартов USB, а не только для конкретного устройства (тем более что хост не может знать, какое устройство собирается подключить к данному USB-порту).
Далее, есть протокол управления шиной, используемый для описания, кто может разговаривать по шине, когда. Это называется уровнем доступа к среде в модели OSI. В USB этот уровень можно в значительной степени суммировать как «устройство может передавать, когда хост говорит ему об этом», так что на этом уровне в USB нет особенно сложного протокола.
Далее, есть стандартный протокол для описания пакета данных и того, как он должен быть направлен от отправителя к получателю. Этот уровень также должен быть частью самого стандарта USB, так что первоначальная связь для определения того, какой тип устройства был подключен, может произойти до того, как хост определит конкретный тип устройства. В дополнение к каждому устройству, имеющему конкретный идентификатор на этом уровне, в USB также существует концепция идентификатора конечной точки. Это позволяет любому данному устройству иметь несколько оконечных точек USB, которые мультиплексируются и демультиплексируются стандартным стеком USB, во многом так же, как сокеты мультиплексируются и демультиплексируются стандартным стеком TCP / IP. Приложение может обрабатывать каждую из этих конечных точек как отдельные потоки данных.
Наконец, есть протокол, определенный для самого устройства. Обратите внимание, что на самом деле есть некоторые общие предварительно разработанные, включенные как часть стандарта USB для общих случаев использования, таких как устройства хранения данных, мыши, клавиатуры и т. Д., Так что каждый производитель устройства не должен заново изобретать рулевое колесо. Тем не менее, более сложные устройства могут свободно разрабатывать свои собственные протоколы на этом уровне. Выходные данные этого уровня для данной передачи передаются как полезная нагрузка пакета данных на предыдущем уровне. Обратите внимание, что для достаточно сложных устройств специфичная для устройства часть протокола может быть сама разделена на несколько независимых уровней, но более низкие уровни не должны знать об этом или заботиться о них. Все, что им нужно знать, это то, что им нужно передать заданный набор байтов от хоста к конкретной конечной точке устройства или от конкретной конечной точки устройства к хосту. Опять же, наличие стандартного интерфейса между уровнями позволяет разделить задачи, поэтому одному слою не нужно заботиться о внутренней работе другого уровня, а нужно только о конкретных данных, которые он должен передать или ожидать получить от уровней непосредственно над или ниже его в стеке.
источник
На самом деле существует множество связанных протоколов связи, которые взаимодействуют.
На самом низком уровне есть протокол, который описывает, как пакеты байтов отправляются через последовательное соединение. Это характерно для всех USB-устройств (но отличается для USB2 и USB3).
Один из первых отправленных пакетов просит устройство описать себя. Для предотвращения проблемы курицы и яйца протокол идентификации одинаков для всех USB-устройств. ОС может использовать эту идентификацию для загрузки правильного драйвера.
На еще одном уровне USB - это шина, которая означает, что несколько устройств должны совместно использовать пропускную способность. Это означает, что есть протокол, который сообщает каждому устройству, когда оно может говорить, а когда нет. Поскольку все устройства USB должны соответствовать этому, для этого используется общий протокол.
Наконец, многие простые USB-устройства настолько просты, что существуют дополнительные протоколы, которые описывают целый класс устройств (мыши, клавиатуры, устройства хранения, сетевые адаптеры, ...). Большинство устройств поддерживают ноль или один из этих функциональных протоколов.
источник
Universal Serial Bus
.Возможно, часть ответа лежит в определении фразы « протокол связи ». Переходя к тому же источнику, который вы сделали (Википедия), вы найдете полезную информацию, такую как:
Простой способ думать об этом состоит в том, что протокол - это заранее определенный и согласованный способ что-то делать , в данном случае что- то такое, как передавать данные на устройство, подключенное через USB, и обратно. Аппаратно каждый вывод имеет предопределенный уровень напряжения и протокол использования, у каждого типа устройства есть предопределенный протокол использования для каждого вывода , а каждый пакет данных имеет предопределенный синтаксис и формат данных. Также имеется протокол обмена рукопожатиями . В совокупности все это является частью набора стандартов для использования USB-устройств, или протокола USB, который принимается (т.е. разрабатывается, предлагается, обсуждается, пересматривается и в конечном итоге согласовывается) членами USB Implementers Forum, Inc.
Так что да, есть это протокол USB, или более правильно там есть ряд заранее определенные и согласованный протокол USB с для различных видов использования USB.
источник