UART Expansion Card

I have developed a USB to UART expansion card that I have made a fully functioning prototype, this prototype uses the CH340C, along with switchable voltage and logic levels. (3V3 and 5V) This means that I will be starting sales relatively soon, I am estimating to sell these for around 25-30USD plus tax and shipping. Could people reply to this thread to say that they are interested so that I can start fabrication of my first batch. One question for everyone, would they prefer having pins or sockets on the external pins? I prefer sockets due to shorting and debris.


Is this just the PCB or will it have an enclosure? I’d be happy with sockets.

This will be a fully assembled module, I’m hoping to also have a lid but it may be too hard. It does slightly extend from the chassis to prevent using SMD headers and stay with through-hole headers due to stability issues. I will post an image of it inside a enclosure, except I do not have the needed screws at the moment wbich I have ordered as well as the jumpers for the voltage selector.


Assembly has started on 25 units, should for sale within 2 or so weeks, people who contribute to me on patreon will get a discount and early purchasing access, patreon link is in my GitHub, GitHub username is jyancat. Will be for sale for 20USD plus tax and shipping.

absolutely. Let me know when you are done. wotipka at gmail dot com

1 Like

Now going to be 12-15USD plus tax and shipping. I’m waiting for all my patreons who wish to buy one at a discount get them and then I will begin public sale.


Would you mind sharing what kind of connectors those are on the left side? They might fit my current project pretty well.

They are just jumpers that fit into a standard 2.54mm header.

1 Like

The UART Expansion Card is for sale! UART Expansion Card by i2c Labs If you want to use PayPal contact me directly and I am able to manually do it.


I am not familiar with UART - Universal asynchronous receiver-transmitter - Wikipedia. Which purposes or use cases do people use it for?

The used maker market site looks nice!

1 Like

@Josh_Cook So cool!


Sorry for not getting back to you earlier, UART is used with heaps of different microcontrollers, for example smaller Arduinos have a UART interface to use instead of having a UART to USB bridge chip. Lots of other devices have debug pins which are also UART. Quite universal standard.

1 Like

Just received my UART Expansion Card from Josh and it is fantastic!

I was impressed at the packaging and professional feel it arrived in, and it is working great! I just was trying to figure out how to get a second UART set up for monitoring, and this worked great right out of the box.

1 Like

Thanks for the explanation! Arduino: Arduino - Wikipedia? What is the “debug pins”?? Sorry, I am quite a beginner in this area.

This looks like a good card to have and I’m happy to see people making use of the open platform. My Arduino Uno gets power and serial communication through USB. It looks like even the smaller Nano has USB as well. Are there smaller or lower power controllers (maybe for IoT) that don’t have a USB interface?

An Arduino Uno actually uses a second microcontroller to get serial-over-USB! The main microcontroller is an ATMega328P, and on the official Uno, USB to serial is provided by an ATMega16U2. Many Uno clones and most ESP32 boards use other USB-to-serial bridges, like the one on this board. Most microcontrollers that are programmed via USB are first programmed by some other method to add the USB programming abilities.

UART is also really, really useful for talking to network and server room equipment and configuring them, especially when you have a lot of devices or you have a problem that takes down a web interface.

It’s a good hacking tool, too, because a lot of oddball devices that have a Linux computer inside expose a UART serial terminal, and getting access to that is the first step in reusing or customizing a device. My junk bin has an old NAS that I was able to update from the old and insecure manufacturer software to fresh and updated generic Debian, and I also have this odd control board out of an obsolete Bitcoin miner that can be used as an FPGA playground board by logging into its onboard Linux instance.

Since the ATMega328P is less ubiquitous these days, I don’t know as a serial module will be as much of an everyday carry for the average microcontroller hobbyist, but it still does useful stuff in a neat little package.


As I have one last UART expansion card I’m doing a discount for a bit of an early black friday and it being the last one, code: LASTONE.

1 Like

I got the last one!! :beers:

Really excited for this card! My first community expansion. :fire:

Congrats on getting the last one and using the discount, who wants me to do another batch of 10-25, these will be slightly cheaper and better quality.

  • Yes
  • No

0 voters

Edit: Please disregard the below, I did not have the jumpers set so there was no power being sent to the card. :sweat_smile: It is registered now (dmesg output for reference), have not tested it with any actual communications yet, but it’s looking promising! Thanks again for making this, Josh!

Card appears as /dev/ttyUSB0.

Hi, I’m having difficulties getting the CH34c drivers to load on Ubuntu 22.10, any advice?

Had some difficulty getting the drivers to install at first, which was due to a space in a folder name. Took the space out and Make was able to build it:

kris@fw-ice:~/Documents/6-Projects/Framework_ECs/uart_card/CH341SER$ sudo make
make -C /lib/modules/5.19.0-26-generic/build  M=/home/kris/Documents/6-Projects/Framework_ECs/uart_card/CH341SER 
make[1]: Entering directory '/usr/src/linux-headers-5.19.0-26-generic'
warning: the compiler differs from the one used to build the kernel
  The kernel was built by: x86_64-linux-gnu-gcc-12 (Ubuntu 12.2.0-3ubuntu1) 12.2.0
  You are using:           gcc (Ubuntu 12.2.0-3ubuntu1) 12.2.0
  CC [M]  /home/kris/Documents/6-Projects/Framework_ECs/uart_card/CH341SER/ch34x.o
  MODPOST /home/kris/Documents/6-Projects/Framework_ECs/uart_card/CH341SER/Module.symvers
  CC [M]  /home/kris/Documents/6-Projects/Framework_ECs/uart_card/CH341SER/ch34x.mod.o
  LD [M]  /home/kris/Documents/6-Projects/Framework_ECs/uart_card/CH341SER/ch34x.ko
  BTF [M] /home/kris/Documents/6-Projects/Framework_ECs/uart_card/CH341SER/ch34x.ko
Skipping BTF generation for /home/kris/Documents/6-Projects/Framework_ECs/uart_card/CH341SER/ch34x.ko due to unavailability of vmlinux
make[1]: Leaving directory '/usr/src/linux-headers-5.19.0-26-generic'

dmesg reports:

[79475.609498] usbserial: USB Serial deregistering driver ch34x
[79475.609534] usbcore: deregistering interface driver ch34x
[79478.207469] usbcore: registered new interface driver ch34x
[79478.207488] usbserial: USB Serial support registered for ch34x
[79594.483020] usb usb2-port1: attempt power cycle
[79602.983201] usb usb2-port1: unable to enumerate USB device

So it attempts a power cycle but is “unable to enumerate”. What message should I be expecting to see?

This behavior repeats every time I unplug/replug the card.

I have read the instructions on Sparkfun for installing the drivers (v3.7), as well as using the alternate community-patched drivers. I added myself to the “dialout” group as specified on Sparkfun.

ls /dev/*usb* reports only hiddev0. This is whether I have the card plugged in or not.

Loaded modules:

kris $ lsmod | grep ch34
ch34x                  24576  0
usbserial              57344  1 ch34x

Not sure what further info to include…

Thank you for any and all support!