USB设备是定义成CDC类,想实现多种功能接口,高速描述符结构体中情况分析如下:
1、设备描述符中bNumConfigurations=1,即高速模式下配置描述符为1个(还有设备限定描述符);
2、配置描述符中bNumInterfaces=2,定义了两个接口描述符;
3、但在整个高速描述符结构体中有三个接口描述符:IAD、通信类接口描述符请求、数据类接口描述符请求,IAD的功能定义为CDC;通信类接口描述符中的bInterfaceClass为CDC,bInterfaceSubClass为ACM;数据类接口描述符中的bInterfaceClass为CDC类;
4、CDC功能描述符;
5、三个端点描述符,其中一个为第一个备用设置断点;
USB设备接到LinuxPC的信息如下:
usb 2-4: new high-speed USB device number 5 using ehci-pci
usb 2-4: config 1 interface 0 altsetting 0 endpoint 0x84 has an invalid bInterval 255, changing to 11
usb 2-4: config 1 interface 1 altsetting 0 bulk endpoint 0x1 has invalid maxpacket 64
usb 2-4: config 1 interface 1 altsetting 0 bulk endpoint 0x82 has invalid maxpacket 64
usb 2-4: New USB device found, idVendor=xxxx, idProduct=xxxx
usb 2-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 2-4: Product: EL Composite device
usb 2-4: Manufacturer: Expres Logic
usb 2-4: SerialNumber: 0001
cdc_acm 2-4:1.0: ttyACM0: USB ACM device
usbcore: registered new interface driver cdc_acm
cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
在应用程序中也是将USB设备注册成了CDC类,想请教:
1)配置描述符中指定两个接口,为什么会有三个接口描述符?IAD的作用只是为了实现一个设备具有多功能接口的吗?
2)可以修改接口描述符来指定这个设备的接口实现一种设备功能,即一个接口实现通信类设备,一个接口实现Image图像设备?
|