The project documented in episode 702 of the element14 presents series introduces a device called Blooper, a USB looper tool designed for UART serial debugging, device emulation, and network-free file transfer.
USB looper: definition and goals
The Blooper is an open-source hardware tool that acts as a modern reinterpretation of the classic null modem cable, but designed for modern USB-C connections. Internally, it converts USB communications to UART, allowing two USB hosts to communicate as if they were connected through an external serial device.
Its main feature is that, when connected, the operating system sees two independent USB serial devices. These can talk to each other, letting a computer send and receive data through the tool as if it were a real external device.
Serial logging as from a real device
One of the use cases shown is logging serial output to a file. The project provides a Python script (logfile.py) that reads data from a serial port, adds a timestamp, and writes the result to disk.
The script uses:
- a function to read lines from serial data;
- UTF-8 decoding;
- and timestamp formatting before writing to file.
This approach makes it possible to test software that normally expects input from a real hardware device, since from the computer’s point of view the data appears to come from a physically connected device.
Rethinking the null modem concept
The project draws inspiration from the historical null modem cable, once used to connect two computers directly over UART lines. According to the documentation, the Blooper brings back the same function but takes advantage of USB, enabling direct communication while bypassing the traditional limits of the USB host-device protocol.
Full-duplex communication between hosts
Another example in the video shows the development of a simple Python application (chat.py) that uses multiple threads: one continuously reads data from the serial port while the other sends messages. This enables real-time two-way chat between two terminals, even when both are connected to the same computer.
Network-free file transfer
The project also includes a demonstration of file transfer without a network connection, using Python scripts such as filesender.py and filereader.py. The file is read into memory, converted to bytes, and sent over the serial port. On the other side, the program reads the incoming bytes from the serial line and saves them to a file, replicating a data transfer between hosts.
Hardware design choices
The text describes that the design is based on FTDI USB-UART chips, considered reliable and stable, able to enumerate correctly without requiring external crystals. In addition, the design includes components such as pull-down resistors for USB-C, Schottky diodes for protection against power supply reversals, and indicator LEDs to show traffic and data direction.
Technical conclusion
The Blooper is documented as a practical and reliable tool for embedded developers working with serial communications and UART protocols, enabling debugging, logging, device emulation, and network-free file transfers. The project includes open-source resources and a bill of materials.