Существует ли на самом деле «протокол связи USB»?

Существует ли на самом деле «протокол связи USB»?

В соответствии сВикипедия, USB:

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

Но есть ли на самом деле "USBпротокол связи"? Мойпониманиев том, что:

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

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

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

решение1

Да, см.USB-протоколы

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

Например, USB-устройства могут соответствовать шаблонам высокого уровня, таким как mass-storage, keyboard (или Human Interface Device и т. д.), и управляться общим драйвером устройства. Некоторые USB-устройства могут взаимодействовать на более низком уровне, так что низкоуровневая поддержка USB ОС может распознавать, что для конкретного устройства необходимы драйверы более высокого уровня.

решение2

Вопрос: Действует ли низкоуровневый протокол связи USB и что он собой представляет?

Отвечать:

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

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

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

Бонусотвечать:

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

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

решение3

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

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

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

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

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

решение4

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

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

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

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

Связанный контент