2014-08-06 1:12 AM
Hi,
I'd like to implement a composite USB device with MSC + a custom class. I'm using a STM32428I-EVAL board and some code generated by STMCube.
MSC alone is working (with bulk endpoint 0x82 and 0x02). When I add a new interface (a custom class, with one bulk IN endpoint 0x81 as Interface 0), my MSC (as Interface 1) doesn't receive anymore datas on its endpoints.
However, if I put my MSC as Interface 0 and my custom class as Interface 1, the MSC works and the custom class doesn't.
WORKING:
---------------
Device Descriptor:
bcdUSB: 0x0200
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x40 (64)
idVendor: 0x0483 (STMicroelectronics)
idProduct: 0x572A
bcdDevice: 0x0200
iManufacturer: 0x01
0x0409: ''STMicroelectronics''
iProduct: 0x02
0x0409: ''STM32 Mass Storage''
iSerialNumber: 0x03
0x0409: ''00000000001A''
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x01
Device Bus Speed: Full
Device Address: 0x05
Open Pipes: 2
Endpoint Descriptor:
bEndpointAddress: 0x82 IN
Transfer Type: Bulk
wMaxPacketSize: 0x0040 (64)
bInterval: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x02 OUT
Transfer Type: Bulk
wMaxPacketSize: 0x0040 (64)
bInterval: 0x00
Configuration Descriptor:
wTotalLength: 0x0030
bNumInterfaces: 0x02
bConfigurationValue: 0x01
iConfiguration: 0x04
0x0409: ''MSC Config''
bmAttributes: 0xC0 (Bus Powered Self Powered )
MaxPower: 0x32 (100 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x08
bInterfaceSubClass: 0x06
bInterfaceProtocol: 0x50
iInterface: 0x05
0x0409: ''MSC Interface''
0x0409: ''MSC Interface''
Endpoint Descriptor:
bEndpointAddress: 0x82 IN
Transfer Type: Bulk
wMaxPacketSize: 0x0040 (64)
bInterval: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x02 OUT
Transfer Type: Bulk
wMaxPacketSize: 0x0040 (64)
bInterval: 0x00
Interface Descriptor:
bInterfaceNumber: 0x01
bAlternateSetting: 0x00
bNumEndpoints: 0x01
bInterfaceClass: 0x00
bInterfaceSubClass: 0x00
bInterfaceProtocol: 0x00
iInterface: 0x05
0x0409: ''MSC Interface''
0x0409: ''MSC Interface''
Endpoint Descriptor:
bEndpointAddress: 0x81 IN
Transfer Type: Bulk
wMaxPacketSize: 0x0040 (64)
bInterval: 0x00
NOT WORKING:
--------------
Device Descriptor:
bcdUSB: 0x0200
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x40 (64)
idVendor: 0x0483 (STMicroelectronics)
idProduct: 0x572A
bcdDevice: 0x0200
iManufacturer: 0x01
0x0409: ''STMicroelectronics''
iProduct: 0x02
0x0409: ''STM32 Mass Storage''
iSerialNumber: 0x03
0x0409: ''00000000001A''
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x01
Device Bus Speed: Full
Device Address: 0x05
Open Pipes: 1
Endpoint Descriptor:
bEndpointAddress: 0x81 IN
Transfer Type: Bulk
wMaxPacketSize: 0x0040 (64)
bInterval: 0x00
Configuration Descriptor:
wTotalLength: 0x0030
bNumInterfaces: 0x02
bConfigurationValue: 0x01
iConfiguration: 0x04
0x0409: ''MSC Config''
bmAttributes: 0xC0 (Bus Powered Self Powered )
MaxPower: 0x32 (100 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x01
bInterfaceClass: 0x00
bInterfaceSubClass: 0x00
bInterfaceProtocol: 0x00
iInterface: 0x05
0x0409: ''MSC Interface''
0x0409: ''MSC Interface''
Endpoint Descriptor:
bEndpointAddress: 0x81 IN
Transfer Type: Bulk
wMaxPacketSize: 0x0040 (64)
bInterval: 0x00
Interface Descriptor:
bInterfaceNumber: 0x01
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x08
bInterfaceSubClass: 0x06
bInterfaceProtocol: 0x50
iInterface: 0x05
0x0409: ''MSC Interface''
0x0409: ''MSC Interface''
Endpoint Descriptor:
bEndpointAddress: 0x82 IN
Transfer Type: Bulk
wMaxPacketSize: 0x0040 (64)
bInterval: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x02 OUT
Transfer Type: Bulk
wMaxPacketSize: 0x0040 (64)
bInterval: 0x00
Any idea ? Anyone can point me to an existing composite USB device example based on the ST HAL ?
Thanks in advance,
Franck.
#usb #composite #stm32f4
2014-08-06 1:25 AM
Found the answer in an older thread:
''If the VID+PID is already known, Windows loads the known driver regardless whether it's a multi-function device or not. ''
''Windows remembers the Class-Driver-To-VID+PID-binding for the next plug-in event persistently, probably for performance purposes. Therefore, when you swap your Interfaces keeping VID+PID, you earn errors. But you can get rid easily by uninstalling your device in Device Manager. This will remove the memorized bindings.'' Sorry for the noise. Franck.We’re moving the ST Community to a new platform to give you a better and more reliable community experience.