Hackster is hosting Hackster Holidays, Ep. 7: Livestream & Giveaway Drawing. Watch previous episodes or stream live on Friday!Stream Hackster Holidays, Ep. 7 on Friday!

Clem Mayer's Custom SBC Contains an ESP32 CPU and Raspberry Pi Pico GPU

After working on the two processors separately, Clem Mayer explores the process of bringing them together and attaching to a host Pi 4.

Evan Rust
5 months agoDisplays / HW101 / Debugging

A tale of two processing units

From mid-tier microprocessors to smartphones and even a $5,000 gaming rig, the vast majority of today's computers contain two main types of processing units for handling the computational demands of modern applications. Whereas a central processing unit (CPU) is meant for more generalized, sequential tasks, a graphics processing unit (GPU) handles the rendering and output of graphics to a display, among other highly parallel tasks.

And over the last several months, Clem Mayer from element14 Presents has embarked on a journey to create his own single-board computer (SBC) with inexpensive components while still having the ability to run Linux, drive a display, and communicate to an external host. His design leverages an ESP32-S3 as the CPU and an RP2040-based Raspberry Pi Pico as the GPU — complete with an I2C interconnect for sending graphics commands to the Pico from Linux running on the ESP32.

The new PCB

Before they were combined, both the ESP32-S3 Linux project and the Raspberry Pi Pico GPU project were on their own, individual boards, meaning that a new PCB design was in-order. The latest revision features power management circuitry as well as an HDMI connector on one side, the ESP32 and Pico in the center, and a 40-pin Raspberry Pi GPIO header near the top. And just like the Pico GPU from before, this entire board can fit into a PCIe slot and communicate with a host over I2C. A SATA power connector was also included across from the display output, but the component's incorrect orientation left it unusable.

Issues with I2C

Thanks to his improved flash tool, loading Linux onto the ESP32-S3 was much easier than the previous version. But when it was time to send I2C data to the Pico, Mayer encountered a couple problems. First, the ESP32's Linux kernel didn't have a working I2C module, which led him to attempt the same I2C experiment on a Raspberry Pi 4. However, the Pico was still not being detected by the OS, thus indicating an issue with either the driver or its connection to the Pi.

Sending text from a terminal

Once Mayer had deemed his I2C temporarily unusable, he quickly pivoted to an alternative mode of communication: USB/UART serial. The update involved allowing the Pico to accept and interpret incoming text as a graphical text display command, thus allowing the Pico GPU to send a stream of characters over DVI to a display. One Python script later and Mayer could now SSH into the Pi 4, run the serial communication program, and start sending text to the Pico and therefore the DVI output too.

Next steps

With this proof-of-concept now functional, Mayer plans on pivoting his focus back to the Pico GPU and making it even more feature-rich. Some ideas include a proper framebuffer, an expanded set of graphical commands, and proper PCIe support for use in a wider range of systems. You can see how Mayer created this DIY single-board computer here on the element14 Presents YouTube channel.

Evan Rust
IoT, web, and embedded systems enthusiast. Contact me for product reviews or custom project requests.
Latest articles
Sponsored articles
Related articles
Latest articles
Read more
Related articles