A bit of context: the French Eurobot contest
Most of my previous project were related to building robot for the French Eurobot competition (Coupe de France de Robotique). While the robot gain complexity, I needed to have several boards communicating together. My first choice was I2C. This protocol is well supported by micro-controllers. Sadly, for board to board communication, you can sometimes run into issues due to the electromagnetic perturbations. And that is what happened to us.
I had several discussions with the other teams and found two acceptable solutions : CAN and USB. While CAN is really designed for these kind of application, you need external component to interface the micro-controller to the bus. With USB, all our board, based on the Raspberry Pi Pico (RP2024) were compatible.
Going to the USB solution
USB works with a host and devices on the bus. While working with USB device is rather straight-forward, developing the USB host part was more complexe:
- When you connect the host to the device, you can’t power it by its USB port.
- When you connect the host to the device, you can’t have your feedback through the USB port
That’s a lot of cables. And wait, it’s not finished!
We want some logs
Since I had to design a new board which would be at the hearth of the robot, I wanted to be able to log nearly every thing that happen on the robot. So I added a SD Cart reader.
Going into Kicad
There things are quite simple:
- A power circuit
- A SD card reader
- A USB to UART converter
When you design a board and you have free pins on your micro-controller, what do you do? You add LED! Well, now it’s just too easy, with just one pin and can drive as many Neopixel as you want…
I really enjoy design this board. In fact it’s a quite simple board, but I took my time, ask and follow advises on the Eurobot forum:
- I changed the type of SD card reader
- I added one SMC capacitor for every Neopixel LED
- I changed the size of the capacitor, because I mixed inch and metric sizes.
- I change the shape of the board to have round corners
- I added the allowable input voltage next to the power input connect
- I moved away the LED from the mounting holes
- I change the hole to have metallic rings around the holes
Here is the final version
This board was made with Kicad. I like to work with open source software. Some are just OK, some are great and some are top-notch software. I think Kicad is in the last category
!
Thank you Aisler for supporting Kicad !
This board was quite simple, I got advice from several people so there is no big fail here. My main regret is to not have indicated the polarity on the sillkscreen near the power connector.
Thanks to this board, I was able to deep dive into the usage of USB and here are my main advises:
- Read USB in a nutshell
- Identify clearly the USB class you are going to use
- Use TinyUSB
- To read and write files FsFAT is your friend.
- USB mass storage is slow, don’t use a USB stick to store your data, use a SD Card with the SDIO protocol
And the board is so nice compare to the original breadboard !
This wouldn’t be possible without the great support of Aisler. Their tool to check the PCB is awesome and have already saved one of my project!
This project is not finished, but the rest is code, code and code…









