这是整合的一个多功能接口设备的描述符,实现CDC+Mass Storage两个设备功能,描述符如下:
unsigned char device_framework_high_speed[] = {
/* Device descriptor */
0x12,
0x01,
0x00, 0x02,
0xEF,
0x02,
0x01,
0x40,
0x84, 0x84,
0x00, 0x01,
0x00, 0x01,
0x01,
0x02,
0x03,
0x01, //bNumConfigurations:configuration 1
/* Device qualifier descriptor */
0x0a, 0x06, 0x00, 0x02, 0x02, 0x00, 0x00, 0x40,
0x01, 0x00,
/* Configuration 1 descriptor */
0x09,
0x02,
0x59, 0x00, //wTotallength=97
0x03, //bNumInterfaces<CDC Interfaces=2 , Mass Storage Interface=1>
0x01, //bConfigurationValue:Enable configuration 1
0x00,
0x80,
0x32,
/* Interface association descriptor of CDC. */
0x08,
0x0b,
0x00, //bFirstInterface<Interface 0, 1, 2>
0x02, //bInterfaceCount
0x02, //bFunctionClass:2--CDC
0x02,
0x00,
0x00,
/**********************************The Descriptor of CDC *************************************/
/* Communication Class Interface Descriptor Requirement */
0x09,
0x04,
0x00, //bInterfaceNumber<Interface 0>
0x00,
0x01, //bNumEndpoints:one Endpoint(0x84)
0x02, //bInterfaceClass:2--CDC
0x02,
0x01,
0x00,
/* Header Functional Descriptor */
0x05,
0x24,
0x00,
0x10, 0x01, //bcdCDC
/* ACM Functional Descriptor */
0x04,
0x24,
0x02,
0x0f,
/* Union Functional Descriptor */
0x05,
0x24,
0x06,
0x00, //bMasterInterface
0x01, //bSlaveInterface0:Data Class Interface
/* Call Management Functional Descriptor */
0x05,
0x24,
0x01,
0x03,
0x01,
/* Endpoint 1 descriptor */
0x07,
0x05,
0x81, //bEndpointAddress:IN, EndpointID=1
0x03, //bmAttributes:Interrupt
0x08, 0x00, //wMaxPacketSize
0x0b, //bInterval
/* Data Class Interface Descriptor Requirement */
0x09,
0x04,
0x01, //bInterfaceNumber<Interface 1>
0x00,
0x02, //bNumEndpoints:two endpoints for IN_endpoints and OUT_endpoints
0x0A, //bInterfaceClass:0A--CDC
0x00,
0x00,
0x00,
/* First alternate setting Endpoint 2 descriptor */
0x07,
0x05,
0x02, //bEndpointAddress:OUT, EndpointID=2
0x02, //bmAttributes:Bulk
0x00, 0x02, //wMaxPacketSize:0200h=512--high_speed
0x00,
/* Endpoint 3 descriptor */
0x07,
0x05,
0x83, //bEndpointAddress:IN, EndpointID=3
0x02, //bmAttributes:Bulk
0x00, 0x02, //wMaxPacketSize:0200h=512--high_speed
0x00,
/************************************************************************************************************/
#if 0
/* Interface association descriptor of Mass Storage. */
0x08,
0x0b,
0x01, //bFirstInterface
0x01, //bInterfaceCount
0x08, //bFunctionClass:08--MASS STORAGE Class
0x06,
0x00,
0x00,
#endif
/*******************************The descriptor of Mass Storage ************************************/
/* Mass Storage Class Interface Descriptor Requirement */
0x09,
0x04,
0x02, //bInterfaceNumber<Interface 2>
0x00, //bAlternateSetting
0x02, //bNumEndpoints:two endpoints for IN and OUT
0x08, //bInterfaceClass:08--MASS STORAGE Class
0x06, //bInterfaceSubClass:SCSI transparent
0x50,
0x00,
/* Mass Storage Class Endpoint 4 Descriptor Requirement */
0x07,
0x05,
0x84, //bEndpointAddress:IN, EndpointID=4
0x02, //bmAttributes:Bulk
0x00, 0x02, //wMaxPacketSize:0200h=512--high_speed
0x00,
/* Mass Storage Class Endpoint 5 Descriptor Requirement */
0x07,
0x05,
0x05, //bEndpointAddress:OUT, EndpointID=5
0x02, //bmAttributes:Bulk
0x00, 0x02, //wMaxPacketSize:0200h=512--high_speed
0x00,
/*********************************************************************************************/
};
将该描述符在目标平台运行并接入Linux主机,用“dmesg”查看打印信息如下:
[ 1925.208169] usb 2-4: new high-speed USB device number 5 using ehci-pci
[ 1925.341185] usb 2-4: config 1 has an invalid descriptor of length 7, skipping remainder of the config
[ 1925.341203] usb 2-4: config 1 interface 2 altsetting 0 has 0 endpoint descriptors, different from the interface descriptor's value: 2
[ 1925.342182] usb 2-4: New USB device found, idVendor=8484, idProduct=0100
[ 1925.342190] usb 2-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1925.342197] usb 2-4: Product: EL Composite device
[ 1925.342203] usb 2-4: Manufacturer: Expres Logic
[ 1925.342209] usb 2-4: SerialNumber: 0001
[ 1925.380015] cdc_acm 2-4:1.0: ttyACM0: USB ACM device
[ 1925.380545] usbcore: registered new interface driver cdc_acm
[ 1925.380548] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
[ 1925.392882] usb-storage 2-4:1.2: USB Mass Storage device detected
[ 1925.394796] usb-storage: probe of 2-4:1.2 failed with error -5
[ 1925.394834] usbcore: registered new interface driver usb-storage
[ 1925.437745] usbcore: registered new interface driver uas
第二条和第三条报错怎么改也都有......还有Mass Storage能被检测到,但失败了,根据“probe of 2-4:1.2 failed with error -5”报错信息也没查到,是因为缺少处理Mass Storage接口的命令吗?因为这个是自己添加的,CDC是原先USB协议栈里自带定义好的.......
大伙帮忙看看,拜谢了!
|