пояснительная записка (1231539), страница 7
Текст из файла (страница 7)
ENDP - число 0..15 -адрес конечной точки с которой будет работать хост в текущей транзакции;
CRC5 - контрольная сумма полей ADDR,ENDP
-вычисляется без учёта дополнительных синхробитов Stuffed Bit полученных в результате битстаффинга;
-вычисляется побитовой сверткой данных с полиномом 0x25(100101).
Пакеты типа IN, OUT, SETUP являются заголовками многопакетной транзакции с обменом данными. Они содержат поля адреса устройства для транзакции и номера Endpoint, с которым будет обмен. Целостность пакетов удостоверяет поле CRC5.
Data Packets (DP) - пакет данных.
Это пакет с данными, которыми обмениваются хост и конечная точка устройства. В транзакции он следует за маркерным пакетом.
DATA - данные для обмена между хостом и конечной точкой в байтах. Число байт данных называют полезной нагрузкой пакета (Payload);
CRC16 - контрольная сумма поля DATA:
-вычисляется без учёта дополнительных синхробитов Stuffed Bit полученных в результате битстаффинга;
-вычисляется побитовой сверткой данных с полиномом 0x18005(11000000000000101).
Пакеты типа DATA содержат поле данных и поле контроля целостности данных CRC16. Стандарт ограничивает максимальную разрешенную длину данных: 8 байт для несконфигурированных устройств, 64 байта для устройств Low Speed, 1023 байта для устройств Full Speed и 1024 байта для устройств High Speed. Устройство может установить свою максимальную длину данных, меньшую разрешенной. Хост обязан поддерживать максимальную разрешенную длину данных.
Start of Frame Packets (SOF) - пакет определяющий начала кадра.
Этот пакет посылается хостом каждую миллисекунду(1000Гц) и обозначает начало нового кадра.
Этот пакет могут принимать все устройства сети, он без адресный.
Это единственный пакет имеющий синхронизацию с часами реального времени.
В пакете присутствует счетчик кадров, который по сути является счетчиком миллисекунд.
Устройства могут синхронизировать свою работу с реальным временем считывая это пакет.
Рис.12 Структура пакета начала кадра.
Frame Number - число 0..2047 -номер кадра(количество миллисекунд). Этот счетчик имеет полный цикл в 2.048 сек;
CRC5 - контрольная сумма полей ADDR,ENDP
-вычисляется без учёта дополнительных синхробитов Stuffed Bit полученных в результате битстаффинга;
-вычисляется побитовой сверткой данных с полиномом 0x25(100101).
Пакет SOF не получается низко скоростными устройствами.
Handshake Packets (HP) -пакет квитирования.
Этим пакетом обычно заканчивается транзакция между хостом и конечной точкой. В нем сообщается о результатах приёма пакета данных.
Пакеты типа ACK, NACK, STALL не содержат никаких дополнительных полей.
Preambule Packets (HP) - преамбула низкоскоростного пакета.
Этот пакет предписывает хабу, работающему на полной скорости, передать следующий за преамбулой пакет на низкой скорости.
После получения сигнала EOP в конце низкоскоростного пакета, хаб должен вернуться на полную скорость
2.7.6 Адрес
Так как USB является сетью с возможностью подключения нескольких устройств, каждому из них при конфигурировании присваивается индивидуальный адрес, размерность которого составляет семь бит. Нулевой адрес зарезервирован, следовательно сеть может единовременно обозначить до 127 устройств. Поле адреса содержат только пакеты TP и DP.
2.7.7 Endpoint
Endpoint - это своеобразный внутренний адрес устройств в устройстве, логическая адресация внутри устройства. Такая внутренняя адресация позволяет распределять потоки данных по разному функционалу внутри самого устройства.
Поле endpoint - четырёхбитное, это позволяет организовать до 16 endpoint, Каждый endpoint может независимо работать как приемный и как передающий, поэтому иногда их насчитывают 32. Поле endpoint содержится только в TP пакетах.
При подключении устройства хаб отправляет запросы к устройству, в ответ на которые устройство обязано передать информацию о задействованных endpoint и их назначении.
В момент подключения в рамках начального конфигурирования устройство обязано передать хосту информацию о задействованных endpoint и их назначении. Эта информация должна согласовываться с соответствующими каналами данных программного драйвера устройства хоста. Обращение к незадействованному endpoint вызывает ответ STALL. Пакеты SETUP могут приходить только на нулевой endpoint.
2.7.8 Запросы устройства (Device Requests)
Спецификацией USB определены некоторые запросы, который хост отправляет устройству и в ответ на которые хост получает некие свойства устройства, называемые дескрипторами.
С помощью запросов выполняются основные операции над устройствами определенные спецификацией:
-
Dynamic Attachment and Removal(Динамическое присоединение и удаление устройств);
-
Address Assignment(Назначение адреса устройству);
-
Configuration(Конфигурация устройства);
-
Data Transfer(Передача данных);
-
Power Management(Управление питанием):
-
Power Budgeting(Планирование мощности потребления);
-
Remote Wakeup(Пробуждение устройства по команде хоста);
-
Request Processing(Выполнение запросов):
-
Request Processing Timing(Контроль времени обработки запросов);
-
Reset/Resume Recovery Time(Возобновление работы по сигналам Reset/Resume);
-
Set Address Processing(Установка адреса устройства);
-
Standard Device Requests(Стандартные запросы устройства);
-
Class-specific Requests(Специфичные запросы класса устройств);
-
Request Error(Запрос об ошибке).
Передаются запросы по нулевому каналу (то есть на нулевую Endpoint) транзакциями SETUP и могут сопровождаться, если необходимо, передачей транзакций DATA (фаза данных).
Если длина блока данных в байтах, передаваемая в фазе данных, т.е. после транзакции SETUP, равна нулю, то фаза передачи данных отсутствует и запрос представлен только транзакцией SETUP.
Длина пакета DATA0 всегда равна 8 байт (в транзакции SETUP)
Все биты байта передаются последовательно, начиная с нулевого.
2.7.9 Дескрипторы устройств
Дескриптор - это определённая структура данных, которую устройство использует для сообщения хосту своих атрибутов.
Стандартом USB определены следующие дескрипторы:
-
дескриптор устройства (Device Descriptor) - описывает общую информацию устройства USB, применяется глобально и во всех конфигурациях. USB устройство имеет только один такой дескриптор;
-
дескриптор конфигурации (Configuration Descriptor) - описывает информацию о конфигурации устройства. Устройство может иметь несколько различных конфигураций, а следовательно и несколько таких дескрипторов;
-
дескриптор интерфейса (Interface Descriptor) - описывает набор конечных точек, включенных в интерфейс для заданной конфигурации. Нулевая конечная точка никогда не включается этот набор;
-
дескриптор конечной точки (Endpoint Descriptor) - этот дескриптор содержит требуемую хостом информацию, для определения требований по пропускной способности каждой конечной точки. Нулевая точка не имеет дескриптора;
-
дескриптор строки (String Descriptor) - описывают характеристики устройства текстовыми строками, удобными для человека. Устройство может их не поддерживать или не иметь вовсе. Требуемый язык дескриптора определяется запрсчиком при его запросе, используя ID (LANGID) определенный Microsoft Windows UNICODE.
Дескриптор конечной точки и интерфейса всегда возвращаются как часть дескриптора конфигурации.
К ним нельзя непосредственно обращаться запросом Get или Set Descriptor.
2.8 Контроллер AVR-USB-MEGA16
Большинство производителей современных ПК отказываются от параллельного порта в пользу последовательного USB порта, не говоря уже о laptop PC, в которых остаются лишь USB, HDMI, VGA и LAN. Поэтому целесообразно разрабатывать устройства, поддерживающие USB интерфейс. Один из вариантов USB контроллера является такой, выполненный на микроконтроллере AT Mega16.
Компания Objective Development [8] в свободном доступе (но есть и платные коммерческий лицензии стоимостью до 500$) распространяет библиотеку V-USB, которая помогает программно реализовать USB протокол low-speed USB устройства на базе AVR микроконтроллера, не используя дополнительных внешних чипов.
Особенности V-USB:
-
полноценное USB 1.1 low-speed устройство, кроме обработки ошибок связи и электрических характеристик;
-
передача до 254 байт информации по умолчанию;
-
поставляется со свободно используемых идентификаторов USB (пара Vendor-ID и Product-ID);
-
работает на любом AVR микроконтроллере с минимум 2 килобайт Flash памяти, 128 байт RAM и тактовой частотой не меньше 12 МГц;
-
может тактироваться 12 МГц, 15 МГц, 16 МГц, 18 МГц или 20 МГц внешним кварцевым резонатором, или 12,8 МГц или 16,5 МГц внутренним RC осциллятором;
-
имеет хорошо прокомментированные примеры на языке C;
-
из аппаратных ресурсов микроконтроллера для реализации протокола USB используется только прерывание INT0;
-
занимает до 1400 байт Flash памяти контроллера.
Библтотека V-USB предназначена для создания прошивок микроконтроллеров, поддерживающих программно реализованный протокол USB, но для общения с таким контроллером с ОС понадобится так называемое ПО хоста. В его создании для упрощения работы программиста помогает другая библиотека libusb-win32 версия 1.2.5.0. Есть и более новые версии, но и этой, для создания ПО хоста AVR-USB-MEGA16 контроллера вполне достаточно. Так же эта библиотека существует для пользователей MAC OS и Linux.
Аппаратная часть USB-контроллера представлена на листе 4 графического материала.
Конденсатор C1 ёмкостью 22 мкФ предназначен для сглаживания высокочастотных помех в линии питания USB хоста и расположен между шиной +5 В и землёй. Параллельно ему расположен ещё один конденсатор C6 номиналом 0,22 мкФ, его предназначение схоже с C1, но уже для низкочастотных помех, на плате его стараются располагать как можно ближе ножкам питания контроллера.
Так как на дифференциальной линии D+, D- протоколом USB требуется напряжение не выше +3,6 В, а на выходе контроллера мы получаем все +5 В, стоят два стабилитрона VD1 и VD2.
Для распознавания системой низкоскоростного USB устройство протоколом USB принято устанавливать подтяжку на питание через резистор 1,5 кОм дифференциальной линии D-, роль которого на данной схеме выполняет резистор R4. Резисторы R2, R3 номиналом по 68 Ом являются согласующими. R5 и R6 имеет такие же номиналы, как и R2, R3, но установлены в RC контур цепи опорного напряжения AVR-микроконтроллера для правильной работы каналов Аналогово-Цифрового Преобразователя (АЦП), находящегося в составе архитектуры самого контроллера, в паре с конденсаторами C4, C5, номиналом 0,22 мкФ.
Через резистор R7, номиналом 10 кОм, подаётся уровень логической единицы на вход RESET микроконтроллера.
Для тактирования предназначен внешний осциллятор на базе кварцевого резонатора G1, частотой 16 МГц и двух конденсаторов C2, C3 ёмкостью по 22 пкФ.
Все порты микроконтроллера ATmega16 могут работать не только на ввод/вывод информации. Они также могут нести дополнительные функции, привязанные к внутренней архитектуре ядра AVR. Стоит отметить, что PB5..PB7 – используются для реализации SPI протокола, PC3..PC5 – для JTAG (Joint Test Action Group) отладчика, PD2,PD4 – для данных интерфейса USB. В таблице 2.5 представлено краткое описание этих функций [9].
Таблица 2.5 – Дополнительные функции контроллера AVR MEGA 16
Имя порта | Описание возможностей |
PA0 | ADC0 - эта ножка может работать как входной канал 0 АЦП. Каналы ADC1..ADC7 несут аналогичную функцию |
PA1 | ADC1 - входной канал 1 АЦП |
PA2 | ADC2 - входной канал 2 АЦП |
PA3 | ADC3 - входной канал 3 АЦП |
PA4 | ADC4 - входной канал 4 АЦП |
PA5 | ADC5 - входной канал 5 АЦП |
PA6 | ADC6 - входной канал 6 АЦП |
PA7 | ADC7 - входной канал 7 АЦП |
Продолжение таблицы 2.5
Имя порта | Описание возможностей |
PB1 | T1 - эта ножка может работать как тактовый вход для таймера/счетчика 1 (Timer/Counter1 External Counter Input) для измерения и подсчета импульсов |
PB2 | AIN0, INT2. Эта ножка может выполнять две дополнительные функции. AIN0 - положительный вход аналогового компаратора (Analog Comparator Positive Input). INT2 - вход для внешнего прерывания 2 (External Interrupt 2 Input) |
PB3 | AIN1, OC0. Эта ножка может выполнять две дополнительные функции. AIN0 - отрицательный вход аналогового компаратора (Analog Comparator Negative Input). OC0 - выход сигнала события совпадения таймера/счетчика 0 (Timer/Counter0 Output Compare Match Output) |
PB4 | SS, этот вывод может работать как аппаратная выборка внешних подчиненных устройств, подключенных к интерфейсу SPI (SPI Slave Select Input) |
PC0 | SCL, это сигнал тактов для внешнего подчиненного устройства шины I2C/TWI (Two-wire Serial Bus Clock Line) |
PC1 | SDA, это двунаправленный сигнал данных для внешнего подчиненного устройства шины I2C/TWI(Two-wire Serial Bus Data Input/Output Line) |
PC6 | TOSC1, вход для подключения резонатора для дополнительного генератора (Timer Oscillator Pin 1). Если ножка используется в режиме TOSC1, то этот вывод работает как вход внутреннего инвертирующего усилителя (сюда подключают кварцевый или керамический резонатор) |
PC7 | TOSC2, выход для подключения резонатора для дополнительного генератора (Timer Oscillator Pin 2). Если ножка используется в режиме TOSC2, то этот вывод работает как выход внутреннего усилителя (сюда подключают кварцевый или керамический резонатор) |
PD0 | RXD, вход последовательного порта UART (USART Input Pin). Обычно используется как порт ввода данных от внешних устройств, или для отладки |
PD1 | TXD, выход последовательного порта UART (USART Output Pin). Обычно используется для отладки, или как как порт вывода данных для внешних устройств |
PD3 | INT1 - вход для внешнего прерывания 1 (External Interrupt 1 Input) |
PD5 | OC1A - сигнал события совпадения A таймера 1 (Timer/Counter1 Output Compare A Match Output) |
PD6 | ICP1, вход для захвата внешних импульсов (Timer/Counter1 Input Capture Pin). Может использоваться для измерения длительностей сигнала с помощью таймера 1 |
PD7 | OC2 - сигнал события совпадения таймера 2 (Timer/Counter2 Output Compare Match Output) |
PB0 | T0, XCK. К этой ножке на макетной плате подключен светодиод. Ножка могла бы использоваться как T0 - вход тактового сигнала для таймера 0 (Timer/Counter0 External Counter Input), или как XCK - вход тактов для порта USART (USART External Clock Input/Output) |
2.9 SPI интерфейс
В составе AVR микроконтроллеров имеется модуль последовательного периферийного интерфейса или модуль SPI (serial peripheral interface). Относительно нашего контроллера такой расшит на штурьевую колодку XP5, и используется для загрузки ПО в память микроконтроллера.