龙芯软件开发(36)- USB协议深入分析 返回设备描述符

回应设备描述符
上一次已经介绍怎么样收到主控器的获取设备描述符的数据,这里就解释怎么样发送回应数据给主控器。
先从USB协议里找到标准设备的定义,我把它用C语言定义如下:
typedef struct _USB_DEVICE_DESCRIPTOR {
 BYTE bLength;
 BYTE bDescriptorType;
 WORD bcdUSB;
 BYTE bDeviceClass;
 BYTE bDeviceSubClass;
 BYTE bDeviceProtocol;
 BYTE bMaxPacketSize0;
 WORD idVendor;
 WORD idProduct;
 WORD bcdDevice;
 BYTE iManufacturer;
 BYTE iProduct;
 BYTE iSerialNumber;
 BYTE bNumConfigurations;
} USB_DEVICE_DESCRIPTOR;
返回给主控器的数据结构就是上面的内容,只要把上面的结构填写合适的内容,就可以发送回去给主控器。在我的USB设备里,我把它填写如下的数据:
12 01 10 01 00 00 00 40 00 80 00 80 00 01 04 2C 4A 01
 
看到这串数据是不明白是什么东西的,现在就来仔细地分析它的具体定义。下面就按着一个字段一个字段地分析它。
bLength是本结构的数据长度,这样可以方便以后兼容不同的版本协议。因为不同的结构是不同的长度,这样就可以区分不同的协议了。比如有一天想添加一个字段,那么它的长度就会改变,这时就可以根据不同的长度进行解释不同的协议了。这次返回的结构长度是0x12,也就是18个字节,它的长度是从 bLength长度开始,也就是说是完全整个结构的长度。
 
bDescriptorType是描述符的类型。它的定义跟主控器发下来描述符的类型是一样的,如下:
DEVICE                   1
CONFIGURATION          2
STRING                   3
INTERFACE                4
ENDPOINT                5
DEVICE_QUALIFIER         6
OTHER_SPEED_CONFIGURATION             7
INTERFACE_POWER 1                   8
由于返回的是设备描述符,所以就选择了1,也就是包里显示的第二个字节01。用这个类型来区分不同的描述符。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caimouse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值