USB поддерживает подключение и отключение устройств во время работы шины. Нумерация устройств шины является постоянным процессом отслеживающим динамические изменения физической топологии.
Все устройства USB подключаются через порты хабов. Хабы определяют подключение и отключение устройств к своим портам и сообщают состояние портов в ответ на запрос от контроллера. Хост разрешает работу порта и адресуется к устройству через канал управления используя свой нулевой адрес - USB default address. Все устройства адресуются этим адресом при начальном подключении или после сброса.
Хост определяет, является подключенное устройство хабом или функцией и назначает ему уникальные адрес USB. Хост устанавливает с этим устройством канал управления используя назначенный адрес и нулевой номер точки назначения.
Если новое устройство является хабом, хост определяет подключенные к нему устройства устанавливает каналы и назначает для них адреса. Если новое устройство является "функцией" уведомление о подключении предается диспетчером USB соответствующему ПО.
Когда устройство отключается, хаб автоматически запрещает использование соответствующего порта и сообщает об отключении контроллеру, который удаляет сведения о данном устройстве из всех структур данных. Если отключается хаб, то процесс удаления повторяется для всех подключенных к нему устройств.
Нумерация устройств, подключенных к шине, осуществляется динамически по мере подключения или отключения их питания без какого-либо вмешательства пользователя или клиентского ПО. Процедура нумерации выполняется следующим образом:
1. Хаб, к которому подключилось устройство, информирует хост о смене состояния своего порта ответом на опрос состояния. С этого момента устройство переходит в состояние "Attached" ("присоединено"), а порт, к которому оно присоединено, в состояние "Disabled".
2. Хост уточняет состояние порта.
3. Узнав порт, к которому подключилось новое устройство, хост дает команду сброса и разрешения порта.
4. Хаб формирует сигнал RESET для данного порта (10 мс) и переводит его в состояние "Enabled". Подключенному устройству позволяется потреблять от шины ток питания в пределах 100 мА. Устройство переходит в состояние Powered, все его регистры переводятся в исходное состояние, и оно отзывается на обращение по нулевому адресу.
5. До тех пор пока устройство не получит уникальный адрес, оно доступно по дежурному каналу, по которому хост-контроллер может определять максимально допустимый размер поля данных пакета.
6. Хост сообщает устройству его уникальный адрес, и оно переходит в состояние "Addressed".
7. Хост считывает все конфигурации устройства, включая и заявленный ток потребления от шины.
8. Исходя из полученной информации, хост конфигурирует все имеющиеся конечные точки данного устройства, которое переводится в состояние Configured. Теперь хаб позволяет устройству потреблять устройству от шины полный ток, заявленный в конфигурации. С точки зрения устройства оно становится готовым к использованию.
Когда устройство отделяется от шины, хаб уведомляет об этом хост и работа порта запрещается, а хост обновляет свою текущую топологическую информацию.