The WCH-LinkE is the debugger needed for CH32V0xx microcontrollers. WinChipHead is selling them in 3-packs, and so I’ve ordered a pack. When they arrived, I plugged one in my computer, and, it didn’t enumerate. I tried the others, and nothing happened either.


[18612.246110] usb 1-6.2: new full-speed USB device number 26 using xhci_hcd
[18612.724335] usb 1-6.2: unable to read config index 0 descriptor/start: -32
[18612.724342] usb 1-6.2: chopping to 0 config(s)
[18612.724344] usb 1-6.2: can't read configurations, error -32
[18612.922982] usb 1-6.2: new full-speed USB device number 27 using xhci_hcd
[18613.397715] usb 1-6.2: unable to read config index 0 descriptor/start: -32
[18613.397720] usb 1-6.2: chopping to 0 config(s)
[18613.397722] usb 1-6.2: can't read configurations, error -32
[18613.403529] usb 1-6-port2: attempt power cycle
[18614.126012] usb 1-6.2: new full-speed USB device number 28 using xhci_hcd
[18614.381681] usb 1-6.2: unable to read config index 0 descriptor/start: -32
[18614.381686] usb 1-6.2: chopping to 0 config(s)
[18614.381688] usb 1-6.2: can't read configurations, error -32
[18614.582680] usb 1-6.2: new full-speed USB device number 29 using xhci_hcd
[18614.835704] usb 1-6.2: unable to read config index 0 descriptor/start: -32
[18614.835707] usb 1-6.2: chopping to 0 config(s)
[18614.835708] usb 1-6.2: can't read configurations, error -32
[18614.841533] usb 1-6-port2: unable to enumerate USB device

Quite unfortunate. And hard to imagine all three of them to be broken, something else must be going on. Out of ideas, I decided to plug one into my Raspberry Pi 4 running Microsoft Windows 11. To my surprise, the two LEDs on the debugger lit up; the device enumerated successfully. Both LEDs indicate “WCH-LinkDAP” mode as described on the AliExpress product page. Therefore I ran the WCH-LinkUtility, and I switched it to “WCH-LinkRV” mode. Then I plugged it back into my computer, and it worked fine.


Open On-Chip Debugger 0.11.0+dev
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : WCH-LinkE-CH32V307 mod:RV version 2.7

Switching it back to “WCH-LinkDAP” mode makes it fail on Linux again. Interestingly… in my experience, Windows is usually pickier about USB devices then Linux. But I have an idea what is going on. There are some slight differences in the enumeration process between these operation systems, regarding the length of the requests. I won’t be doing an in-depth analysis, as the most important conslusion: The WCH-LinkE is not broken, and works in “WCH-LinkRV” mode, which is the mode I’m interested in. Besides, USBPcap, required to sniff USB on Windows, is not yet available for aarch64, so to capture a successful trace I would have to boot Windows on my main PC. So, that’s for another time.