
Шины.PCI,.USB.и.FireWire
.pdfзапросом Set b_hnp_enable (wValue = 3) устройство A разрешает устройству B запрашивать роль хоста;
запросом Set a_hnp_support (wValue = 4) устройство A только информирует устройство B о том, что оно подключено к порту, поддерживающему HNP, и зап$ рос роли хоста может быть разрешен позже;
запросом Set a_alt_hnp_support (wValue = 5) устройство A информирует уст ройство B о том, что оно (устройство$B) подключено к порту, не поддерживаю$ щему HNP, но у устройства A имеется другой порт, на котором HNP поддер$ живается.
Применение шины USB
Благодаря универсальности и способности эффективно передавать разнородный трафик шина USB применяется для подключения к PC самых разнообразных уст$ ройств. Она призвана заменить традиционные порты PC — COM и LPT, а также порты игрового адаптера и интерфейса MIDI. Спецификация USB 2.0 позволяет говорить и о подключении традиционных «клиентов» шин ATA и SCSI, а также захвате части ниши применения шины FireWire. Привлекательность USB прида$ ет возможность подключения/отключения устройств на ходу и возможность их использования практически сразу, без перезагрузки ОС. Удобна и возможность подключения большого количества (до 127) устройств к одной шине, правда, при наличии хабов. Хост$контроллер интегрирован во все современные системные платы. Выпускаются и карты расширения с контроллерами USB (обычно для шины PCI). Некоторое время повсеместное применение USB сдерживалось недостаточ$ ной активностью разработчиков ПО (производителей оборудования): просматривая перечни устройств, можно было видеть, что для всех указывается поддержка в Windows 98/SE/ME, а вот в графах Linux, MacOS, Unix и даже Windows 2000/NT часто стоят неприятные пометки N/A (Not Allowed — «не дозволено»). В настоящее время ситуация меняется (теперь возникают проблемы поиска драйверов для Win$ dows 9x), но вопросы совместимости ПО иногда доставляют дополнительные хлопоты.
Для того чтобы система USB заработала, необходимо, чтобы были загружены драй$ веры хост$контроллера (или контроллеров, если их несколько). При подключе$ нии устройства к шине USB ОС Windows выдает сообщение «Обнаружено новое устройство» и, если устройство подключается впервые, предлагает загрузить для него драйверы. Многие модели устройств уже известны системе, и драйверы вхо$ дят в дистрибутив ОС. Однако может потребоваться и драйвер изготовителя уст$ ройства, который должен входить в комплект поставки устройства, или его при$ дется искать в Сети. К сожалению, не все драйверы работают корректно — «сырой» драйвер начальной версии, возможно, потребуется заменить более «правильным», чтобы устройство нормально опознавалось и хорошо работало. Но это общее горе пользователей любых устройств, а не только устройств для шины USB.
Перечислим основные области применения USB:
устройства ввода — клавиатуры, мыши, трекболы, планшетные указатели и т. п. Здесь USB предоставляет единый интерфейс для различных устройств. Целе$
сообразность использования USB для клавиатуры в настольных ПК пока не очевидна (порты клавиатуры и мыши PS/2 есть на всех системных платах), хотя в паре с мышью USB (подключаемой к порту хаба, встроенного в клавиатуру) сокращается количество кабелей, тянущихся от системного блока к столу пользователя;
принтеры. USB 1.1 обеспечивает почти ту же скорость, что и LPT$порт в режи$ ме ECP, но при использовании USB не возникает проблем с длиной кабеля и подключением нескольких принтеров к одному компьютеру (правда, требуют$ ся хабы). USB 2.0 позволит ускорить печать в режиме высокого разрешения за счет сокращения времени на передачу больших массивов данных. Однако су$ ществует проблема со старым ПО, которое непосредственно работает с LPT$ портом на уровне регистров, — на принтер USB оно печатать не сможет;
сканеры. Применение USB позволяет отказаться от контроллеров SCSI или от занятия LPT$порта. USB 2.0 при этом позволяет еще и повысить скорость пере$ дачи данных;
аудиоустройства — колонки, микрофоны, головные телефоны (наушники). USB позволяет передавать потоки аудиоданных, достаточные для обеспечения самого высокого качества. Передача в цифровом виде от самого источника сигнала (микрофона со встроенным преобразователем и адаптером) до приемника и циф$ ровая обработка в хост$компьютере позволяют избавиться от наводок, свой$ ственных аналоговой передаче аудиосигналов. Использование USB$аудиоком$ понентов позволяет в ряде случаев избавиться и от звуковой карты компьютера — аудиокодек (АЦП и ЦАП) выводится за пределы компьютера, а все функции обработки сигналов (микшер, эквалайзер и т. п.) реализуются центральным процессором чисто программно. Аудиоустройства могут и не иметь собствен$ ных колонок и микрофона, а ограничиться преобразователями и стандартными гнездами («джеками») для подключения обычных аналоговых устройств;
музыкальные синтезаторы и MIDI контроллеры с интерфейсом USB. Шина USB позволяет компьютеру обрабатывать потоки множества каналов MIDI (пропуск$ ная способность традиционного интерфейса MIDI уже гораздо ниже возмож$ ностей компьютера);
фото и видеокамеры. USB 1.1 позволяет передавать статические изображения любого разрешения за приемлемое время, а также передавать поток видеодан$ ных (живое видео) с достаточной (25–30 кадров/с) частотой кадров только с невысоким разрешением или сильным сжатием данных, от которого, естествен$ но, страдает качество изображения. USB 2.0 теоретически позволяет передавать поток видеоданных высокого разрешения без сжатия (и потери качества). С ин$ терфейсом USB выпускают как камеры, так и устройства захвата видеосигнала и TV$тюнеры;
коммуникации. С интерфейсом USB выпускают разнообразные модемы, вклю$ чая кабельные и xDSL, адаптеры высокоскоростной инфракрасной связи (IrDA FIR) — шина позволяет преодолеть предел скорости COM$порта (115,2 Кбит/с), не увеличивая загрузку центрального процессора. Выпускаются и сетевые адап$ теры Ethernet, подключаемые к компьютеру по USB. Непосредственно (без
дополнительных устройств) портами USB соединить между собой даже два компьютера нельзя — на одной шине может присутствовать лишь один хост$ контроллер (см. ранее). Специальное устройство для связи пары компьютеров выглядит как «таблетка», врезанная в кабель USB с двумя вилками типа «A» на концах. Объединяющее устройство (USB Link) может располагаться и на си$ стемной плате компьютера, с выходом на внешний разъем, — в этом случае ком$ пьютеры соединяются просто кабелем, подключаемым к рядовому порту USB одного компьютера и порту USB Link другого. Коммуникационное ПО USB Link позволяет даже строить сеть на основе цепочки соединений по USB. Для соеди$ нения нескольких компьютеров в локальную сеть выпускаются специальные устройства, выполняющие коммутацию пакетов между компьютерами. Объ$ единение более двух компьютеров осложняется и топологическими ограниче$ ниями USB: длина одного сегмента кабеля не должна превышать 5 м, а исполь$ зовать хабы для увеличения дальности неэффективно (каждый хаб дает всего 5 м дополнительного расстояния);
преобразователи интерфейсов позволяют через порт USB, имеющийся теперь практически на всех компьютерах, подключать устройства с самыми разнооб$ разными интерфейсами: Centronics и IEEE 1284 (LPT$порты), RS$232C (эму$ ляция UART 16550A — основы COM$портов) и другие последовательные ин$ терфейсы (RS$422, RS$485, V.35...), эмуляторы портов клавиатуры и даже игрового порта, переходники на шину ATA, ISA, PC Card и любые другие, для которых достаточно производительности. Здесь USB становится палочкой$ выручалочкой, когда встает проблема подключения к отсутствующему LPT или COM$порту, например, в блокнотном ПК, да и в других ситуациях. При этом ПО преобразователя может обеспечить эмуляцию классического варианта «же$ леза» стандартных портов IBM PC, но только под управлением ОС защищен$ ного режима. Приложение MS$DOS может обращаться к устройствам по адре$ сам ввода$вывода, памяти, прерываниями, каналами DMA, но только из сеанса MS$DOS, открытого в ОС с поддержкой USB (чаще это Windows). При загруз$ ке «голой» MS$DOS «палочка$выручалочка» не работает. Преобразователи интерфейсов позволяют продлить жизнь устройствам с традиционными интер$ фейсами, изживаемыми из PC спецификациями PC’99 и PC’2001. Скорость передачи данных через конвертер USB — LPT может оказаться даже выше, чем у реального LPT$порта, работающего в режиме SPP. Однако если подключае$ мое устройство требует интенсивного диалогового обмена (чередований корот$ ких операций ввода и вывода) с ПО, подключение через USB будет работать медленно;
устройства хранения — жесткие диски, устройства чтения и записи CD и DVD, стримеры — при использовании USB 1.1 получают скорость передачи, соизме$ римую со скоростью их подключения к LPT, но более удобный интерфейс (как аппаратный, так и программный). При переходе на USB 2.0 скорость передачи данных становится соизмеримой с ATA и SCSI, а ограничений по количеству устройств достичь трудно. Особенно интересно использование USB для элект$ ронных устройств энергонезависимого хранения (на флэш$памяти) — такой
накопитель может быть весьма компактным (размером с брелок для ключей)
иемким (от десятка мегабайт до гигабайта и более). Логически эти накопители могут представляться различным образом: просто как устройства хранения (USB Mass Storage, рассмотренные далее) или же как устройства считывания флэш$ карт (например, Smart Media Card Reader, хотя у них и нет отделяемой SMC$ карты). Выпускаются устройства для мобильного подключения накопителей с интерфейсом ATA$ATAPI — по сути, это лишь преобразователи интерфейсов, помещенные в коробку$отсек формата 5” или 3,5”, а иногда выполненные прямо в корпусе разъема ATA. Имеются и устройства чтения$записи карт SmartMedia Card, CompactFlash Card и других типов флэш$карт, в которые можно вставлять соответствующие носители;
игровые устройства — джойстики всех видов (от «палочек» до автомобильных рулей), пульты с разнообразными датчиками (непрерывными и дискретными)
иисполнительными механизмами (почему бы не сделать кресло автогонщика с вибраторами и качалками?) — подключаются унифицированным способом. При этом исключается ресурсопожирающий интерфейс старого игрового адаптера (упраздненного уже в спецификации PC’99);
телефоны — аналоговые и цифровые (ISDN). Подключение телефонного аппа$ рата позволяет превратить компьютер в секретаря с функциями автодозвона, автоответчика, охраны и т. п.;
мониторы — здесь шина USB используется для управления параметрами мо$ нитора. Монитор сообщает системе свой тип и возможности (параметры син$ хронизации) — это делалось и без USB по шине DDC. Однако USB$мониторы позволяют системе устанавливать параметры монитора. Регулировки яркости, контраста, цветовой температуры и т. п. могут теперь выполняться программ$ но, а не только кнопками на лицевой панели монитора. В мониторы, как прави$ ло, встраивают хабы. Это весьма полезно, поскольку настольную периферию не всегда удобно включать в «подстольный» системный блок;
электронные ключи — устройства с любым уровнем интеллектуальности защи$ ты — могут быть выполнены в корпусе вилок USB. Они гораздо компактнее аналогичных устройств для COM$ и LPT$портов.
Конечно же, перечисленными классами устройств сфера применения шины USB не ограничивается.
На современных системных платах имеется встроенный хост$контроллер USB; для плат, выпускаемых с 2002–2003 годов, характерно наличие контроллера USB 2.0 (EHC) с несколькими контроллерами$компаньонами (чаще UHC). Типовое чис$ ло портов — четыре и более (раньше минимумом было два). В случае поддержки USB 2.0 эти порты могут быть как равноправными (поддерживать подключение на любой скорости), так и выделенными (часть — только HS, часть — FS/LS). Часть портов выводится на внешние разъемы системного блока непосредственно, осталь$ ные выводятся на штырьковые разъемы, расположенные на системной плате. К этим промежуточным разъемам внешние разъемы подключаются через кабели$ «выкидыши». К сожалению, на многих корпусах системного блока отсутствует штатное место для разъемов USB с лицевой стороны, что делает подключение уст$

ройств неудобным. Эта проблема решается установкой разъемов на заглушки для 5” или 3,5”отсеков.
ВНИМАНИЕ
Из за ошибок при подключении кабеля «выкидыша» на дополнительных внешних разъемах могут оказаться перепутанными цепи +5V и GND. Из за такой ошибки подключаемое устройство, питающееся от шины (например, флэш память), мо жет выйти из строя (сгореть).
Хабы USB выпускаются как в виде отдельных устройств, так и встраиваются в пе$ риферийные устройства (клавиатуры, мониторы). Как правило, хабы питаются от сети переменного тока (они должны питать подключаемые устройства). Выпуска$ ют и хабы, устанавливаемые внутрь системного блока компьютера и питающиеся от его блока питания. Такие хабы дешевле внешних и не требуют дополнительной питающей розетки. Один из вариантов исполнения — установка хаба на скобку, монтируемую в окно для дополнительных разъемов. Доступ к их разъемам со «спи$ ны» системного блока не очень удобен для пользователей. Другой вариант — хаб, устанавливаемый в 3$дюймовый отсек. Его разъемы легко доступны, индикаторы состояния портов хорошо видны, но не всегда удобны кабели, выходящие с перед$ ней панели системного блока. С другой стороны, для подключения электронных ключей (если их приходится часто менять) или миниатюрных накопителей этот вариант — самый удобный.
Выпускаются вспомогательные устройства USB, увеличивающие дальность связи (distance extender). Простейший вариант — это обычный 5$метровый кабель USB, на одном конце которого обычная вилка «A», а на другом — миниатюрный одно$ портовый хаб с гнездом «B». При необходимости между устройством USB и кор$ невым хабом можно использовать цепочку из 5 таких удлинителей, что дает даль$ ность 25 м плюс длина кабеля устройства (до 5 м). Другой вариант — пара устройств, соединяемых между собой обычным кабелем «витая пара» категории 5 (или даже оптоволокном), включаемая между периферийным устройством и корневым ха$ бом. Дальнее (от хоста) устройство этого удлинителя может быть и хабом на не$ сколько портов. К сожалению, увеличение дистанции упирается в ограничения на время задержки сигнала, свойственные протоколу шины USB, и максимально до$ стижимое расстояние составляет 200 футов (около 60 м). Уже с удлинителем на 50 м дополнительные хабы недопустимы — задержка сигнала в кабеле «съедает» лимиты, отпущенные хабам в спецификации USB. Но даже и эта длина позволяет расширить сферу применения USB, например, для удаленного видеонаблюдения. Утверждения изготовителей о достижимой дальности 100 м (а на оптике и до 500 м!) вызывают некоторое недоверие, поскольку ограничения дальности в спе$ цификации USB жестко ограничено установками тайм$аутов ожидания ответа, а быстрее света сигналы в кабелях разогнать не удается.
Ниже рассматриваются подробности реализации взаимодействия по шине USB с устройствами некоторых классов. Эти примеры позволяют осмыслить приклад$ ные возможности USB, их можно использовать как отправные точки для разра$ ботки собственных устройств, в том числе и совершенно оригинальных по функ$ циональному назначению. Последний раздел главы посвящен разрешению проблем,
возникающих при подключении устройств, в том числе и устройств собственной разработки.
Принтеры USB
Класс и протоколы принтеров с интерфейсом USB определены документом «Universal Serial Bus Device Class Definition for Printing Devices», первая версия которого появилась в 1997 году, версия 1.1 — в 2000 г. Протоколы определены с учетом обеспечения легкого перехода от традиционных интерфейсов принтера: последовательного (RS$232, RS$422) и параллельного (однонаправленного Centronics или двунаправленного IEEE 1284). Подключение принтера USB эму$ лирует его подключение к LPT$порту в режиме SPP или двунаправленном (IEEE 1284). Классовое определение USB принтера не затрагивает данные, передавае$ мые принтеру: это может быть любой язык описания страниц (PDL — Page De$ scriptor Language). Принтеры могут работать только на скоростях FS или HS (на низкой скорости в USB нет передач массивов).
Принтер имеет все стандартные дескрипторы устройства USB, специфических классовых дескрипторов нет. В дескрипторе устройства принтер сообщает нуле$ вые коды класса, подкласса и протокола. Принтер имеет по крайней мере одну кон$ фигурацию; в конфигурации имеется один интерфейс. На уровне интерфейса для принтеров определен класс 07 подкласс 01. Код протокола определяется выбран$ ной альтернатиной установки интерфейса:
однонаправленный (Unidirectional) интерфейс: данные на принтер передаются через конечную точку типа Bulk OUT; состояние от принтера в формате, приня$ том для параллельного порта (3 значимых бита регистра состояния LPT$порта) передается по классово$специфическому запросу Get_Port_Status через EP0. Этому варианту интерфейса соответствует код протокола 01;
двунаправленный (Bi Directional) интерфейс: данные на принтер передаются через конечную точку типа Bulk OUT; состояние от принтера передается через конечную точку типа Bulk IN. Здесь также доступно получение состояния (3 бита) по запросу Get_Port_Status через EP0. Этому варианту интерфейса со$ ответствует код протокола 02;
двунаправленный интерфейс с доставкой данных по логическим каналам в соот$ ветствии с IEEE 1284.4 (IEEE 1284.4 compatible Bi$directional Interface), введен$ ный в версии 1.1. Модель обмена та же, что и у предыдущего. Этому варианту интерфейса соответствует код протокола 03.
В принтере используется (кроме нулевой) только одна конечная точка для вывода данных (Bulk OUT), для двунаправленного интерфейса — еще и Bulk IN для полу$ чения данных обратного канала (состояния).
Принтер поддерживает стандартные запросы к устройствам USB, кроме установ$ ки метки времени (у принтера нет изохронных точек). Кроме того, он должен под$ держивать классовые запросы (табл. 16.1).
По запросу Get_Device_Id принтер возвращает строку данных (Capabilities String), описывающих его в формате и синтаксисе, определенном в IEEE$1284. В запросе

в поле wValue указывается номер интересующей конфигурации, старший байт wIndex задает номер интерфейса (0), младший — номер альтернативной установ$ ки. Возвращаемая строка начинается с 2$байтного поля длины всей строки (стар$ ший байт — первый), за которой идет собственно идентификатор.
Таблица 16.1. Классовые запросы к принтерам
Запрос |
bmRequestType |
bRequest |
Get_Device_Id |
10100001b |
0 |
Get_Port_Status |
10100001b |
1 |
Soft_Reset |
00100011b |
2 |
|
|
|
По запросу Get_Port_Status принтер возвращает байт состояния, аналогичный байту состояния LPT$порта. Здесь значимы только 3 бита (остальные — нули):
бит 3 (Not Error), признак ошибки: 1 — нет ошибки, 0 — есть;
бит 4 (Select), признак выбранности принтера: 1 — выбран (доступен), 0 — нет;
бит 5 (Paper Empty), признак конца бумаги: 1 — нет бумаги, 0 — есть.
По запросу Soft_Reset принтер очищает свой буфер данных, переходит в исходное состояние, переводит в исходное состояние и разблокирует (если они были оста$ новлены) конечные точки. На его состояние в плане интерфейса USB (адресован, сконфигурирован) этот сброс не влияет.
Для работы с USB$принтером следует считать дескриптор устройства и дескрип$ торы всех возможных конфигураций, выбрать конфигурацию и требуемую аль$ тернативную установку интерфейса. При работе с двунаправленным интерфей$ сом некоторое неудобство вызывает тип конечной точки обратного канала (Bulk): запрос данных о состоянии принтера, который делает драйвер, будет «висеть» до срабатывания тайм$аута драйвера, если принтеру «нечего сказать». Формальное определение результатов запроса Get_Port_Status (по крайней мере, согласно спе$ цификации версии 1.1) не позволяет судить о наличии данных в обратном канале. Однако, вспоминая работу LPT$порта, которую эмулирует подключение по USB, можно предположить, что признаком наличия данных обратного канала будет бит 3 (Not Error). В LPT$порту этот бит представляет текущее состояние сигнала Error#, который во всех режимах IEEE 1284 (исключая режим совместимости с SPP) ис$ пользуется для сигнализации наличия данных обратного канала.
Устройства хранения данных
Задача USB для устройств хранения сводится к передаче устройствам команд, определяющих выполняемую операцию, получению от устройства информации о завершении исполнения команды и, наконец, транспортировке хранимых дан$ ных. Спецификация USB для устройств хранения (Mass Storage) определяет не$ сколько подклассов и протоколов. Подкласс определяет содержимое командного блока, протокол — способ транспортировки команд, состояния и данных; подклассы и протоколы независимы (любой формат блока можно доставлять любым транс$

портом). Специальных классовых дескрипторов у устройств хранения нет, но есть два классовых запроса (табл. 16.2).
Таблица 16.2. Классовые запросы к устройствам хранения
Запрос |
bmRequestType |
bRequest |
Применимость |
|
|
|
для протоколов |
|
|
|
|
Get_Max_Lun |
10100001b |
FEh |
50h |
Bulk Only_Mass_Storage_Reset |
00100001b |
FFh |
50h |
ADSC |
00100001b |
00 |
00, 01 |
|
|
|
|
Протокол Bulk Only транспорт (код 50h) применяется в устройствах хранения со скоростями FS и HS, он рекомендован для всех новых разработок. Этот протокол обеспечивает взаимную синхронизацию устройства и хоста, используя никак не син$ хронизируемые (системой USB) потоки независимых каналов Bulk IN и Bulk OUT через пару соответствующих точек. Кроме того, используются два классовых запроса для определения числа доступных логических устройств и сброса интерфейса.
По запросу Get_Max_LUN устройство возвращает байт с максимальным возмож$ ным номером логического устройства (LUN, нумерация с нуля). В запросе в поле wIndex указывается номер интерфейса, wLength = 1.
По запросу Bulk Only_Mass_Storage_Reset выполняется сброс интерфейса, указан$ ного в поле wIndex: точки Bulk IN и Bulk OUT разблокируются, переключатель (Toggle Bit) устанавливается в положение DATA0, интерфейс переводится в со$ стояние ожидания команды, все предыдущие запросы сбрасываются.
Блоки команд и состояний распознаются в последовательности пакетов по фикси$ рованной длине пакета (они всегда ложатся точно в один пакет), сигнатурам и со$ ответствию содержимого полей соглашениям (проверяются и нули в резервных полях). Командный блок длиной до 16 байтов позволяет транспортировать любые наборы команд, используемые в устройствах хранения с традиционными интер$ фейсами (ATA/ATAPI, SCSI и другие). Протокол передачи команд и данных ра$ ботает следующим образом:
хост посылает командный блок CBW (Command Block Wrapper) «в обертке» — пакет фиксированной длины (31 байт), включающий:
4$байтную сигнатуру (dCBWSignature = 43425355h);
4$байтный тег (dCBWTag), который служит для пометки и идентификации ответного блока состояния;
4$байтное поле длины передаваемых данных (dCBWDataTransferLength);
байт флагов (bmCBWFlags), в котором используется лишь бит 7, указываю$ щий направление передачи данных остальные биты — нули;
байт с 4$битным номером логического устройства, к которому обращается данный командный блок (bCBWLUN в битах [3:0], остальные биты — нули);
байт длины командного блока (bCBWCBLength в битах [4:0], допустимо 1–16, остальные биты — нули);
собственно командный блок (CBWCB) длиной от 1 до 16 байт и заполнитель, доводящий длину этого поля до 16 байт;
устройство подтверждает успех приема ACK’ом, анализирует пакет и, если «оберт$ ка» корректна и командный блок действителен, выполняет прием или передачу заказанного блока данных. Обмен данными инициирует хост в соответствии с посланной командой (данные могут и не предполагаться, тогда указывается их нулевая длина);
на каждый командный блок (после успешного исполнения или отвергая его) устройство отвечает блоком состояния CSW в аналогичной «обертке» — 13$бай$ тным пакетом, содержащим:
4$байтную сигнатуру (dCSWSignature = 53425355h);
4$байтный тег (dCSWTag), привязывающий этот ответ к конкретному команд$ ному блоку;
4$байтное поле (dCSWDataResidue), в котором указывается разность между заказанным (и переданным) количеством данных и количеством, реально отработанным устройством;
байт состояния (bCSWStatus) выполнения команды: 00 — успешно, 01 — от$ каз (failed), 02 — фазовая ошибка (нарушение последовательности команд и данных).
Если устройство получает недопустимый командный пакет, оно его отвергает со$ ответствующим CSW (с байтом состояния 01). На каждый выпущенный команд$ ный пакет хост должен получить ответ — состояние с тем же тегом (теги назначает хост, устройство ими только метит ответ). Фазовая ошибка (нарушение этой по$ следовательности) отрабатывается с помощью классового запроса «сброс интер$ фейса», передаваемого через EP0, — интерфейс переходит в исходное состояние (готов принять командный блок). Этим же сбросом устраняется возможная бло$ кировка конечных точек.
Протокол Control Bulk Interrupt (CBI, коды 00 и 01) предназначен только для FS$ устройств, для новых разработок он не рекомендуется, на HS его применение не допускается. Для доставки команд служит классовый запрос ADSC (Access_Device_ Specific_Command), передаваемый через точку EP0 (Основной канал сообщений). Для доставки данных используются точки Bulk IN и Bulk OUT. Через эти же точки (включая и EP0) передается и информация о состоянии завершения команды; в про$ токоле с кодом 00 для передачи состояний выделяется дополнительная точка Interrupt IN с длиной пакета 2 байта.
Командный блок передается в фазе данных транзакции управления, реализующей запрос ADSC. В запросе в поле wIndex указывается номер интерфейса, wLength — длина командного блока. Положительное подтверждение (ACK) на стадии состоя$ ния означает, что команда успешно принята (этот ответ может быть задержан на неопределенное время посылкой NACK’ов).
Состояние выполнения команды может передаваться несколькими способами:
по прерыванию: когда у устройства есть что сообщит о состоянии выполнения команды, оно в транзакции с точкой Interrupt IN возвращает два байта, трактов$ ка которых зависит от подкласса устройства;