实现USB串口(参考圈圈教材)
1、修改Device Descriptor,需在设备描述符中指定设备类型,bDeviceClass字段 = 0x02(通信设备类的类代码),子类与所使用的协议都指定为0。
修改PID/VID。
2、修改Configuration Descriptor,需具备两个接口,CDC类接口和数据类接口。
- 在CDC设备中,必须有一个CDC接口,以供数据类接口衣服,CDC接口使用标准接口描述符,有一个中断输入端点,用来报告状态。
/*******************CDC类接口描述符*********************/
//bLength字段。接口描述符的长度为9字节。
0x09,
//bDescriptorType字段。接口描述符的编号为0x04。
0x04,
//bInterfaceNumber字段。该接口的编号,第一个接口,编号为0。
0x00,
//bAlternateSetting字段。该接口的备用编号,为0。
0x00,
//bNumEndpoints字段。非0端点的数目。CDC接口只使用一个中断
//输入端点。
0x01,
//bInterfaceClass字段。该接口所使用的类。CDC类的类代码为0x02。
0x02,
//bInterfaceSubClass字段。该接口所使用的子类。要实现USB转串口,
//就必须使用Abstract Control Model(抽象控制模型)子类。它的
//编号为0x02。
0x02,
//bInterfaceProtocol字段。使用Common AT Commands(通用AT命令)
//协议。该协议的编号为0x01。
0x01,
//iConfiguration字段。该接口的字符串索引值。这里没有,为0。
0x00,
- CDC类中,不具备HID描述符和报告描述符,而是功能描述符(类特殊接口描述符),用来描述接口功能。
/***************以下为功能描述符****************/
/********* Header Functional Descriptor ********/
//bFunctionLength字段。该描述符长度为5字节
0x05,
//bDescriptorType字段。描述符类型为类特殊接口(CS_INTERFACE)
//编号为0x24。
0x24,
//bDescriptorSubtype字段。描述符子类为Header Functional Descriptor
//编号为0x00。
0x00,
//bcdCDC字段。CDC版本号,为0x0110(低字节在先)
0x10,
0x01,
/**** Call Management Functional Descriptor ****/
//bFunctionLength字段。该描述符长度为5字节
0x05,
//bDescriptorType字段。描述符类型为类特殊接口(CS_INTERFACE)
//编号为0x24。
0x24,
//bDescriptorSubtype字段。描述符子类为Call Management
//functional descriptor,编号为0x01。
0x01,
//bmCapabilities字段。设备自己不管理call management
0x00,
//bDataInterface字段。没有数据类接口用作call management
0x00,
/*** Abstract Control Management Functional Descriptor ***/
//bFunctionLength字段。该描述符长度为4字节
0x04,
//bDescriptorType字段。描述符类型为类特殊接口(CS_INTERFACE)
//编号为0x24。
0x24,
//bDescriptorSubtype字段。描述符子类为Abstract Control
//Management functional descriptor,编号为0x02。
0x02,
//bmCapabilities字段。支持Set_Line_Coding、Set_Control_Line_State、
//Get_Line_Coding请求和Serial_State通知
0x02,
/*** Union Functional Descriptor **/
//bFunctionLength字段。该描述符长度为5字节。
0x05,
//bDescriptorType字段。描述符类型为类特殊接口(CS_INTERFACE)
//编号为0x24。
0x24,
//bDescriptorSubtype字段。描述符子类为
//Union functional descriptor,编号为0x06。
0x06,
//MasterInterface字段。这里为前面编号为0的CDC接口。
0x00,
//SlaveInterface字段,这里为接下来编号为1的数据类接口。
0x01,