Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Шины.PCI,.USB.и.FireWire

.pdf
Скачиваний:
59
Добавлен:
19.03.2016
Размер:
6 Mб
Скачать

Таблица 15.8 (продолжение)

Смещение

Назначение

(длина)

 

 

 

 

Биты 9:8 — Asynchronous Schedule Park Mode Count, число успешных

 

транзакций из HS очереди, которые контроллер может выполнять

 

до продолжения прохода по асинхронному плану

 

Бит 7 — Light Host Controller Reset, сброс хост контроллера

 

без затрагивания портов, относящихся к компаньонам (необязательно)

 

Бит 6 — Interrupt on Async Advance Doorbell, программный запрос

 

контроллеру на выработку прерывания по очередному продвижению

 

по асинхронному плану

 

Бит 5 — Asynchronous Schedule Enable, разрешение исполнения

 

асинхронного плана

 

Бит 4 — Periodic Schedule Enable, разрешение исполнения

 

периодического плана

 

Биты 3:2 — Frame List Size, размер списка кадров: 00 — 1024 элемента,

 

01 — 512, 10 — 256, 11 — резерв

 

Бит 1 — HCRESET (Host Controller Reset), программный сброс контроллера

 

(аналогично аппаратному), бит обнуляется контроллером по завершении

 

сброса

 

Бит 0 — RS (Run/Stop), пуск/останов исполнения транзакций. После

 

обнуления контроллер должен через 16 микрокадров остановить

 

все транзакции

04h

USBSTS, регистр состояния USB

 

Биты [31:16] — резерв

 

Бит 15 — Asynchronous Schedule Status, реальное текущее состояние

 

разрешения асинхронного плана (может отставать от команды смены)

 

Бит 14 — Periodic Schedule Status, реальное текущее состояние

 

разрешения периодического плана (может отставать от команды смены)

 

Бит 13 — Reclamation, признак не пустого асинхронного плана.

 

Обнуляется, когда контроллер встречает заголовок очереди

 

с установленным флагом H, устанавливается в «1» при исполнении

 

любой транзакции асинхронного плана. Если при обнуленном бите

 

Reclamation контроллер встречает заголовок очереди с флагом H,

 

он останавливает обход асинхронного плана

 

Бит 12 — HCHalted, состояния останова контроллера

 

Биты [11:6] — резерв

 

Бит 5 — Interrupt on Async Advance, признак прерывания по продвижению

 

асинхронного плана

 

Бит 4 — Host System Error, признак системной ошибки контроллера

 

(как устройства PCI)

 

Бит 3 — Frame List Rollover, признак оборота по списку кадров

 

Бит 2 — Port Change Detect, обнаружена смена состояния порта

 

Бит 1 — USBERRINT (USB Error Interrupt), признак завершения транзакции

 

по ошибке USB

 

Бит 0 —USBINT (USB Interrupt), признак завершения транзакции, для которой

 

предписана генерация прерывания

08h

USBINTR, регистр разрешения прерываний USB:

 

Биты [31:6] — резерв

 

Бит 5 — Interrupt on Async Advance Enable, разрешение прерывания

 

по продвижению асинхронного плана

 

Бит 4 — Host System Error Enable, разрешение прерывания по системной

 

ошибке контроллера

 

Бит 3 — Frame List Rollover Enable, разрешение прерывания

 

по обороту списка кадров

 

 

Смещение

Назначение

(длина)

 

 

 

 

Бит 2 — Port Change Interrupt Enable, разрешение прерывания по смене

 

состояния порта

 

Бит 1 — USB Error Interrupt Enable, разрешение прерывания по ошибке

 

USB

 

Бит 0 — USB Interrupt Enable, разрешение прерывания по выполнению

 

транзакций

0Ch

FRINDEX, индекс кадра. Инкрементируется с каждым микрокадром, биты

 

[N:3] используются как текущий индекс в списке кадров

10h

CTRLDSSEGMENT, старшие биты 64 битного адреса (адрес 4G сегмента,

 

содержащего все структуры данных и регистры EHC)

14h

PERIODICLISTBASE, базовый адрес списка кадров (биты [11:0] нулевые —

 

список должен быть выровнен по границе станицы 4 Кб)

18h

ASYNCLISTADDR, очередной адрес асинхронного списка, указывает

 

на следующий заголовок очереди в асинхронном плане (биты [4:0] — резерв)

1C 3Fh

Резерв

40h

CONFIGFLAG, флаг конфигурирования: бит 0 устанавливается в 1, когда ПО

 

завершает конфигурирование EHC (по этому флагу включается управление

 

маршрутизацией портов от EHC, при нулевом значении порты безусловно

 

подключены к своим контроллерам компаньонам).

 

Биты [31:1] не используются

44h…

PORTSC(n), управление и состояние n го порта корневого хаба:

…40h+4×n

Биты [31:23] — резерв

 

Бит 22 — WKOC_E (Wake on Over current Enable) — разрешение реакции

 

на перегрузку по току как на пробуждающее событие

 

Бит 21 — WKDSCNNT_E (Wake on Disconnect Enable) — разрешение

 

пробуждения по отключению

 

Бит 20 —WKCNNT_E (Wake on Connect Enable) — разрешение пробуждения

 

по подключению устройства

 

Биты [19:16] — Port Test Control, управление режимом тестирования:

 

0000 — рабочий режим, 0001 — Test J_STATE, 0010 — Test K_STATE, 0011 —

 

Test SE0_NAK, 0100 — Test Packet, 0101 — Test FORCE_ENABLE

 

Биты 15:14 — Port Indicator Control, управление индикатором порта:

 

00 — отключен, 01 — янтарный, 10 — зеленый, 11 — неопределено

 

Бит 13 — Port Owner, признак владельца порта: 1 — порт подключен

 

к контроллеру компаньону (определено подключение устройства не HS

 

или EHC не сконфигурирован)

 

Бит 12 — PP (Port Power), питание порта (если PPC=1): 0 — выключено, 1 —

 

включено

 

Биты [11:10] — Line Status, текущее состояние логических уровней

 

на линиях D+ (бит 11) и D (бит 10)

 

Бит 9 — резерв

 

Бит 8 — Port Reset, сбос порта, устанавливается программно,

 

сбрасывается контроллером

 

Бит 7 — Suspend, приостановка порта

 

Бит 6 — Force Port Resume, возобновление порта

 

Бит 5 — Over-current Change, признак срабатывания токовой защиты

 

(сбрасывается записью «1»)

 

Бит 4 — Over-current Active, состояние защиты (1 — питание отключено

 

по перегрузке)

продолжение

Таблица 15.8 (продолжение)

Смещение Назначение (длина)

Бит 3 — Port Enable/Disable Change, признак отключения порта по ошибке, зафиксированной хабом (сбрасывается записью «1»)

Бит 2 — Port Enabled/Disabled, разрешение запрет порта (программно можно только запретить, разрешается по сбросу)

Бит 1 — Connect Status Change, признак смены состояния подключения Бит 0 — Current Connect Status, текущее состояние подключения

Формат элемента списка кадров (Frame List Element Pointer) приведен на рис. 15.11. Здесь Frame List Link Pointer — указатель на дескриптор изохронной передачи или заголовок очереди (для прерываний); если бит T = 1 (Terminate), то указатель не используется. Поле Typ описывает тип структуры, на которую ссылается указа$ тель: 00 — iTD, 01 — QH, 10 — siTD, 11 — FSTN.

Рис. 15.11. Формат элемента списка кадров для EHC

Дескриптор изохронной передачи iTD (Isochronous Transfer Descriptor) относится к точкам HS$устройств, его формат приведен на рис. 15.12. Первое двойное слово по формату совпадает с элементом списка кадров. Далее следует 8$элементный список дескрипторов транзакций, выполняемых в каждом из восьми микрокадров (серым цветом выделены поля, модифицируемые хост$контроллером). В следующих семи двойных словах содержатся адреса физических страниц, в которых может рас$ полагаться буфер для транзакций, и описание конечной точки. В этом описании:

поле Status отражает состояние выполнения транзакции:

бит 31 — Active, активность, устанавливается драйвером как признак необхо$ димости исполнения, сбрасывается контроллером по исполнении транзакции;

бит 30 — Data Buffer Error, ошибка буфера данных (несвоевременность доставки данных в/из памяти);

бит 29 — Babble Detected, «болтливость», обнаруженная при исполнении транзакции;

бит 28 — Transaction Error (XactErr), ошибка USB при выполнении транз$ акции (только для транзакций IN).

поле Transaction X Length задает число переданных байтов (0–3072). Для транз$ акций IN драйвер устанавливает ожидаемое число, контроллер его меняет на реальное число принятых байтов;

бит IOC (Interrupt On Complete) заказывает прерывание по исполнению;

поле PG (Page Select) задает номер страницы буфера (0–6), из которого берут$ ся старшие (31:12) биты адреса для формирования стартового адреса буфера данной транзакции;

поле Transaction X Offset задает смещение начала буфера X$транзакции от$ носительно выбранной страницы;

поля Buffer Pointer (Page n) задают физические адреса страниц 0–7;

поле EndPt задает номер конечной точки;

поле I/O задает направление: 0 — OUT, 1 — IN;

поле Device Address задает адрес устройства;

поле Maximum Packet Size — максимальный размер пакета для точки (1–1024), в транзакции IN используется как порог для определения «болтливости» уст$ ройства;

поле Mult задает число транзакций за один микрокадр (00 — резерв).

Рис. 15.12. Формат дескриптора изохронной передачи EHC

Дескриптор расщепленной изохронной транзакции siTD (Split$transaction Isochro$ nous Transfer Descriptor) относится к точкам FS$устройств, его формат приведен на рис. 15.13. Первое двойное слово по формату совпадает с элементом списка кад$ ров. Поля I/O, EndPt, Device Address описывают координаты и направление ко$ нечной точки.

Поля Hub Addr и Port Number задают адрес расщепляющего транзакцию хаба и но$ мер порта.

Битовые поля μFrame S-mask и μFrame C-mask задают маски для микрокадров, в которых планируются транзакции SS и CS (транзакция в микрокадре выполня$ ется при единичном значении маски). В поле μFrame C-prog-mask контроллер от$ мечает кадры, в которых произошли транзакции завершения.

Адрес буфера для начала транзакции задается полями Buffer Pointer (Page 0) и Current offset, при переходе на другую физическую станицу в качестве ее ад$ реса используется поле Buffer Pointer (Page 1). Бит P определяет номер используе$ мой страницы. Ожидаемый размер пакета задается в поле Total Bytes to Transfer,

контроллер этот размер заменит реальным. Бит IOC (Interrupt On Complete) зака$ зывает прерывание по исполнении.

Поле TP (Transaction Position) — позиция текущей HS$транзакции: 00 — All, HS$ транзакция содержит все данные FS$транзакции (не более 188 байт), 01 — Begin, первый пакет для FS$транзакции, 10 —Mid, промежуточный, 11 — End, последний HS$пакет для FS$транзакции.

Поле T-Count (Transaction Count), число HS$транзакций, необходимых для вы$ полнения FS$транзакции (1–6).

Состояние выполнения транзакции определяется полем Status:

бит 7 — Active, активность, устанавливается драйвером как признак необходи$ мости исполнения, сбрасывается контроллером по исполнении или по ошибке;

бит 6 — ERR, признак получения одноименного ответа от транслятора транзак$ ций;

бит 5 — Data Buffer Error, ошибка буфера данных (несвоевременность достав$ ки данных в/из памяти);

бит 4 — Babble Detected, «болтливость», обнаруженная при исполнении тран$ закции;

бит 3 — Transaction Error (XactErr), ошибка USB при выполнении транзак$ ции (только для транзакций IN);

бит 2 — Missed Micro-Frame, пропуск микрокадра (по вине контроллера), в ко$ тором должно было быть завершение;

бит 1 — SplitXstate (Split Transaction State), состояние (фаза) расщеплен$ ной транзакции: 0 — SS, 1 — CS;

бит 0 — резерв.

Поле si-TD Back Pointer является обратным указателем на декриптор si-TD (если в том же двойном слове бит T = 1, указатель не используется).

Рис. 15.13. Формат дескриптора расщепленной изохронной передачи EHC

Дескриптор передачи — элемент очереди qTD (Queue Element Transfer Descriptor) имеет формат, приведенный на рис. 15.14. Поле Next qTD Pointer указывает на следующий qTD (если T = 0), к которому следует перейти после нормальной отра$ ботки передачи. Поле Alternate Next qTD Pointer позволяет указать на qTD,

к которому следует перейти в случае приема короткого пакета. Ожидаемая длина передачи задается полем Total Bytes to Transfer, по окончании в этом поле ока$ жется реальная длина. Адрес буфера для начала транзакции задается полями Buffer Pointer (Page 0) и Current offset, по мере продвижения контроллер меняет зна$ чение поля C_Page, определяющего номер физической страницы. Бит IOC задает прерывание по выполнению. Поле PID задает тип маркера в транзакциях: 00 — OUT, 01 — IN, 10 — SETUP, 11 — резерв. Бит DT — текущее значение Data Toggle для данной передачи, В поле CErr драйвер заносит допустимое число повторов (из$за ошибок) в каждой транзакции данной передачи (0 — число повторов неограничен$ но). Поле Status отражает состояние текущей транзакции передачи:

бит 7 — Active, активность, устанавливается драйвером как признак необходи$ мости исполнения, сбрасывается контроллером по исполнении или по дости$ жении лимита повторов;

бит 6 — Halted — признак получения ответа STALLl;

бит 5 — Data Buffer Error, ошибка буфера данных (несвоевременность достав$ ки данных в/из памяти);

бит 4 — Babble Detected, «болтливость», обнаруженная при исполнении транз$ акции;

бит 3 — Transaction Error (XactErr), ошибка USB при выполнении транзак$ ции (только для транзакций IN);

бит 2 — Missed Micro-Frame, пропуск микрокадра (по вине контроллера), в ко$ тором должно было быть завершение (только для FS$ и LS$точек);

бит 1 — SplitXstate (Split Transaction State), состояние (фаза) расщеплен$ ной транзакции (только для FS$ и LS$точек): 0 — SS, 1 — CS;

бит 0 — P/ERR, для HS$точек при PID Code = 00 (OUT) — состояние протокола Ping (Ping State): 0 — выполнять транзакцию OUT, 1 — PING. Для не$HS то$ чек — ERR, признак получения подтверждения ERR на расщепленную периоди$ ческую транзакцию.

Рис. 15.14. Формат дескриптора передачи элемента очереди (qTD) для EHC

Заголовок очереди QH имеет формат, приведенный на рис. 15.15. Здесь Queue Head Horizontal Link Pointer указывает на следующую структуру по горизонтали, которая может быть заголовком очереди или любым дескриптором изохронной передачи. В последующих двух двойных словах описывается конечная точка, а для

точек LS/FS еще и дополнительные параметры, требуемые для расщепления тран$ закций. Поля Device Address, EndPt и Maximum Packet Length задают адрес уст$ ройства, номер точки и максимальный размер пакета. Поле EPS задает скорость: 00 — LS, 01 — FS, 10 — HS, 11 — резерв. Бит H (Head of Reclamation List Flag) — флаг, которым драйвер помечает один из заголовков очередей из асинхронного плана для определения опустошения всех очередей этого плана (этот флаг вызы$ вает обнуление бита Reclamation в регистре состояния контроллера). Бит DTC управляет переключателем Toggle Bit: 0 — использовать бит DT из данного заго$ ловка очереди QH, 1 — из qTD. Флаг C — признак управляющей точки HS$устрой$ ства. Флаг I (Inactivate on Next Transaction) — программный запрос контроллеру обнулить бит активности при следующей транзакции. Используется только в за$ головке очереди периодических транзакций FS/LS$устройств для обеспечения возможности программной коррекции значений полей S-mask и C-mask в данном заголовке. Поле RL (Nak Count Reload) задает значение счетчика ответов NAK, за$ гружаемое в поле Nak Cnt. Поле Mult задает число транзакций в микрокадре для широкополосных точек (0 — резерв). Поля Port Number, Hub Addr, μFrame S-mask и μFrame C-mask требуются для точек FS/LS$устройств, по назначению они совпа$ дает с одноименными полями siTD.

Поле Current qTD Pointer содержит адрес текущего обрабатываемого qTD, после$ дующие 8 двойных слов являются оверлейной областью передачи (Transfer Overlay), в которую контроллер загружает требуемые параметры для обрабатываемого эле$ мента. Большинство полей по назначению (и положению) совпадает с одноимен$ ными полями qTD, здесь перечислим только особые. Поле NakCnt (Nak Counter) — счетчик ответов NAK или NYET. В поле C-prog-mask контроллер отмечает микро$ кадры, в которых происходили транзакции завершения расщепленных транзак$ ций. В поле FrameTag контроллер записывает тег кадра, в котором производится

Рис. 15.15. Формат заголовка очереди (QH) для EHC

расщепленная транзакция прерывания. В поле S-bytes контроллер указывает число байтов, переданных в расщепленных транзакциях IN и OUT.

Формат узла FSTN (Periodic Frame Span Traversal Node) приведен на рис. 15.16. Здесь Normal Path Link Pointer может указывать на любую структуру данных, а обратный указатель Back Path Link Pointer может указывать только на заголо$ вок очереди.

Рис. 15.16. Формат узла FSTN для EHC

USB без ПК — расширение On The Go

Протокол шины USB ориентирован на сугубо подчиненные отношения: всеми транзакциями со всеми подключенными устройствами управляет хост — как пра$ вило, это компьютер (ПК) с контроллером USB. Никакого равноправия в отноше$ ниях на шине USB быть не может, однако в ряде случаев хотелось бы обойтись и без компьютера. Так, например, напрашивается непосредственное соединение цифровой фотокамеры и фотопринтера, обеспечивающее печать снимков без уча$ стия ПК. Практически все периферийные устройства USB имеют встроенные мик$ роконтроллеры, и функциональные возможности этих микроконтроллеров неук$ лонно растут. Периферийное устройство, имеющее хотя бы простейшие средства диалога с пользователем (дисплей, отображающий пару строк текста, и несколько кнопок управления), вполне может взять на себя управляющие функции в плане организации транзакций USB. Функции такого мини$хоста можно упростить, если ориентироваться на двухточечное соединение пары устройств без промежуточных хабов. В этом случае мини$хосту остается лишь идентифицировать одно подклю$ ченное устройство, и, если ему известно, как это устройство можно использовать, сконфигурировать его. Задача планирования транзакций лишь с одним устрой$ ством гораздо проще общей задачи «большого» хоста и хост$контроллера. Именно на создание таких упрощенных связей пары устройств нацелено расширение OTG (On$The$Go).

Документ On The Go Supplement to USB 2.0 Specification (версия 1.0 вышла в июне 2003 года) определяет дополнения к USB 2.0, необходимые для организации упро$ щенных соединений пары устройств. Большая часть документа посвящена описа$ нию разъемов, и терминология OTG тоже привязана к типам разъемов (собствен$ но, пользователь видит разъемы на устройствах и просто пытается соединить их доступными кабелями). В OTG принято следующее деление устройств:

устройство A (A Device) — устройство, в гнездо которого вставлена вилка типа A (или mini A). Это устройство подает питание (Vbus) на шину и играет роль хос$ та, по крайней мере, в первое время после подключения к другому устройству. По ходу сеанса связи устройство A может передать функции хоста своему парт$ неру, а само стать периферийным (в терминах USB);

устройство B (B Device) — устройство, в гнездо которого вставлена вилка типа B (или mini B). Это устройство при подключении к другому устройству играет роль периферийного (ведомого) устройства USB. Если это устройство являет$ ся двухролевым, то по ходу сеанса связи ему могут быть переданы функции хоста;

двухролевое устройство (Dual role device) — устройство с единственным гнез$ дом типа mini AB, обеспечивающее питание шины с током не менее 8 мА, под$ держивающее FS (дополнительно может поддерживать и HS, а в роли перифе$ рийного устройства — и LS). Это устройство имеет усеченные возможности хоста, список поддерживаемых периферийных устройств, средства диалога с пользователем. Для управления связью устройство должно поддерживать про$ токолы запроса сессий (SRP) и согласования роли хоста (HNP).

Двухролевое устройство может поддерживать и хабы (это усложняет его задачи); однако стандартные хабы USB не позволяют работать протоколам SRP и HNP.

Восновной спецификации USB фигурируют три типа разъемов (гнезд и вилок): стандартные 4$контактные A и B (см. рис. 9.2 на стр. 206), а также 5$контактный mini B. Здесь допустимы кабели с вилкой A на одном конце и вилкой (mini)B на другом, а также неотсоединяемые от устройства кабели с вилкой A. В OTG введе$ ны 5$контактные вилки mini A и универсальное 5$контактное гнездо mini AB (рис. 15.17). Внутри вилки mini$A контакты 4 и 5 электрически соединены, в вилке mini B контакт 4 свободен. Для облегчения различения разъемов принята цвето вая маркировка: разъемы mini A должны быть белого цвета, mini B — черного, а гнезда mini AB — серого.

Вгнездо mini AB двухролевого устройства может вставляться как вилка mini A, так и вилка mini B. При этом контакт 4 (ID) используется для идентификации типа подключенного устройства:

если контакт 4 (ID) соединен с линией GND (сопротивление <10 Ом), то встав$ лена вилка mini A — значит, подключено устройство B; следовательно, двух$ ролевое устройство должно стать хостом;

если контакт 4 (ID) не соединен с линией GND (сопротивление >10 Ом), то встав$ лена вилка mini B — значит, подключено устройство A; следовательно, двух$ ролевое устройство должно стать периферийным.

Протокол запроса сеанса, SRP (Session Request Protocol), предназначен для допол$ нительного энергосбережения: когда устройство A не нуждается в обмене по шине, оно может снять питание Vbus. При этом устройство B все$таки может «попро$

Рис. 15.17. Новые разъемы OTG: а — вилка mini A; б — вилка mini В; в — розетка mini AB

сить внимания» — запросить сеанс связи. Здесь сеансом называется интервал вре$ мени, в течение которого двухролевое устройство подает достаточное (для рабо$ ты) напряжение питания. Запрос может выполняться подачей положительных импульсов либо по линии Vbus, либо по сигнальным линиям (D+ или D ). Устрой ство B должно использовать оба метода подачи запроса, устройство A может рас$ познавать любой из них (как удобнее его разработчику).

Протокол согласования роли хоста, HNP (Host Negotiation Protocol), позволяет устройству A и устройству B поменяться ролями во время сеанса связи (если они оба двухролевые). Протокол может быть инициирован, только если устрой ство A пошлет устройству B специальный разрешающий запрос, предваритель$ но убедившись, что устройство B протокол HNP поддерживает. Возможность поддержки протоколов HNP и SRP сообщается устройством B в специальном дескрипторе OTG$устройства.

Устройство B может запросить управление шиной (стать хостом на время), когда устройство A прекращает активность (переводит шину в состояние покоя). Для этого устройство B отключается от шины (отключает свой «подтягивающий» ре$ зистор от линии D+). Устройство A расценивает это как запрос смены роли и под$ ключает свой «подтягивающий» резистор к линии D+. Теперь устройство B мо$ жет начинать транзакции, управляя шиной. Когда оно захочет отдать управление шиной, оно прекращает активность и подключает свой «подтягивающий» рези$ стор к линии D+. Устройство A это расценивает как возврат управления и отклю$ чает свой «подтягивающий» резистор от линии D+ — исходные роли, определен$ ные по типу разъема, восстановлены.

Дескриптор OTG (длина 3, тип 9) должен присутствовать во всех конфигурациях OTG$устройства, он считывается обычным запросом Get_Descriptor. Дескриптор OTG содержит лишь один байт атрибутов, в котором бит 0 указывает на поддерж$ ку SRP, бит 1 — на поддержку HNP (остальные биты — нулевые).

Убедившись в поддержке протокола HNP, устройство A, еще до выбора конфигу$ рации устройства B, должно сообщить ему свое отношение к HNP. Для этого слу$ жат запросы к устройству Set_Feature (bmRequestType = 00000000b, bRequest = = 3):