Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: USB bulk_out transfer кратный 64 байтам
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
ahulap
Контроллер - LPC1343. Программа посылает команды в устройство используя libusb: usb_bulk_write(handle, EP_OUT, buffer, size, 0);
В устройстве размер команды заренее не известен, оно собирает всю команду и только после этого отдает на обработку. Окончание передачи я определял по короткому пакету (<64 байт).
Но, как оказалось, если размер передачи например равен 64 байтам, то приходит только один пакет 64 байта и все. ZLP нет.
Возможно ли как-то разрешить данную проблему без доработки компьютерной программы? Только вычислением размера команды по ее коду и прочим параметрам, идущим в первом пакете?

Похоже такая же проблема была и с контроллером SAM3U, там прием осуществлялся по DMA и DMA transfer завершался только при приеме короткого пакета. Но там все разрешилось просто переходом на размер эндпоинта в 512 байт (high speed), что было гарантированно больше любой передачи, т.е. все пакеты были короткими. Хочется учесть данную особенность при разработке следующих устройств.

Заранее спасибо.
misyachniy
Цитата(ahulap @ Dec 5 2011, 13:28) *
Но, как оказалось, если размер передачи например равен 64 байтам, то приходит только один пакет 64 байта и все. ZLP нет.


В стандарте USB версии 2.0 предусмотрена на аппаратном уровне передача пакета с маркером "Это последний пакет.".
Если на аппаратном уровне нельзя прочитать этот флаг, то нужно решать программно.
Использовать протоколы в которых начало и окончание макета имеет уникальную комбинацию байт.
Например SSP протокол: www.utias-sfl.net/docs/ssp2.1e.pdf
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.