1

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

  1. Что такое конечные точки и какова их цель? Позвольте мне объяснить немного: из того, что я понял, конечная точка является источником или местом назначения данных. Я не хочу быть грубым, но у меня болит голова, потому что я не могу понять, почему. Я имею в виду, что USB - это последовательная шина, поэтому она должна заботиться только о доставке данных по назначению. Направление это устройство. Зачем более включать несколько пунктов назначения в устройство в виде конечных точек? Я имею в виду, что USB-устройство может управлять данными так, как хочет, так, как хочет любой разработчик логической структуры, так зачем добавлять их для передачи спецификаций?

  2. В USB-хосте на ПК USB-хост загружает на устройство соответствующие драйверы. Итак, допустим, я подключил какое-то USB-устройство нестандартного класса. Драйвер USB-хоста получит свои идентификаторы и так далее, и, узнав устройство, он должен загрузить свои драйверы. Но я думал, что драйверы устройств присутствуют в ядре, так как их можно загрузить дополнительно?

Кроме того, допустим, что мой USB-хост подключен к ПК через PCI. Таким образом, мое хост-устройство USB будет генерировать некоторое PCI-прерывание, чтобы привлечь внимание ОС, а затем ОС сначала должна загрузить драйвер хоста USB. Разве это не слишком медленный процесс? Я имею в виду, да, даже USB 3.0 намного медленнее, чем процессор, но все же ...

Спасибо за любой ответ, пожалуйста, если вы знаете что-то о помощи enpoints, второй вопрос более теоретический. Еще раз спасибо :)

2 ответа2

1

1. Что такое конечные точки и какова их цель? Позвольте мне объяснить немного: из того, что я понял, конечная точка является источником или местом назначения данных. Но, WTF? Я не хочу быть грубым, но моя голова болит, потому что я не могу понять, почему. Я имею в виду, что USB - это последовательная шина, поэтому она должна заботиться только о доставке данных по назначению. Направление это устройство. Зачем более включать несколько пунктов назначения в устройство в виде конечных точек?

Да, "конечная точка" - это просто концепция USB, а именно конечная точка подключения к устройству.

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

"USB в двух словах" объясняет это довольно красиво: http://www.beyondlogic.org/usbnutshell/usb3.htm

2. В USB-хосте на ПК USB-хост загружает соответствующие драйверы для устройства. Итак, допустим, я подключил какое-то USB-устройство нестандартного класса. Драйвер USB-хоста получит свои идентификаторы и так далее, и, узнав устройство, он должен загрузить свои драйверы. Но я думал, что драйверы устройств присутствуют в ядре, так как их можно загрузить дополнительно?

Обычно в ядро встроены только драйверы USB низкого уровня. Драйверы более высокого уровня, в частности драйверы для конкретных поставщиков, загружаются по требованию. Как это работает, зависит от ОС, но большинство современных ОС могут загружать драйверы в ядро во время выполнения, например, Linux с использованием модулей или Windows с использованием модели драйверов Windows.

Кроме того, допустим, что мой USB-хост подключен к ПК через PCI. Таким образом, мое хост-устройство USB будет генерировать некоторое PCI-прерывание, чтобы привлечь внимание ОС, а затем ОС сначала должна загрузить драйвер хоста USB. Разве это не слишком медленный процесс? Я имею в виду, да, даже USB 3.0 намного медленнее, чем процессор, но все же ...

Этот вопрос не совсем понятен. Да, ОС должна загружать драйверы, и да, это может занять несколько секунд, но это делается только один раз. И PCI не будет проблемой, потому что PCI намного быстрее, чем даже USB 3.0.

0

Если я правильно понимаю вопрос, возможно, эти вопросы могут пролить свет на вещи:

Как USB-концентратор должен объявить о себе?

Как должно объявлять устройство, которое эмулирует несколько устройств (например, клавиатура + трекпад)?

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .