Прошивка USB FPGA ISP1362: перечисление, пустой пакет OUT

Я пишу прошивку для сопряжения ПЛИС с Mat-Lab для сбора и контроля данных. На данный момент это FPGA (DE2-115) -> ISP 1362 -> ПК (Windows). Я использую стандартную программу "USB View" для просмотра дескрипторов устройства.

Я ударил стену. Хост USB сбрасывает мое устройство, а затем отправляет 8-байтовый запрос "Get Descriptor". Я заполняю IN EP 18 байтами и проверяю его. Около 20? Через микросекунды ISP1362 помечает прерывание, и состояние IN EP таково, что оно пустое (данные отправлены, верно?). Затем через несколько микросекунд в OUT EP появляется пакет нулевой длины. Затем я очищаю OUT EP. После 220 микросекунд хост снова перезагрузит мое устройство. Что означает этот чертов пакет нулевой длины?

Суммируйте: Получите Сброс Шины, Получите Дескриптор Получения, Отправьте Описание, Получите Пустой Пакет, Сброс Шины Получения.

Кроме того, есть ли программа, которая позволит мне взглянуть на взаимодействие необработанных данных этого? Я хочу видеть то, что видит хост (ПК).

bLength             =   8'h12        ;
bDescriptorType     =   8'h01        ;
bcdUSB              =   16'h0200     ;
bDeviceClass        =   8'h00        ;
bDeviceSubClass     =   8'h00        ;
bDeviceProtocol     =   8'h00        ;
bMaxPacketSize0     =   8'h40        ;
idVendor            =   16'h067B     ;
idProduct           =   16'h2303     ;
bcdDevice           =   16'h0400     ;
iManufacturer       =   8'h01        ;
iProduct            =   8'h02        ;
iSerialNumber       =   8'h00        ;
bNumConfigs         =   8'h01        ;

1 ответ

То, что вы видите, - это рукопожатие (то есть пакет нулевой длины) от хоста на этапе состояния.

После отправки 18-байтового дескриптора хост отправляет ACK обратно на ваше устройство. Этот ACK генерирует прерывание в регистре состояния, который вы читаете и очищаете. Этап данных завершен, и начинается этап состояния. Хост отправляет маркер OUT вместе с пустым пакетом (ZLP) для подтверждения успешного получения этих данных. Ваше устройство отправляет ACK обратно. Это завершает стадию статуса.

Посмотрите контрольные переводы на этом сайте: http://www.beyondlogic.org/usbnutshell/usb4.shtml

Обратите внимание, что передача управления имеет следующий формат: SETUP -> DATA -> STATUS. Внимательно прочитайте раздел "Большая картина", где каждый этап разбит на отдельные пакеты.

Другие вопросы по тегам