Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учеб Пособ_Гончаровский.doc
Скачиваний:
1316
Добавлен:
29.03.2015
Размер:
3.65 Mб
Скачать

1.9.4.2. Интерфейс Open Host Controller для usb

Спецификация интерфейса Open Host Controller (OpenHCI) для USB является описанием на уровне регистров хост контроллера шины USB, который в свою очередь описывается спецификацией USB выпущенной корпорацией Intel. Интерфейс OpenHCI позволяет разрабатывать хост контроллеры с общим программным интерфейсом, тем самым освобождаясь от написания и распространения драйверов к ним. Целью разработки OpenHCI было подобрать оптимальный баланс между сложностью оборудования и программного обеспечения, так, чтобы хост-контроллер шины USB, соответствующий спецификации OpenHCI, был наиболее простым и при этом имел максимум функционала [15]. Современные μC поддерживают OpenHCI.

На рис. 44 показаны четыре основные составляющие USB. Это Клиентское ПО (Драйвер USB), Драйвер Хост Контроллера (HCD), Хост Контроллер (HC), и USB-устройство. Драйвер USB и Драйвер Хост Контроллера реализован на программном уровне. Хост Контроллер и USB-устройство реализован на аппаратном уровне. Спецификация OpenHCI определяет интерфейс между драйвером хост контроллера и хост контроллером, а так же описывает основы работы каждого из них.

Существует два канала взаимодействия между хост контроллером и драйвером хост контроллера (рис. 45). Первый канал - это набор регистров хост контроллера. Хост-контроллер является ведомым на этом канале (сам только принимает события). В набор регистров входят управляющие и статусные регистры, а так же регистры, в которых хранятся указатели на списки дескрипторов. В наборе регистров есть регистр, хранящий указатель на область в разделяемой памяти, называемую Host Controller Communications Area (HCCA). Область HCCA является вторым каналом взаимодействия. Хост контроллер является ведущим на этом канале (сам только генерирует события). HCCA содержит указатели на заголовки списков дескрипторов конечных точек типа Interrupt, указатель на заголовок очереди обработанных дескрипторов передачи (done queue), а так же статусную информацию, связанную с обработкой признака начала кадра.

Рис. 44. Основные составляющие системы USB

Рис. 45. Каналы взаимодействия

Основными структурами данных при взаимодействии с интерфейсом хост контроллера являются дескрипторы конечных точек (ED) и дескрипторы передачи (TD).

Драйвер хост контроллера ассоциирует с каждой конечной точкой, доступной в системе, дескриптор конечной точки. Дескриптор конечной точки содержит информацию, необходимую хост контроллеру для связи с ассоциированной конечной точкой. Дескриптор включает в себя поля, содержащие максимальный размер пакета, адрес конечной точки, её скорость и направление потока данных. Дескрипторы конечных точек хранятся в списках.

С каждой конкретной конечной точкой связана очередь дескрипторов передачи. Дескриптор передачи содержит информацию, описывающую пакеты данных, которые будут переданы конечной точке. Дескриптор передачи включает в себя поля, содержащие информацию о триггере данных, адрес буфера в разделяемой памяти и коды статуса завершения передачи. Каждый дескриптор передачи содержит информацию, которая описывает один или несколько пакетов данных. Буфер данных каждого дескриптора передачи может иметь размер в диапазоне от 0 до 8192 байт и иметь максимум один переход через границу физической страницы памяти. Дескрипторы передачи связаны между собой с помощью очередей, обрабатываемых по принципу: первым пришёл, первым обработан.

Каждый тип передачи данных имеет свой собственный список дескрипторов конечных точек, подлежащих обработке. На рис. 46 приведена типичная структура списков, которая отображает взаимосвязи между структурами данных.

Указатели на заголовки списков конечных точек типа bulk и control хранятся в регистрах хост контроллера. Драйвер хост контроллера инициализирует эти указатели до того, как хост-контроллер осуществит доступ к ним. Если эти указатели понадобится обновить, драйверу хост контроллера, возможно, потребуется остановить обработку хост контроллером определенного списка, обновить указатель, и снова включить хост-контроллер.

Рис. 46. Типичная структура списков

Указатель на заголовок списка дескрипторов конечных точек типа interrupt (вернее, массив указателей) хранится в HCCA. На заголовок списка дескрипторов конечных точек типа isochronous не существует отдельного указателя. Первый дескриптор конечной точки типа isochronous помещается в список сразу после последнего дескриптора конечной точки типа interrupt. Всего доступно 32 указателя на заголовки списков типа interrupt, которые организованны в виде массива. Указатель на заголовок списка, используемый в конкретном кадре, определяется с помощью последних 5 битов счетчика кадров. Эти 5 бит используются в качестве смещения в массиве указателей на заголовки списков.

Дескрипторы конечных точек типа interrupt организованы в древовидную структуру, где указатели на списки являются листьями. Требуемый интервал обслуживания конечной точки типа interrupt достигается за счет размещения дескриптора конечной точки на соответствующей глубине в дереве. Наибольшая частота опроса достигается ближе к корню дерева, так как чем ближе узел к корню, тем больше в нем сходится списков. Чтобы увеличить частоту опроса конечной точки, необходимо поместить её в большем количестве списков.