Полная версия этой страницы:
AT91SAM9260-EK usb cdc
Пример работы UDP как Communication Device Class(CDC) запустили. Передача с ПК на МК происходит нормально. Передача наоборот, c МК на ПК происходит если размер пакета не кратен размеру буфера (64 байта). Т.е., если передаю 127 байт, на компьютере принимаю нормально (в Delphi, CreateFile, ReadFile), если передаю 128 (или 64, 512 и т.д.) не получается. На МК вроде все в порядке, подтверждение от хоста есть (флаг UDP_TXCOMP), а на компе ноль реакции. Если кто разбирался с CDC, подскажите, пожалуйста, в чем проблема.
sergeeff
Feb 15 2008, 12:18
Дело не в CDC, а в том, что ты неправильно обрабатываешь прерывания от USB. Если ты передаешь в PC пакет, равный размеру endpoint'a, вырабатывается реально еще одно прерывание, которое ты обязан обработать, чего, по-видимому ты не делаешь.
Добавили для пакета кратного размеру буфера посылку ZeroLength-пакета, и передача пошла. Плохой какой-то пример.
Sergeeff, а почему еще одно прерывание возникает при посылке в размере endpoint-а? Это прерывание endpoint-а? Что-то мы это пропустили... У меня нет еще одного прерывание. Не понятно.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.