Quentin Santos

Obsessed with computers since 2002

(No) alternatives to the RP2350-USB-A

Following my adventures (part 1, part 2) with the RP2350-USB-A, I took another look at the alternatives.

Specifically, I am looking for a cheap dev board with two full USB ports (1 device, 1 host), that could be easily programmable, and would be production-ready for hobbyist projects (if you’re a professional, you’ll just manufacture your own board).

First, I want to clarify that strikes out the boards that expose UART-over-USB as one of the two USB ports, such as the Arduino Due, or the ESP32-S3-DevKitC. In these cases, the MCU (MicroController Unit) only supports USB, but also has UART for debugging; since UART-to-USB chips are cheap, the board exposes it with as a USB port as well, but it can only be used for this specific purpose.

The ESP32-S3-DevKitC has two (microB) USB ports. However, as visible in the picture, one is labelled “UART”, while the other is the real “USB”.

Next, I do mean cheap. For instance, at 480$ a piece, the ST STM32H743I-EVAL is quite pricey for hobbyist development, let alone production. At 49€ emPower-USB-Host+ could be a neat toy, but a bit expensive for production. And both ports are host anyway, so it would require some soldering.

We are getting close with the nanoCH*, such as the nanoCH32V203 and nanoCH32V305, by Chinese radio amateur BG5DIW, which you can source at about 3€ each. The nanoCH32V305 has two device-only ports, but the nanoCH32V203’s USB2 port seems to be usable as host. Also, both are native, unlike the RP2040/RP2350’s PIO which is more of a hack. The main drawback is that it is using a pretty unusual MCU, so support is going to be limited. However, is probably the next best candidate if the final contenders do not pan out.

On the nanoCH32V203, the “USB1D” port is Device only, but the “USB2HD” port is Host/Device.

This leaves us with:

All are priced in the 10€ to 20€ range.

The trigger for this article was that the RP2350-USB-A does not have the right resistors on its USB-A port to make it usable as a host port without modification. So, let’s check the schematics!

First, the RP2040-PiZero is even more baffling than the RP2350-USB-A. The USB D+ and D- are effectively pulled up to 3.3V by 2.2kΩ resistors. 2.2kΩ pull-up resistors seem to be typical for I²C but, if I understand this properly, it means that the PIO.USB is (mostly) unusable. Unsurprisingly, people are having issues with it, but it might work sometimes.

Schematics of the RP2040-PiZero. The GPIO6 and GPIO7 pins are used for the D+ and D- pins of the PIO.USB connector, but they are also pulled-up by 2.2 kΩ resistors.

Second, the Feather RP2040 directly connects the D+ and D- lines to the RP2040 MCU:

Schematics of the Feather RP2040

I am going to assume this means you are supposed to use the internal pull-down resistors that are provided by the RP2040 MCU itself. It has the advantage that you can then programmatically pull up or down the D+ and D- lines as needed. However, their resistance is between 50kΩ and 80kΩ; even in the best case, that would be way out of spec and is going to cause issues.

In fact, I did try to use the internal pull-down resistors with my RP2350-USB-A when it could not detect devices being unplugged, but it just did not work.

This leaves only the USB interposer, which I hope is properly designed. This is not unlikely, as its purpose is very clearly to offer a USB host and a USB device ports. Unfortunately, there is very little documentation, and it looks more bare-bones, so I will have to wait for it to be delivered, and then to tinker for a while before I learn anything about it.

Maybe I am missing something, but it is a shame that the possibility of doing basic USB with the RP2040/RP2350’s PIO is not better exploited by dev boards. But, eh, maybe it’s a hint that I should take a stab at the nanoCH32V203 instead!

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

About me

I have always been fascinated with computers. Nowadays, I mostly use Rust, but I started out with a QuickBASIC book from the local library when I was in elementary school. I also got a Master in computer science from ENSL and a PhD in cryptography from ENS.

qsantos@qsantos.fr

All articles