Здравствуйте.
Поправьте меня в процессе отправки дескриптора.
1) Возникает прерывание RXSETUP
2) Принимаем управляющую посылку 8 байт, читаем 2-й байт bRequest и 3-й байт слова wValue.
3) Первым возникает запрос GET_DESCRIPTOR типа "стандартный дескриптор устройства"
4) Начинаем отсылать первые 8 байт дескриптора
5) Ставим флаг TXPKTRDY
6) Ждем флага TXCOMP
7) Отсылаем вторые 8 байт дескриптора
8) Ставим флаг TXPKTRDY
9) Ждем флага TXCOMP
10) Отсылаем последние 2 байта
11) Ставим флаг TXPKTRDY
12) Ждем флага TXCOMP
13) Освобождаем конечную точку
14) Должно возникнуть следующее прерывание RXSETUP с запросом дескриптора конфигурации
Два вопроса:
1) Академический. При считывании управляющей посылки ее поле wLength не 18, а 64 байта. В Атмеловском примере они специально проверяют на это несовпадение и фиксируют его:
Код
if (length > USBGenericDescriptor_GetLength((USBGenericDescriptor *) pDevice)) {
length = USBGenericDescriptor_GetLength((USBGenericDescriptor *) pDevice);
}
Почему такая штука?
2) Практический. Вроде бы отправляю весь дескриптор устройства, но в следующем RXSETUP хост опять требует его же. Так происходит 3 раза, затем хост говорит, что USB устройство работает неправильно. Если хост требует дескриптор устройства снова и снова это значит, что я ему отправляю что-то неправильное? Вроде, все как завещано.