Прошивка 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. Внимательно прочитайте раздел "Большая картина", где каждый этап разбит на отдельные пакеты.