Форма входа

Поиск



Счетчик посетителей

Рейтинг@Mail.ru

Разработано jtemplate модули Joomla

Программная реализация шины USB - Продолжение

 

3.8. Формат входного сообщения компьютера

Как сказано выше, USB-устройство использует USB передачу управления. Данный тип передачи использует формат данных, определенный в технических требованиях к USB ([2], стр. 13). В документе описываются подробности передачи управления и, таким образом, того, как данное устройство связывается с компьютером. Микроконтроллер AVR использует управляющую конечную точку IN. Прекрасный пример передачи данных может быть найден на странице 15 в [2]. Передача данных между компьютером и микроконтроллером AVR выполнена в соответствии с данным примером.

В дополнение к фактической передачи управления обсуждается формат поля DATA0/1. Передача управления определяет на своем этапе установки стандартный запрос длиной 8 байт. Данный формат описан на странице 26 в [2] (пакет установки). Там приводится таблица с описанием значения каждого байта. Важно следующее:

Стандартный пакет установки используется для детекции и конфигурации устройства после подачи питания. Данный пакет использует стандартный тип запроса в поле bmRequestType (разряды D6-D5 = 0). Все остальные значения полей (bRequest, wValue, wIndex, wLength) могут быть найдены в технических требованиях USB. Их разъяснение может быть найдено на страницах 27-30 в [2] (стандартные запросы).

Каждый пакет установки содержит 8 байт, которые используются в соответствии с описанием в таблице 1.

Таблица 1. Поля стандартных пакетов установки (передача управления)

Смещение

Поле

Размер

Значение

Описание

0

bmRequestType

1

побитовое отображение

Характеристики запроса

  • D7 - направление данных xfer:
    • 0 = главный устройству;
    • 1 = устройство главному.
  • D6..5 - Тип:
    • 0 = стандарт;
    • 1 = класс;
    • 2 = производитель;
    • 3 = зарезервировано.
  • D4..0 - Получатель
    • 0 = устройство;
    • 1 = интерфейс;
    • 2 = конечная точка;
    • 3 = другое;
  • 4..31 = зарезервировано.

1

bRequest

1

Значение

Специфический запрос

2

wValue

2

Значение

Поле, измеряемое в словах, которое варьируется в зависимости от запроса

4

wIndex

2

Индекс или смещение

Поле, измеряемое в словах, которое варьируется в зависимости от запроса - обычно используется для пересылки индекса или смещения

6

wLength

2

Подсчет

Количество байт для передачи, если наступила фаза данных

Таблица 2. Стандартные запросы устройства

BmRequest-Type

bRequest

wValue

wIndex

wLength

Данные

00000000B
00000001B
00000010B

CLEAR_FEATURE

Переключатель особенностей

Нуль
Интерфейс
Конечная точка

Нуль

Нет

10000000B

GET_CONFIGURATION

Нуль

Нуль

Один

Конфигурационное значение

10000000B

GET_DESCRIPTOR

Тип дескриптора и индекс дескриптора

Нуль или язык ID

Длина дескриптора

Дескриптор

10000001B

GET_INTERFACE

Нуль

Интерфейс

Один

Альтернативный интерфейс

10000000B
10000001B
10000010B

GET_STATUS

Нуль

Нуль
Интерфейс
Конечная точка

Два

Статус устройства, интерфейса или конечной точки

00000000B

SET_ADDRESS

Адрес устройства

Нуль

Нуль

Нет

00000000B

SET_CONFIGURATION

Конфигурационное значение

Нуль

Нуль

Нет

00000000B

SET_DESCRIPTOR

Тип дескриптора и индекс дескриптора

Нуль или язык ID

Длина дескриптора

Дескриптор

00000000B
00000001B
00000010B

SET_FEATURE

Переключатель особенностей

Нуль
Интерфейс
Конечная точка

Нуль

Нет

00000001B

SET_INTERFACE

Альтернативная установка

Интерфейс

Нуль

Нет

10000010B

SYNCH_FRAME

Нуль

Конечная точка

Два

Номер кадра

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

Тип запроса BmRequest-Type

Наименование запрашиваемой функции bRequest

Номер bRequest

Параметр 1wValue

Параметр 2wIndex

wLength

Данные

110xxxxxB

FNCNumberDoSetInfraBufferEmpty

1

Нет

Нет

1

Статус

110xxxxxB

FNCNumberDoGetInfraCode

2

Нет

Нет

1

Статус

110xxxxxB

FNCNumberDoSetDataPortDirection

3

DDRB
DDRC

DDRD
Используемые порты

1

Статус

110xxxxxB

FNCNumberDoGetDataPortDirection

4

Нет

Нет

3

DDRB
DDRC
DDRD

110xxxxxB

FNCNumberDoSetOutDataPort

5

PORTB
PORTC

PORTD
Используемые порты

1

Статус

110xxxxxB

FNCNumberDoGetOutDataPort

6

Нет

Нет

3

PORTB
PORTC
PORTD

110xxxxxB

FNCNumberDoGetInDataPort

7

Нет

Нет

3

PINB
PINC
PIND

110xxxxxB

FNCNumberDoEEPROMRead

8

Адрес

Нет

Длина

байты ЭСППЗУ

110xxxxxB

FNCNumberDoEEPROMWrite

9

Адрес

Значение ЭСППЗУ

1

Статус

110xxxxxB

FNCNumberDoRS232Send

10

Значение байта RS232

Нет

1

Статус

110xxxxxB

FNCNumberDoRS232Read

11

Нет

Нет

2

Статус

110xxxxxB

FNCNumberDoSetRS232Baud

12

Мл. байт скорости связи

Ст. байт скорости связи

1

Статус

110xxxxxB

FNCNumberDoGetRS232Baud

13

Нет

Нет

2

Скорость связи

110xxxxxB

FNCNumberDoGetRS232Buffer

14

Нет

Нет

Длина

Байты RS232 из FIFO

110xxxxxB

FNCNumberDoSetRS232DataBits

15

Значение бит данных

Нет

1

Статус

110xxxxxB

FNCNumberDoGetRS232DataBits

16

Нет

Нет

1

Значение бит данных

110xxxxxB

FNCNumberDoSetRS232Parity

17

Значение паритета

Нет

1

Статус

110xxxxxB

FNCNumberDoGetRS232Parity

18

Нет

Нет

1

Значение паритета

110xxxxxB

FNCNumberDoSetRS232StopBits

19

Значение стоп-бит

Нет

1

Статус

110xxxxxB

FNCNumberDoGetRS232StopBits

20

Нет

Нет

1

Значения стоп-бит

Режим передачи управления используется для пользовательской связи, реализованной в программе как специальные функции. Запрос производителя используется в поле bmRequestType (разряды D6-D5 = 2). Здесь все следующие поля (bRequest, wValue, wIndex) могут модифицироваться в соответствии с целями программиста. В нашей реализации поле bRequest используется для задания номера функции, а следующие поля - для задания параметров функции. Первый параметр задается в слоте wValue, а второй - в позиции wIndex.

Рассмотрим пример записи в ЭСППЗУ. В качестве номера функции выбирается bRequest = 9. Поле wValue используется для задания адреса ЭСППЗУ, а записываемое значение (данные ЭСППЗУ) указываются в поле wIndex. В соответствии с этим получаем следующую функцию: EEPROMWrite(Address, Value).

Если пользовательских функций недостаточно, то достаточно добавить номер функции и тело требуемый функции в программу. В качестве методики можно использовать существующие встроенные функции в программе (см. исходный код).

Главный шины USB (компьютер) также связывается с устройством посредством передач управления IN. Главный отправляет устройству 8-байтный IN-пакет данных в формате определенном выше (номер функции и параметры), а затем устройство отвечает запрошенными данными. Размер запрашиваемых данных ограничен в программе в некоторых случаях до 255 байт, но основное ограничение выполняется драйвером устройства на стороне управляющего компьютера. Существующий драйвер поддерживает 8-байтную длину ответов в запросах, относящихся к типу запросов производителя.

3.9. Создание собственной программы

Пользователи могут добавлять новые функции и расширять функциональные возможности устройства. В программе имеется 3 примера добавления новых функций: DoUserFunctionX (X=0,1,2). Изучите данные примеры, чтобы понять, как добавить похожие расширенные функции. Содержимое функций зависит только от требований устройства.

Имя идентификации и устройства, представленное на стороне устройства, может быть изменено в программе микроконтроллера. Данное имя хранится в программе в виде строки и может быть заменено на любую другую строку. Однако данные имена рекомендуется изменять вместе с USB PID (идентификатор продукции) и VID (идентификатор производителя) для корректного распознавания в целевой системе. VID вместе с PID должны быть уникальными для заданного типа устройства. Таким образом, рекомендуется, при изменении функциональных возможностей устройства, изменять PID и/или VID. Идентификатор производителя зависит от производителя USB-устройства и должен быть определен USB-организацией (более подробно смотри в [1]).

Каждый производитель имеет собственный идентификатор и, следовательно, его значение не может быть изменено на другое несоответствующее значение. Однако идентификатор продукции зависит только от выбора производителя, а назначением PID является распознавание различных устройств одного и того же производителя. В данных рекомендациях по применению установлены VID 0x03EB и PID 0x21FF (идентификатор Atmel). Нельзя использовать данный идентификатор производителя в своей целевой системе.

Книга по микроконтроллерам