CherryUSB – A lightweight USB device/host stack for embedded systems

CherryUSB USB stack for embedded systems

CherryUSB is a lightweight open-source USB device/host stack for embedded systems with one or more USB interfaces. The stack implements various class drivers such as CDC, HID, MSC, audio, video, and so on. It’s apparently part of Boufallo Lab SDK (e.g. for BL702 MCU), and has been ported and tested with WCH CH32V307 RISC-V MCU, STMicro STM32F4, and Nuvoton NUC442 Cortex-M4 microcontroller, as well as a two Arm Cortex-M3 microcontrollers I’ve never heard of: EastSoft ES32F3 and MindMotion MM32L3xx. CherryUSB device stack highlights: Support for USB2.0 full and high speed Endpoint irq callback USB classes support Composite Device Communication Device Class (CDC) Human Interface Device (HID) including “Custom HID” Mass Storage Class (MSC) USB VIDEO Class (UVC1.0,UVC1.5) USB AUDIO Class (UAC1.0, UAC2.0) Device Firmware Upgrade CLASS (DFU) MIDI CLASS (MIDI) Test and Measurement CLASS (TMC) Vendor class Remote NDIS (RNDIS) support Support WINUSB 1.0,WINUSB 2.0 with BOS (Binary Device Object […]

T-Dongle ESP32-S2 WiFi development board comes with two USB OTG ports

ESP32-S2 USB development board

LilyGO has been very busy in recent weeks, and their latest product is the “T-Dongle ESP32-S2” development board that looks very much like Espressif ESP32-S3-USB-OTG board development board but is equipped with the single-core WiFi-only ESP32-S2 processor instead of the dual-core ESP32-S3 SoC with WiFi 4 and Bluetooth 5.0. The T-Dongle ESP32-S2 board is designed for the development of USB applications and comes with USB OTG female and male ports, as well as the same 1.14-inch color display found on T-Display RP2040/ESP32 and T-PicoC3 boards. T-Dongle ESP32-S2 development board specifications: Wireless SoC – Espressif Systems ESP32-S2 single-core Xtensa LX7 processor @ up to 240 MHz with  320 kB SRAM, 128 kB ROM, WiFi 4 connectivity Antennas – 3D antenna, IPEX antenna connector Storage – MicroSD card socket Display – 1.14-inch full-color IPS LCD Display (ST7789V SPI controller) with 240 x 135 resolution USB 1x USB OTG female port to connect […]

WCH CH343 USB to serial chips support 1.8V to 5V IO voltage, 6 Mbps baud rate, custom VID/PID

CH340 vs CH343

WCH CH340  family of USB to serial chip is very popular, and often found on development boards for debugging/access to the serial console, but the company has now introduced the CH343 “Gen3” chip – just like CH9102F apparently – with a higher 6 Mbps baud rate, support for 1.8V, 2.5V, 3.3V, and 5V IO voltage, and the ability to request custom USB VID/PID numbers. Three variants exist with CH343P, CH343G, and CH343K with different packages: QFN16, SOP16, and ESSOP10 respectively. CH343P contains an EEPROM for easy customization, while CH343G and CH343K PID/VID can still be customized for larger orders. CH343 key features and specifications: Full-speed USB 2.0 device interface Hardware full-duplex serial UART interface with baud rate varies from 50bps to 6Mbps. Automatic identification and dynamic adaptation of common communication baud rate of 115200bps and below. Supports 5, 6, 7, or 8 data bits, as well as odd, even, space, […]

ESP USB Bridge project converts ESP32-S2 or ESP32-S3 into a USB to UART/JTAG chip


Espressif’s ESP USB Bridge is a project based on the ESP-IDF that leverages ESP32-S2 or ESP32-S3 USB interface to use the board as a USB to UART or USB to JTAG debug board. It can serve as a substitute for USB to TTL debug boards based on CH340 or CP2104 for instance, be used with OpenOCD in JTAG bridge mode, and also flash UF2 firmware file to the target board. As just mentioned, there are three main use cases: Serial bridge mode with a terminal program or a firmware flashing tool like esptool. In that case, it just works like your typical USB to TTL debug board JTAG bridge mode for JTAG debugging with OpenOCD, and if the target board is based on ESP32, you can use openocd-esp32 project Mass storage device where the board can be accessed by a file manager on the host computer. One of the specific […]

WCH CH348 is an 8-port USB to serial chip with up to 48 GPIOs

CH348Q CH348L packages

If you need to control or debug multiple devices over UART devices, you’d be glad to learn WCH has just launched the CH348 USB to serial chip with eight UART ports. Two models are offered CH348L in an LQFP100 package and CH348Q in an LQFP48 package. Both offer eight UART interfaces, but CH348L comes with more CTS/RTS and DTR/hardware flow control signals, as well as DTR, DCD, RI signals, and support for independent voltage for I/Os. CH348 key features specifications: High-speed USB device interface Hardware full-duplex serial port, integrated independent transmit-receive buffer Baud rate varies from 1200bps to 6Mbps. The serial ports support 8 data bits, odd, even, and none parity, 1/2 stop bit. Each serial port comes with a 2048-byte receiving FIFO and a 1024-byte transmitting FIFO. Signals RTS, DTR, DCD, RI, DSR, and CTS supported for hardware flow control The MODEM interface signal pins and 485 transmit and […]

Raspberry Pi RP2040 gains an extra USB port through PIO’s (programmable I/Os)

Raspberry Pi RP2040 USB PIO

The Raspberry Pi RP2040 specifications only list one USB 1.1 Host/Device hardware interface, but developer’s Sekigon Gonnoc decided to leverage the microcontroller’s programmable I/Os (PIO) to add an extra USB port that also works in host or device mode. While the C library is still supposed to be a work in progress Sekigon implemented full-speed (12 Mbps) and slow-speed (1.5Mbps) host, full-speed device, USB hub, and multi-port support. There’s even a demo with three “Pico Pico USB” keyboards acting as USB hubs and HID plus a wireless mouse to show the results. The implementation uses one PIO for the USB transmitter using 22 instructions and one state machine and another PIO for the USB receiver using 31 instructions and two state machines, as well as one 1ms loop timer for the host, and one PIO interrupt for the receiver. You’ll find the code to implement the extra USB port on […]

10.1-inch RPI All-in-One PC review with Raspberry Pi 4

10.1-inch Raspberry Pi PC portrait mode

A couple of months ago I received “RPI All-in-One”, a 10.1-inch touchscreen display for Raspberry Pi boards, listed the specifications, checked out the package content, installed a Raspberry Pi 4 inside the display before booting my new all-in-one (AiO) PC successfully. I’ve now had time to spend more time with the PC/display and see how it performs under various conditions. I also tested HDMI and USB-C input features with a laptop and mini PC. Fan or fanless operation? After updating Raspberry Pi OS, I ran script together with rpi-monitor to see how the Raspberry Pi 4 with 1GB RAM would perform under load with the (noisy) fan enabled.

  No throttling was detected, and the temperature never exceeded 56°C in a room with an ambient temperature of 26°C. I then disconnect the fan, but it turns out the fan can also be easily disabled in the OSD menu […]

USB add-on boards leverage Raspberry Pi Zero test pads, USB Gadget mode

Raspberry Pi Zero W connected to PC

I’ve just come across a few USB boards that take advantage of the Raspberry Pi Zero (W) test pads to add one or more USB Type-A ports to the board without soldering. The first one is “Catda Raspberry Pi zero WH USB expansion board” which I found on Banggood for $9.99. It’s a kit that ships with a USB Zero plug expansion module, an acrylic “isolation protection cover”, an acrylic transparent light diffraction protection cover plus M2.5 screws and nuts for mounting it to the Raspberry Pi Zero WH board, but it should work any Raspberry Pi Zero including the new Raspberry Pi Zero 2 W board since it relies on pogo pin to connect the four test pads for USB data and power, and those are in the same position for all Pi Zero boards. You can then plug it into a laptop or computer to power the board […]