-
Notifications
You must be signed in to change notification settings - Fork 102
Description
STM32CubeIde for MCU STM32U5A9NJHXQ (MCU package v1.6.0, USBX v6.2.0) generated incorrect RNDIS code. RNDIS is working on Windows but failed on Linux with this dmesg messages during enumeration:
[ 5043.521350] usb 5-1.1.3: new high-speed USB device number 17 using xhci_hcd
[ 5043.663724] usb 5-1.1.3: New USB device found, idVendor=0483, idProduct=5742, bcdDevice= 2.00
[ 5043.663740] usb 5-1.1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 5043.663784] usb 5-1.1.3: Product: STM32 USB Device
[ 5043.663791] usb 5-1.1.3: Manufacturer: STMicroelectronics
[ 5043.663796] usb 5-1.1.3: SerialNumber: 000000000001
[ 5043.724852] rndis_host 5-1.1.3:1.0: RNDIS_MSG_QUERY(0x01010101) invalid response - off 16 len 4
[ 5043.724869] rndis_host 5-1.1.3:1.0: rndis get ethaddr, -33
[ 5043.725371] rndis_host: probe of 5-1.1.3:1.0 failed with error -33
The problem is that message with RNDIS ID: 0x01010101 is not implemented. With this modification:
In file ux_device_class_rndis_msg_query.c
In function _ux_device_class_rndis_msg_query before default (line 327) put this code:
case UX_DEVICE_CLASS_RNDIS_OID_802_3_PERMANENT_ADDRESS :
/* Save the Hardware address in the return message. */
_ux_utility_memory_copy(rndis_response + UX_DEVICE_CLASS_RNDIS_CMPLT_QUERY_INFO_BUFFER,
rndis -> ux_slave_class_rndis_local_node_id, UX_DEVICE_CLASS_RNDIS_NODE_ID_LENGTH); /* Use case of memcpy is verified. */
/* Set the total response length. */
rndis_response_length = UX_DEVICE_CLASS_RNDIS_NODE_ID_LENGTH;
break;
With this modification, the RNDIS device works correctly on both systems Linux and Windows.