USB FPGA固件ISP1362:枚举,清空OUT数据包



我正在编写固件,以便将FPGA连接到Mat Lab进行数据采集和控制。到目前为止,设置是FPGA(DE2-115)->ISP 1362->PC(Windows)。我正在使用一个通用的"USB视图"程序来查看设备描述符。

我撞到墙了。USB主机重置我的设备,然后发送一个8字节的"获取描述符"请求。我用18个字节填充IN EP并验证它。大约20?微秒后,ISP1362标记中断,IN EP的状态为空(数据已发送,对吗?)。然后再过几微秒,OUT EP中就出现了零长度的数据包。然后我清除OUT EP。A大约220微秒后,主机再次重置我的设备。那个该死的零长度数据包是什么意思?

总结:接收总线重置,接收获取描述符,发送描述,接收空包,接收总线重置。

还有,有没有一个程序可以让我看看这个程序的原始数据交互?我想看看主机(PC)看到了什么。

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        ;

您看到的是在状态阶段从主机返回的握手(即零长度数据包)。

发送18字节描述符后,主机会向您的设备发回ACK。此ACK在状态寄存器中生成一个中断,您可以读取并清除该中断。数据阶段结束,状态阶段开始。主机发送一个OUT令牌和一个空数据包(ZLP),以确认成功接收到该数据。您的设备会发回ACK。这就结束了状态阶段。

查看此网站上的控制传输:http://www.beyondlogic.org/usbnutshell/usb4.shtml

请注意控制传输的格式如下:SETUP(设置)->DATA(数据)->STATUS(状态)。仔细阅读"大局"部分,其中每个阶段被分解为单独的数据包。

最新更新