Полная версия этой страницы:
USB CDC
Добрый день, возникла проблема по данной реализации.
Написал все с нуля. Порты открываются данные передаются. Смотрю usbmonitorом(триал) и прогой для работы с ком портом. Так вот...
Когда девайс в хост отправляет меньше 64 байт!!! то транзакция проходит. Когда девайс пытается отправить больше 64!!! то транзакция не проходит!!! Опытным путем установил что если хочешь передавать больше 64 байт то в конце всего пакета нужно отправить нулевой байт!... Причем нулевой байт обязательно нужно отправить! даже если пакет не кратен размеру конечной точки. Странно... Хост когда отправляет данные вроде не присылает нулевые пакеты... Но это надо проверить...
Проверил... В транзакции OUT хост присылает нулевой пакет если размер конечной точки кратен 8!!!!....
Alechek
Oct 27 2011, 08:48
микрософтовский CDC вообще чудит с отправкой.
А вообще, по стандарту надо отправлять пустой пакет, если размер пакета равен (кратен) размеру конечной точки. Чтобы контроллер знал, что транзакция завершена.
Но тут проблема в том что в конце транзакции IN, то есть передачи в хост, кратен пакет не кратен пустой пакет в конце пакета отправлять надо...
vicgor
Oct 27 2011, 12:40
Цитата(shrek @ Oct 26 2011, 15:00)

Добрый день, возникла проблема по данной реализации.
Написал все с нуля.
А можно исходник скинуть ?
Исходники
Нажмите для просмотра прикрепленного файлаВот однако хост негодяй

! Он от устройства понимаешь требует нулевой пакет типа конец передачи! А вот сам ничего не присылает! Привязаться не к чему...
Пришлось привязать конец транзакции OUT к прерыванию SOFINT... (Пробовал петлю внутреннюю по интерфейсу сделать).
Обнаружилось что и передачу данных в хост (транзакция IN) тоже необходимо связать с этим же прерыванием. Когда отправляет в хост данные разбивает их на блоки между соседними кадрами! Смотрел USBMonitorом...
Нулевой пакет нужен только если пакет кратен размеру конечной точки. Оказаось что это у меня косяк работы с dual буфером bulk конечной точки.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.