如何修改USBCDC成为自定义USBBulk批量传输设备(精)

2026/4/29 21:35:56

如何实现自定义 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, 它的数据传输为双向,而且没有专门的描述符,只是在设备描述符中定义了它的最大 包长度。主机通过此端点向设备发送命令,获得设备的各种描述符的信息,并通过它 来配置设备。

/* structure containing details of all the endpoints used by this device */ USB_EP_STRUCT ep[CDC_DESC_ENDPOINT_COUNT] =

{ {

CIC_NOTIF_ENDPOINT, USB_INTERRUPT_PIPE, USB_SEND,

CIC_NOTIF_ENDP_PACKET_SIZE } , {

DIC_BULK_IN_ENDPOINT, USB_BULK_PIPE, USB_SEND,

DIC_BULK_IN_ENDP_PACKET_SIZE } , {

DIC_BULK_OUT_ENDPOINT, USB_BULK_PIPE, USB_RECV,

DIC_BULK_OUT_ENDP_PACKET_SIZE } };

3. 修改字符串描述符

字符串描述符是一种可选的 USB 标准描述符,描述了如制商、设备名称或序列号等信 息。如果一个设备无字符串描述符,则其它描述符中与字符串有关的索引值都必须为 0。字符串使用的是 Unicode 编码。

uint8_t USB_STR_2[USB_STR_2_SIZE+USB_STR_DESC_SIZE] = { sizeof(USB_STR_2,

USB_STRING_DESCRIPTOR, 'B',0, 'U',0, 'L',0, 'K',0, ' ',0, 'T',0, 'R',0, 'A',0, 'N',0, 'S',0,


如何修改USBCDC成为自定义USBBulk批量传输设备(精).doc 将本文的Word文档下载到电脑
搜索更多关于: 如何修改USBCDC成为自定义USBBulk批量传输设备(精 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219