The software engineers journey to learning hardware
This is a series of posts documenting my journey of learning PCB design and hardware. This is not by any means tutorial, and any sane person should probably not attempt the same. But if you are like me and like to learn new things outside of your normal job, you can follow along and maybe even learn something (mostly probably how not to do things).
This journey have a single end goal, ambitious goal, to design my own single board computer. Simply because I want to better understand the process from the power up to point when linux handles control to the userpace PID 1. And also side motive of designing some interesting and or usefull hardware. I’m aware that this is probably really hard, but currently it seems it should be achievable by creating few projects and ramping up the difficulty.
Outline of the journey
This is outline of what projects I’m planning to take on to get to my goal.
- Addressable LEDs controllable by pc
Basic first PCB design using the STM32, USB-C and a few LEDs. This will be utilized in project we are working on as a visual cue for QR scanner position in physical product. - HUB75 Matrix controller with POE
Another project we will potentially use in the same project as navigation sign - USB KVM Since in some of our projects we work with embedded devices and developing and testing with them is just pain without second monitor I want to create small board and desktop application for it to capture HDMI and send keyboard to the device. In theory this should be quite easy.
- Mini cyberdeck
This is were the difficulty start spiking up and where I’m still not sure how deep I want to go. This basic idea is to combine some WIFI capable MCU, e-ink display and custom low profile keyboard into a ssh terminal with looooong battery life. What MCU and what exact keyboard is future me problem. - Linux capable SOC board Now we are getting somewhere, but lets start slow with some SOC that already have most of the things integrated.
- The goal Full SBC with external DDR, eMMC, capable but not crazy powerful. Of course this is the final boss, the hardest design of this journey.
It’s highly possible that there will be detours and sidequests on this journey. Some smaller development boards as tests for bigger things.
One thing I want to try is to do a small usb-c board with the MSPM0C1104
in the DSBGA package, that is the smallest MCU there currently is.
This is going to be hopefully one hell of a journey and I will try to document things as I go.
My weapons of choice
I’m linux user(you probably figured from my other posts) and I also like using open source tools. Luckily Kicad
is one of the, if not the best tools for designing PCBs.
Besides that I’m interested in trying code to schematic tools like Atopile
In terms of firmware I will try number of things. The most compelling currently is rust and embassy both for the MCU and linux software talking with it, but it seems whole industry is moving towards using Zephyr . There are some options of using rust and zig in zephyr, but the efforts are non official. Embassy looks really good alternative to zephyr in pure rust, but it’s still relatively niche, also embedded rust is inherently unsafe.
Wish me luck
I will try to keep this post up to date wist the progress and new projects.
All of my designs will be open source in our company github, and any feedbacks/helpful comments are welcomed.