Главная » Ассемблер, Железо » Процедура нумерации и конфигурирования устройств на шине USB

0

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

Для того чтобы определить, подключено ли к порту хост-контроллера какое-либо устройство, нужно разрешить работу порта, записав 1 во второй разряд регистра состояния и управления порта. После этого нужно прочитать регистр состояния порта и проверить значение нулевого разряда слова состояния: если к порту подключено устройство, этот разряд будет установлен в 1. Кроме того, по значению восьмого разряда слова состояния нужно определить тип устройства (0 — полноскоростное устройство, 1 — низкоскоростное). Далее хост выполнит процедуру конфигурирования устройства. Порядок конфигурирования приведен ниже.

1.    Хост подает запрос Set Address и присваивает обнаруженному устройству адрес на шине USB в соответствии с его порядковым номером.

2.    Хост считывает дескриптор устройства и дескрипторы конфигурации.

3.    Хост выбирает нужную конфигурацию устройства и устанавливает ее при помощи запроса Set Configuration.

ВНИМАНИЕ

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

Операционные системы Windows 98 SE, Windows 2000 и Windows

ХР используют несколько более сложный порядок конфигурирования [39].

1.    Хост подает команду сброса на порт, к которому подключено устройство.

2.    Хост запрашивает дескриптор устройства, причем в запросе задает размер дескриптора 64 байта.

3.    Хост принимает первые 8 байт дескриптора устройства, после чего подает команду сброса порта еще раз.

4.    Хост присваивает устройству адрес с помощью запроса Set Address.

5.    Хост снова считывает дескриптор устройства, причем в запросе указывается «правильный» размер дескриптора — 18 байт.

6.    Хост запрашивает дескриптор конфигурации устройства, задавая в запросе размер дескриптора 9 байт, и извлекает из него значение полного размера списка дескрипторов.

7.    Хост повторно запрашивает дескриптор конфигурации устройства и все сопутствующие ему дескрипторы, используя полученный размер списка.

8.       Хост запрашивает дескрипторы строк, если они определены. Если какое-либо из устройств, подключенных к порту, является хабом, хост продолжает процесс настройки системы, поочередно опрашивая каждый порт хаба. Каждому найденному устройству хост присваивает адрес и задает конфигурацию по описанной выше схеме. Процесс конфигурирования продолжается, пока не будут настроены все хабы и подсоединенные к ним периферийные устройства с включенным питанием (выключенные устройства на запросы не отвечают, поэтому хост их «не видит»),

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

Источник: Кулаков В. К90 Программирование на аппаратном уровне: специальный справочник (+дискета). 2-е издание. — СПб.: Питер, 2003. — 847 е.: ил.

По теме:

  • Комментарии