I ordered my uConsole a few weeks ago. To keep myself busy until then I’m considering creating a uConsole expansion card that some of you could also make use of. It’ll primarily be used to break out most/all the pins on the expansion card. A simple board, minimal components.
Currently planned:
External usb port.
Internal usb pins (to connect to internal hub).
I2C connections.
Most/all gpio pins broken out to solder pads.
Maybe?:
12v boost circuit (to make interfacing with some automotive sensors easier?)
Couple of Bi-directional Logic Level Converters.
I’m curious to see what some of you might like to see on a relatively simple breakout board.
This is be going to be my second PCB I’ve made and I’m just worried I’ll make some design mistakes that’ll create interference issues or damage the main board do to a design flaw.
Any other ideas, insight, resources, tips or tricks people have would be greatly appreciated.
I’ve been thinking about something along these lines myself, but starting it with replacing the CM4 adapter board. Particularly moving the built in USB lines from the CM4 to the other ones on the SODIMM connector (according to the schematics it’s setup the same as the CM3). This would bring usb data to the USB-C port, and importantly would allow for USB OTG support there too.
Then using a cheap and simple usb 2.0 pcie chip on the back side of the adapter board to supply USB to the main board for the expansion port, keyboard, etc. on the hub chip that it has. This would leave one or three (depending on the chip) usb ports ready on the pcie chip that could be brought out for internal stuff.
I’ve just not had time to attempt to design a brand new adapter board, nor do I have the experience with pcie to know that i could get it done.
Theoretically we could use a usb 3.0 chip and have some faster internal ports there but the problem is that the physical space is limited and i’m not sure if it could be made to fit a proper connection (maybe an internal usb-c connector?)
I’ve also found that if I made my own adapter board it might be possible to bring out the built in CM4 ethernet mac and make a flatflex cable to an rj45 that could be cut into the case near the batteries, similar to how I’ve seen people hack up a usb adapter internally.
All very pipe dreamy but some ideas that might be worth looking at if you’re going to be trying to add more usb internally anyway.
I want to give credit to Vitaly for creating the Uhub and UPico. They were the inspiration and resources I needed to get started on this project.
This is still very much a work in progress, but I wanted to get something designed on a PCB and get community feedback.
This is what I have so far.
-Internal USB solder pads.
-External USB-C.
-Provisions for I2C.
-All GPIO pins broken out.
-Dedicated 3.3V, 5V, and GND pads.
To-do:
-USB signal line length/shielding(?).
-Finalize/confirm VBUS_FLT and VBUS_EN (Currently more a place holder).
-I2C connections (More a place holder, need to confirm if I2C is natively supported).
-Add Bi-directional logic level converters.
Any feedback would be greatly appreciated, I have very little PCB design experience (mostly basic breakout boards) and this is pushing my knowledge of this type of project.
What I would suggest is routing the USB traces as differential pairs, and they need to be over an uninterrupted ground plane. You’d probably want to use a four layer board to accomplish this, and just set the second layer to just one big ground plane. Ideally you’d want to do this all on one layer, but the USB connector may not make this easy.
If you set the gap between the traces to 8 mils, and the width of the traces to 10 mils; you’ll probably get close enough to the 90 ohm trace impedance. The distance between the differential pairs and any adjacent traces or pins should be four times the trace width (in this case: 40 mils).
The easiest way to do all this in KiCAD is to label all differential pairs (even the wires between the TVS diodes and the USB connectors) with a label that ends in “-” and “+”, then in your PCB editor goto File → Board Setup → Design Rules → Net Classes. From there, you can assign those nets to their own class and set the constraints accordingly. Then it’s just a matter of clicking Route → Route Differential Pair, and you can route them as pairs.
USB will usually work on traces that aren’t routed according to these rules, but this will minimize signal distortion and allow data to run much closer to the full specified rates according to the USB specification.
Thanks for the insight. Kicad did recognize them as differential pairs and thats what made me think even USB 2.0 lines need additional considerations. Appreciate the help, I’ll be sure to ensure those rules are added.
I was hoping to keep it only 2 layers to simplify it, but after looking into the cost it doesn’t appear to add any cost at this size to go 4 layer. Final version will be a 4 layer. I want to ensure this circuit is robust to minimize troubleshooting issues that may arise due to poor design.
What about creating a breakout on the SODIMM connector?
Still waiting for my unit and do not know what space we have to play with.
Have a unit with 4G board and like to use it.
So thinking in terms of either a SODIMM - PCB header with IO breakout or a complete new CM4 adapter board adding some gpio + usb