如何实现自定义 USB Bulk 批量传输设备厂商自定义设备的开发除了要完成设备硬件以及固件程序开发外,还需要开发操作系统端 的设备驱动程序,还要开发设备应用程序。 厂商自定义 USB 设备的端点可以自由地选择采用哪种传输方式(control transaction 控制传 输、bulk transaction 批量传输、interrupt transaction 中断传输、isochronous transfer 实时传 输),当然控制端点只能用控制传输。标准设备类可能只支持除了控制端点外的其中一种 传输方式,比如前面的 HID 实例,除了控制端点外,只支持中断传输,而由于中断传输有 其固有特点,有时并不能满足应用要求,如传输速率方面,由于决定因素在于中断时间, 但中断时间最快是 1ms,而批量传输可以随时发生(受带宽限制),理论上传输速率可以 比中断传输快。 Freescale USB Stack 4.1.1 协议栈(http://www.freescale.com/usb)已经提供了标准的设备类驱 动。为了实现自定义的 bulk 批量传输设备,我们可以参考现有的 CDC 通信设备类,在 CDC 的源代码基础上进行修改,快速实现自定义 USB Bulk 批量传输设备。1. 修改设备的 PID 和 VID对于不同产品需要不同的 PID 和 VID,可用通过修改设备描述符中的 PID 和 VID 字段。 修改文件 usb_descriptor.c 的设备描述符: const uint8 Device_Descriptor[18]= { 0x12, //bLength 域,描述符的长度:18 字节 0x01, //bDescriptorType 域,描述符类型:0x01 表示本描述符为设备描述符) 0x00,0x02, //bcdUSB 域,USB 规范版本号(采用 BCD 码):2.0 0xFF, //bDeviceClass 域,设备类代码,0xFF 为自定义设备类 0x00, //bDeviceSubClass 域,设备子类代码 0x00, //bDeviceProtocol 域,设备协议代码(0x00 表示不使用任何设备类协议) 0x20, //bMaxPacketSize0 域,端点 0 支持最大数据包的长度:32 字节 0xA2,0x15, //idVendor 域,供应商 ID(VID) 0x0F,0xA5, //idProduct 域,产品 ID(PID) 0x00,0x00, //bcdDevice 域,设备版本号(采用 BCD 码) 0x01, //iManufacturer 域,供应商的字符串描述符索引:1 0x02, //iProduct 域,产品的字符串描述符索引:2 0x03, //iSerialNumber 域,设备序号的字符串描述符索引:3 0x01 //bNumConfigurations 域,该 USB 设备支持的配置数目:1 个 };2. 修改端点描述符端点是设备与主机之间进行数据传输的逻辑接口,除配置使用的端点 0(控制端点, 一般一个设备只有一个控制端点)为双向端口外,其它均为单向。端点描述符描述了 数据的传输类型、传输方向、数据包大小和端点号(也可称为端点地址)等。 除了描述符中描述的端点外,每个设备必须要有一个默认的控制型端点,地址为 0, 它的数据传输为双向,而且没有专门的描述符,只是在设备描述符中定义了它
2023-07-20 05:24:471