Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AT91SAM7S256 USB
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
amw
Подключаю к хосту, получаю запрос на device descriptor, отсылаю, получаю адрес, подтверждаю и устанавливаю.
Если я правильно понял спецификацию, то должен прийти запрос GetConfiguration, но вместо него приходит запрос на device descriptor. Устройство его отсылает. И так семь раз.
Потом хост ругается, на ошибку чтения конфигурации.
Поскольку с SAM-BA в том же устройстве хост прекрасно работает, то ошибка в программе. Вопрос какая?
Спецификацию перечитал несколько раз, проверял программу, сравнивал с AT91 USB Framework - Core 1.01 + CDC 1.0.

Дескриптор:
Код
static const struct device_descriptor dev_descr = {
    .bLength = sizeof(struct device_descriptor),
    .bDescriptorType = USB_DESC_DEVICE,
    .bcdUSB = 0x0200,
    .bDeviseClass = 0x02,
    .bDeviceSubClass = 0,
    .bDeviceProtocol = 0,
    .bMaxPacketSize0 = 8,
    .idVendor = 0x1111,
    .idProduct = 0x2222,
    .bcdDevice = VERSION_CODE,
    .iManufacturer = 1,
    .iProduct = 2,
    .iSerialNumber = 3,
    .bNumConfigurations = 1
};

Setup пакеты:
Код
1. 80 06 00 01 00 00 40 00
2. Пакет SetAddress не приводится
3. 80 06 00 01 00 00 12 00
4. 80 06 00 01 00 00 12 00
5. 80 06 00 01 00 00 12 00
6. 80 06 00 01 00 00 12 00
7. 80 06 00 01 00 00 12 00
8. 80 06 00 01 00 00 12 00
9. 80 06 00 01 00 00 12 00

Лог хоста (Linux):
Код
new full speed USB device using uhci_hcd and address 32
usb 4-1: unable to read config index 0 descriptor/start
usb 4-1: chopping to 0 config(s)
PM: Adding info for usb:4-1
PM: Adding info for No Bus:usbdev4.32_ep00
usb 4-1: no configuration chosen from 0 choices

В Windows ситуация отличается только количеством запросов.

Чего я не учел?
ivstech
Первое, что приходит в голову - размер пакета равен размеру конечной точки. В этом случае нужно отсылать также пакет нулевой длины. В примерах от атмела это не делается
amw
Цитата(ivstech @ Apr 13 2007, 18:19) *
Первое, что приходит в голову - размер пакета равен размеру конечной точки. В этом случае нужно отсылать также пакет нулевой длины. В примерах от атмела это не делается

Я про это знаю, но тут случай другой. Размер EP = 8, размер дескриптора = 18, первый запрос на 64, а последующие на 18.
amw
Покопался детальнее в принимаемых и отсылаемых пакетах.
Появились новые вопросы.
Как я понимаю, конец передачи/приема - это получение пакета с длиной, меньше размера конечной точки. Это так? Это единственный признак?
После отсылки дескриптора при подключении получаю от хоста пакет нулевой длины. Это подтверждение от хоста (ACK пакет)? Пакет приходит не как SETUP.
Присвоение адреса подтверждаю пакетом нулевой длины.
Получаю от хоста SETUP пакет нулевой длины. Это как объяснить?
amw
Проблема устранилась путем отсылки пакета нулевой длины после каждого отсылаемого пакета. Независимо от длины пакета.
По моему это не нормально! Но пока работает. Что-бы это значило???
Dron_Gus
некоторое уточнение к посту ivstech. Посылать пакет нулевой длинны надо не только когда пакет = конечной точке, но и когда кратен, т.е. 16, 32,...
amw
Цитата(Dron_Gus @ Apr 16 2007, 14:58) *
некоторое уточнение к посту ivstech. Посылать пакет нулевой длинны надо не только когда пакет = конечной точке, но и когда кратен, т.е. 16, 32,...

Да, знаю.
Но приходится посылать нулевые пакеты при любой, в том числе не кратной длине пакета. Например для дескриптора длина пакета == 18, а размер конечной точки == 8.
Таким образом посылаются пакеты длиной 8, 8, 2.
А приходится посылать четыре пакета с длинами 8, 8, 2, 0.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.