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

2830.Встроенные микропроцессорные системы

..pdf
Скачиваний:
41
Добавлен:
15.11.2022
Размер:
52.65 Mб
Скачать

рис. 42 приведены временные диаграммы операций записи и чтения. Первый байт кадра состоит из 7-битового адреса ведомого и бита R/W типа операции. Значение следующего бита (ACK) = 0 выставляет ведомый, распознавший свой адрес. При записи ведущий в ответ выставляет байт данных (старшими разрядами вперед). Следующим битом (ACK) = 0 ведомый подтверждает принятый байт. В случае операции чтения бит R/W = 1 и вслед за ACK ведомый выставляет на линию SDA байт данных, который следующим битом подтверждает ведущий.

Рис. 40. Взаимодействие через интерфейс I2C

Рис. 41. Условия начала и конца кадра интерфейса I2C

Рис. 42. I2C: а – операция записи; б – операция чтения

81

1.9.4.Шина USB

1.9.4.1.Введение в USB

Последовательная шина USB (universal serial bus) является промышленным стандартом, разработана для подключения среднескоростных и низкоскоростных периферийных устройств и обеспечивает подключение устройств под напряжением, автоматическое распознавание немедленно после подключения, питание маломощных устройств с самой шины, полудуплексный способ обмена [14]. Например, для USB 2.0 полная скорость передачи данных составляет 0,5...12 МБ/с (аудио-, видеоустройства), низкая – 10...1500 КБ/с (клавиатуры, мыши, джойстики) и высокая – 25...480 МБ/с (видеоустройства, устройства хранения информации). Максимальная длина кабеля для полной скорости передачи – 3 м, а для низкой – 5 м. Максимальное количество подключаемых устройств – 127.

Топология шины USB – «монтажная звезда» (tiered star) или дерево, наращиваемое с помощью концентраторов (hub). USB хост-порт (один на всю шину) содержит корневой хаб и приемопередатчики (трансиверы) для подключения новых хабов или устройств (device).

Кабель состоит из 4 проводников: Vbus – питание +5 В, GND – земля и свитые D– и D+ – дифференциальная пара для полудуплексной передачи данных.

Определение скоростных характеристик устройства и самого факта подключения его на шину производится с помощью имеющихся в устройстве подтягивающих резисторов, подключенных к линии D– или D+. Подключение к линии D+ сигнализирует подключение полноскоростного устройства, а к D– низкоскоростного.

Данные передаются самосинхронизирующимся кодом NRZIspace с бит-стаффингом. Текущая 1 передается инверсией потенциала предыдущего бита, текущий 0 передается потенциалом предыдущего бита. Длинные последовательности нулей исключаются из передачи вставкой 1 после n подряд идущих 0.

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

Интерфейс USB полностью контролируется хостом (ведущим) шины, который может быть только один. Устройства USB (ведомые)

82

только отвечают на запросы хоста и не могут по собственной инициативе начать передачу.

Каждое устройство на интерфейсе USB может иметь несколько конечных точек (ep – end point). Эти пронумерованные точки являются окончаниями логических каналов данных между хостом и устройством. Таким образом, между хостом и устройством реализуется многоканальная передача данных.

При подключении устройства к шине хост присваивает ему номер. Номера ep задаются при изготовлении устройства.

Любое устройство должно поддерживать ep 0 (DCP – default control pipe), так как это средство конфигурирования устройства по умолчанию в USB после включения или получения сигнала сброса по шине.

Конечные точки имеют собственные характеристики, их необходимо знать клиентскому программному обеспечению (ПО) для определения типа соединения: частота передачи, требования по пропускной способности канала, номер ep, требования по обработке ошибок, максимальный размер пакета, отправляемого/принимаемого ep, тип и направление передачи.

Передача по USB состоит из пакетов, отмеченных специальными кодами, называемыми идентификаторами пакетов (PID). PID показывает, какого типа пакет был передан. Рис. 43 иллюстрирует передачу по USB от хоста к устройству.

Рис. 43. Пример передачи по USB от хоста к устройству: а – пакет маркера; б – пакет данных; в – пакет подтверждения; г – пакет маркера; д – пакет данных; е – пакет подтверждения

83

Пакет а – признак передачи, индицируемый OUT PID. Признак индицирует, что данные от хоста будут переданы по шине. Пакет б содержит данные, о чем говорит PID DATA1. Пакет в – квитирование (handshake), отправляется устройством с использованием ACK PID для подтверждения хосту, что устройство получило данные без ошибок. Вторая передача начинается с еще одного пакета OUT – г. Далее следуют данные д, на этот раз с PID DATA0. В конце передачи устройство опять подтверждает успешную передачу, передавая ACK PID.

Наличие DATA1 и DATA0 (два циклических номера пакетов) обусловлено коррекцией ошибок. Пакет ACK – это сигнал хосту, что периферия получила данные без ошибок (поля CRC в пакетах используются для определения ошибок). Каждая сторона устанавливает переменную, изменяющуюся между DATA1 и DATA0. Значение этой переменной сравнивается с полем PID, приходящим с данными, DATA1 или DATA0. При передаче данных хост или устройство посылает перемежающиеся пакеты DATA1–DATA0. Путем сравнения идентификатора DATA со значением внутренней переменной хост или устройство могут определить поврежденный пакет.

Признак SETUP предназначен для передачи типа CONTROL. Они предваряют 8 Б данных, из которых периферия определяет запросы хоста.

Признак SOF приходиткаждую миллисекунду, обозначая кадр USB. Пакеты согласования:

ACK означает, что данные приняты без ошибок;

NAK означает «занято», «передайте еще раз»;

STALL означает, что произошло нечто непредвиденное. Устройство посылает STALL , показывая, что не поняло запрос;

PRE предшествует передаче на низкой скорости.

Передаче данных хосту предшествует пакет IN. Если хост не посылает этот запрос, данные навсегда останутся в буфере устройства.

Пакет SOH обеспечивает распределение времени и включает в себя 11-разрядный счетчик кадров.

Возможны четыре типа передач:

– передача типа Bulk – «прорывная», пакетами по 8, 16, 32, 64 Б. Доставка информации гарантирована по причине автоматической пересылки поврежденных данных. Хост позволяет передавать пакеты bulk, когда шина освобождается. Этот тип передачи применяется для

84

принтера, сканера или модема. Данные, передаваемые таким способом, имеют встроенный контроль передачи, обеспечиваемый пакетами согласования;

передача типа Interrupt похожа на bulk, но передача происходит только для IN-каналов. Блок данных может иметь длину от 1 до 64 Б. Каналы interrupt типа имеют ассоциированный временной интервал, через эти интервалы хост посылает признак IN;

передача типа Isochronous используется для потоковой передачи, критичной ко времени информации, такой как аудиоили видеоинформация. В каждом кадре USB определенная жесткая часть времени отводится для передачи типа isochronous. Такая передача не имеет признаков согласования и не имеет пересылок. Передается всегда PID DATA0;

передача типа Сontrol используется для конфигурирования и посылки команд устройству. При передаче типа сontrol обеспечивается наилучшая защита от ошибок. Хост резервирует часть каждого фрейма для передачи сontrol. Передачи сontrol состоят из 2 или 3 стадий. Стадия SETUP содержит 8 Б управляющих данных. Необязательная часть DATA содержит дополнительные данные. Стадия STATUS позволяет устройству индицировать благополучное завершение процесса конфигурирования.

1.9.4.2. Интерфейс OpenHCl для USB

Спецификация интерфейса open host controller (OpenHCI) для USB

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

На рис. 44 показаны четыре основные составляющие USB. Это клиентское ПО (драйвер USB), драйвер хост-контроллера (HCD), хостконтроллер (HC) и USB-устройство. Драйвер USB и драйвер хост-

85

контроллера реализован на программном уровне. Хост-контроллер

иUSB-устройство реализованы на аппаратном уровне. Спецификация OpenHCI определяет интерфейс между драйвером хост-контроллера

ихост-контроллером, а также описывает основы работы каждого из них.

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

Существует два канала взаимодействия между хост-контроллером и драйвером хост-контроллера (рис. 45). Первый канал – это набор регистров хост-контроллера. Хост-контроллер является ведомым на этом канале (сам только принимает события). В набор регистров входят управляющие и статусные регистры, а также регистры, в которых хранятся указатели на списки дескрипторов. В наборе регистров есть регистр, хранящий указатель на область в разделяемой памяти, называе-

мую Host сontroller сommunications аrea (HCCA). Область HCCA явля-

ется вторым каналом взаимодействия. Хост-контроллер является ведущим на этом канале (сам только генерирует события). HCCA содержит указатели на заголовки списков дескрипторов конечных точек типа interrupt, указатель на заголовок очереди обработанных дескрипторов передачи (done queue), а также статусную информацию, связанную с обработкой признака начала кадра.

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

Драйвер хост-контроллера ассоциирует с каждой конечной точкой, доступной в системе, дескриптор конечной точки. Дескриптор конеч-

86

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

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

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

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

87

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

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

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

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

88

Вопросы для самоконтроля

1.К архитектуре какого типа (гарвардской или фон Неймана) относится процессор, изображенный на рис. 4?

2.Какие элементы входят в понятие архитектуры процессора?

3.В чем разница между регистрами адреса, данных и общего назначения?

4.Какую цель преследовали разработчики архитектуры некоторых процессоров, когда ввели механизм регистровых окон?

5.С какими особенностями процессоров связано понятие когерентности памяти?

6.Как соотносятся прерывания и исключения?

7.Зачем в системе прерываний появилась вторичная система приоритетов?

8.Для каких целей были придуманы механизмы виртуальной памяти и сегментации памяти?

9.В чем особенность коммуникационных процессоров?

10.Какова роль «пузырей» в конвейере?

11.Какой вариант перекрытия внутренних банков SDRAM более эффективный?

12.Какие усовершенствования преобразовали EEPROM-память во флеш-память?

13.В чем отличия блокнотной и кеш-памяти?

14.Чему равно значение параметра Е для кеш-памяти с прямым отображением?

15.На что направлено обеспечение когерентности кеш-памяти?

16.В чем суть различия асинхронных магистралей в манерах Intel

иMotorola?

17.Какую роль в аналого-цифровом преобразователе играет схема выборки/хранения.

18.Как в UART выполняется синхронизация на уровне битов?

19.Возможно ли взаимодействие через интерфейс SPI более двух устройств? Если да, то как?

89

Модуль 2. Разработка устройств ввода-вывода на программируемой логике

1.10. Язык проектирования аппаратуры VHDL

1.10.1. Реконфигурируемая логика

Уже отмечалось, что во многих случаях полностью заказные СБИС (ASIC) дорогие, а решения, основанные на программной реализации, медленные или энергоемкие. Реконфигурируемая логика обеспечивает решение задачи для случаев, если алгоритмы могут быть эффективно реализованы с помощью заказных СБИС. Такие решения дают почти такое же быстродействие, как и ASIC, но зато реализованные функции могут быть легко изменены конфигурационными данными. Поэтому реконфигурируемая логика находит применение вследующих областях:

быстрое создание прототипа. Современные ASIC очень слож-

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

малый объем приложений. Если ожидаемый объем рынка мал для оправдания реализации приложения в виде ASIC, а программная реализация медленная или неэффективная, тогда выбор останется за реконфигурируемой логикой;

системы реального времени. Временные характеристики проектов на реконфигурируемой логике обычно хорошо определены. Поэтому решения получаются с предсказуемым временем выполнения;

микропроцессорные системы. Для встроенных микропроцес-

сорных систем могут потребоваться нестандартные устройства вводавывода, интерфейсы или реализация некоторых функций с большим быстродействием.

СБИС с названием FPGA (field programmable gate array – програм-

мируемая пользователем вентильная матрица) – наиболее общая форма

90