USB Touch Screen Kills USB

Hey,

I’ve recently got a Radxa Zero and everything seems fine except that whenever I try to connect a USB touch screen I have, USB stops working:

[  362.771137] usb 1-1.4: new full-speed USB device number 4 using xhci-hcd
[  362.924340] usb 1-1.4: New USB device found, idVendor=0416, idProduct=c168, bcdDevice= 0.00
[  362.930699] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  362.937956] usb 1-1.4: Product: MTouch
[  362.941646] usb 1-1.4: Manufacturer: TSTP
[  362.945620] usb 1-1.4: SerialNumber: CMTP_1.0
[  373.215132] xhci-hcd xhci-hcd.4.auto: xHCI host not responding to stop endpoint command.
[  373.221236] xhci-hcd xhci-hcd.4.auto: USBSTS:
[  373.249739] xhci-hcd xhci-hcd.4.auto: xHCI host controller not responding, assume dead
[  373.255655] xhci-hcd xhci-hcd.4.auto: HC died; cleaning up

I’ve tried using a USB hub, both powered and unpowered but the results were the same.
The touchscreen works find on my PC and Raspberry Pi, though, if it helps, the Pi zero did have issues with it. On the Pi Zero, I had to add the following to /boot/config.txt:

dtoverlay=dwc2,dr_mode=host

I also tried to use the USB2/OTG port to connect the touch screen but it wasn’t even detected there until I added the following DTB. But, although the USB2 port now detected the touch screen, it still showed the same error as above:

/dts-v3/;
/plugin/;

/ {
	compatible = "radxa,zero", "amlogic,g12a";

	fragment@0 {
		target = <&usb>;
		__overlay__ {
			status = "okay";
			dr_mode = "host";
		};
	};
};

Does anyone have any idea what might be wrong or how I can overcome the issue?
Is there any way to make the USB2 port work?

Thanks in advance!

I have the same issue, my dmesg looks exactly like the one posted above. I have a Radxa Zero v1.51 4GB RAM/16GB eMMC.

To help research and debug my specific touch screen is a Eviciv 10" 1080p touch screen which uses 0416:c168 Winbond Electronics Corp. MTouch for the touch device. The screen itself is known to work fine with Windows and Linux as well as various other SBCs including several Raspberry Pi and other devices. This Radxa Zero is the first to not like it.

As soon as the touch screen is connected (via either of the two possible connections, USB-C with video support or the internal USB-A via an adapter) the xhci module crashes with the same output as above. A reboot is required to restart the USB interface. Interestingly running lsusb before/after the crash shows that the USB 2.0 and USB 3.0 root hub is still running but any other attached devices disappear, even resetting the device physically does not reset it with the host.

I’m running Armbian_22.08.7_Radxa-zero_jammy_edge_5.19.16_xfce_desktop (only image I could to boot that has HDMI output - newer Armbian images do boot but HDMI output is broken, other OSes have the same issue or don’t boot at all).

I’ve tried the common fixes reported for this issue (e.g. adding extraargs=usbcore.autosuspend=-1 to armbianEnv.txt, iommu flags, etc.) - none of it works. I’ve also tried eliminating ground loops and other power issues thinking it may have something to with voltage differential but even when powering the Radxa Zero using the internal 5v power supply from the screen it still happens (the screen is intended to run various RPi models via an internal connection, including RPi4 - so plenty of current on its 5v rail). I’ve also tried using a USB 2.0 hub between the screen and the Zero in attempt to force USB 2.0 mode - same result (both powered and un-powered hubs).

In some cases I get a notification that the touch keyboard is activating right before the USB controller crashes so it seems that the screen is recognized by the OS but then something causes the USB controller to crash.

On my todo list is to create a custom data only USB cable to fully rule out voltage power issue but that will be a while before I have time to do that.

Ideally I would like to be able to run a USB 3.0 hub and have the touch screen functional but I can settle for a USB 2.0 solution as well - getting the touch screen working is more important for me.

I think it’s somehow related to timing issues. IIRC, USB on-the-go uses a different clock source since more parts of the protocol are handled in software rather than the USB controller itself. That’s how I got to disabling USB OTG on the Pi Zero and that made it work. The other Pis, while still using the same USB OTG hardware, have it disabled by default since the boards have a USB hub anyway.

BTW, without disabling OTG, the Pi would accept only the first touch on the panel and ignore the rest. The Radxa Zero’s controller crashes earlier on. I’m attaching a USB capture (from Ellisys Visual USB) from the two Pis, if it helps.
Pi3.zip (197.3 KB)
Pi0.zip (141.8 KB)

I have a feeling the M-Touch controller simply isn’t working to spec, or maybe it’s clock source isn’t accurate. In either case, I’m not sure it’s something we can overcome in software since it’s probably the USB PHY/controller that’s not happy with it. In any case, it also fails on kernel 6.0.

I also tried various intermediate hubs in the hopes it would overcome any timing or interoperability issues but that didn’t work for me either. Maybe a USB 1.1 hub will work better?

That makes sense but testing USB 1.1 is going to be hard - I had to dig around to find a 2.0 hub :slight_smile: and some online searching for a 1.1 hub is not yielding any results. From what I’m reading it also sounds like forcing 1.1 mode on a 2.0 compatible host port requires a chip - a simple cable mod won’t do it, so a hub really is needed. I tried unloading the USB modules but they seem to be compiled into the kernel so that didn’t work either.

As for my screen, I’m not sure it’s the part operating out of spec - it works without issue on every other host I’ve tried it on (USB 2.0 and 3.0/3.2 ports with and without display signals, my screen has a Type-C port that accepts video in while also proving the touch device back out to the host). I didn’t have to tweak any of Raspberry Pi devices to make this screen work (both on Zeros and B 3/4 series). I’m actually trying to replace my existing RPi Zero with this Radxa Zero to get better performance with this screen. RPi Zero was plug and play (well with a tiny micro-USB to A adapter). Even though our screens have the same USB device IDs we might have slightly different revisions.

At any rate there definitely seems to be some sort of physical incompatibility here that’s sound like a difficult hurdle to overcome.

Just some more what didn’t work debugging info…

I had some time to create a custom USB cable so that I could replicate as close as possible the same hardware stack used for my screen with the RPi Zero for Radxa zero but no luck. I created a custom USB-C male to micro USB female cable so that I could use exact same micro USB to USB-A OTG adapter in hopes that maybe something in that adapter chain would help things…but no such luck. The USB stack still crashes. I’ve also eliminated any grounding/powering loops (e.g. the same 12v source powers the LCD and the same internal 5v regulated source powers the Zero and touch panel all with the same ground) - again no luck.

I also dug out an old Adafruit HDMI w/ Touch driver that I have connected to a odd-ball touch screen. While I couldn’t get the HDMI output to display (likely due to not linking the screen timings) I was able to use the tiny touch screen a “trackpad” of sorts confirming that at least the generic touch drivers and interfaces were working. Not all that meaningful beyond proving the OS is at least touch aware over generic USB interfaces.

Something is definitely up with this MTouch screen and Radxa Zero. I’m not sure what else I can try at this point. Too bad too, Radxa Zero would have been perfect for my project if the touch screen was working.

Small win - I found Manjaro 23.02 also has HDMI output so at least I have a couple of OSes to play with now. But as Manjaro is using a different OS base (Arch vs Debian) that’s just another point towards this being a hardware level issue instead of software.

Just one more update. I also tried the same touch screen with a Raspberry Pi CM4 with this carrier board and got the same USB death as the Radxa. With the Pi, replacing the power adapter with another “fixed” it so I’m still thinking this is some grounding/noise issue. Unfortunately, using the power adapter that worked with the CM4 on the Radxa still didn’t help.

It might be interesting to try and power the Radxa and touch screen with a battery pack and see what happens. I don’t have one to try it…

Same problem for me. I have not tried it yet, but I just ordered a power blocker usb adapter from Amazon and will try that next time.

Is it possible to recover my current Radxa Zero? If i go for a normal boot now with just a keyboard and mouse, no other usb devices attached, it doesn’t seem to put an image on the screen. The green led is flashing like it should. I have the Radxa Zero v1.51 without eMMC, 1gb ram, so I boot from MicroSD.

I have the same issue on Orange Pi 5 using USB Type-C for both video output and touch. Display is powered via that same Type-C cable as well (so grounding issue should be eliminated).

Anyone with any more ideas? Anyone made it work at all?