Smallest practical Compute Module 4 carrier board for network projects

Similar projects worth following
Carrier board for Raspberry Pi Compute Module 4.

- exactly same size as CM4
- support for both Lite and eMMC variants of CM4
- Gigabit Ethernet
- microSD slot (optional)
- Micro USB for power and USB 2.0 data transfer
- USB-OTG support

The basic idea of the project is to deliver smallest possible headless server with help of Compute Module 4 unit. To achieve that, the requirement was to have exactly the same size of the board as CM4 itself. Actually the only thing that is required for this kind of use case is Ethernet connector. However this board does not support PoE (yet?), so power has to be delivered externally, via Micro USB connector. Same USB serves also as an interface to rpiboot, so boards having eMMC could be flashed with it. Also there is OTG support, that was on CM4 connector out of the box, so most likely Raspberry with this board could serve as both host and slave USB device. For convenience, there is also Micro SD connector, which allows to boot from SD card on CM4Lite boards. Oh, and there is obviously UART header, so some basic troubleshooting can be done this way. Basically that's all you should need for your networking projects.

I can imagine that this kind of device could be used, most obviously, as a standalone server, saving a bit of space comparing to Raspberry Pi or similar device, maybe to play a bit with Kubernetes, Ansible or this kind of thing, without doing this directly on a laptop or VMs. Also this could work way better for building small Raspberry Pi clusters.

  • 1 × CM4/CM4Lite 1/2/4/8 GiB RAM 0/8/16/32 GiB eMMC
  • 1 × uCM4 PCB
  • 2 × Hirose DF40HC(3.0)-100DS-0.4v
  • 1 × Richtek RT9742CGJ5F
  • 1 × Diodes Incorporated 74LVC1G07SE-7

View all 22 components

  • Fixed board revision sent to fabrication

    Kamil Lorenc07/13/2021 at 16:03 0 comments

    Increasing interest in my project motivated me to finally make next revision of PCB. Let me show you version 0.1.1. This is solely bugfix version and gets rid of most of the mistakes that I made on first iteration. There is nothing new, though. Goal here is to end up with a board that I can safely solder myself and use for further testing, possibly making 2 additional boards and trying some experiments in setting up Kubernetes.

    Anyway, I fixed power rail width error, increased diameter of Ethernet shield hole, so now it should be way easier to place and this time I didn't forgot to regenerate drill files :) so now testpoints for USB should be on its place, too. Log of important changes is now on Github release page and obviously full log of changes is in Git's commit history. Here is the visualization of these few changes. First are drills (green is new, red is old):

    And here is the complete board with new traces also in green (you don't see removals here):

    As can be seen, changes are very subtle, but on the other hand, necessary.

    Now, I have to wait few weeks before my order is produced and delivered. Then it will for sure take few more days to solder it properly. I hope this time will be better, as last time I didn't have enough soldering experience to do it right on first attempt, what finally took me couple of evenings to complete. In the meantime, maybe I will try to do some software development, as my plan was to boot CM4 with PXE, or something similar, so I will not need Micro SD card anymore. And this would be good improvement in the direction of setting up everything automatically for Kubernetes.

    I also developed BOM and CPL files for SMT assembly a bit further, so in theory it is now possible to order assembly of all 3 ICs present on board - means ESD protection of USB, PMIC for SD card and LED buffer. I even attempted to do so for connectors, too, but with that I failed for now, so this is an exercise for the future due to wrong middle point on my custom footprints. During playing with that I noticed that RT9742CGJ5F (mentioned PMIC) is at no stock whatsoever. Even more disturbing is the fact that there is only one shop I could find, where they claimed to have some and with other Richtek-made PMICs it is not much better, or acutally all of them are at zero stock on LCSC. Fortunately, I still have 9 of the right ones, so for myself it is not a problem, but I can imagine someone trying to reproduce my design and failing to do so due to that. Also this would make any attempt of mass production impossible for the moment, unless redesigned to use different part. It is not a surprise for me, as IC shortage was first heard in context of nothing else, but PMICs.

    PS. If you know any PMIC that can be used instead of the one mentioned and which I can easily source on LCSC, or any other non-Aliexpress-or-Taobao place, let me know. I can consider using it instead of the now unobtanium Richtek.

  • More Ethernet testing

    Kamil Lorenc05/27/2021 at 06:36 0 comments

    Today, finally I was able to set up stable Gigabit Ethernet connection to my laptop. Did some quick test by sending random file from my laptop's SSD to CM4 and storing in /dev/null. Here is the result measured by nload:

    And I got quite nice ~700 Mbps. I still hope this is not maximum for CM4, but SSD was bottleneck this time. Let's see what iperf is gonna say. And it showed this:

    By the way you can see dd counting previous attempt. So, here we have ~860 Mbps. This I can believe in.

    Then the summary is that my board does its job nicely. I played quite a lot with trace length matching tool in KiCAD to make sure that all traces carrying Ethernet signals are of exactly same length. I'm curious what would be the result if I ignored that. But I think that spending money and time on next batch of test boards is not worth it :)

  • Test of Ethernet connection

    Kamil Lorenc05/25/2021 at 15:54 0 comments

    uCM4 carrier board was designed with network projects in mind, so the most important thing to check is how fast the internet connection could go.

    Today I did some quick tests on that matter. First test went rather unsuccessful, as definitely my laptop, that is sharing internet to CM4, opened connection at 100Mbps. I tried with few cables that claim to be Cat5e, but all of them worked as bad as first one.

    My PC suggesting that cable is the issue and synching at 100 Mbps:

    CM4 only tells me that I got 100 Mbps:

    Despite being unlucky with port speed, I tested nload to see how much do I get on 100 Mbps link. It showed ~90 Mbps. Nice.

    After trying 3 cables I decided to change tactics. I reminded myself that I have old Wandboard PICO-PI-IMX7 lying around and collecting dust. Fortunately it stills has working OS flashed, so let's try that:

    100 MBit/s crossed, so first small success.

    Wandboard clearly indicates 1 GbE link with its orange LED, instead of usual green, that I saw just a moment before with different cable:

    I wonder why they didn't do same on Raspberry Pi. Even if I used same UDE connector on my board, there is no signal indicating 1 GbE, instead of 100 Mbps, AFAIK. Weird.

    Next time, I will try to test connection from CM4 to Raspberry Pi 4, as I suspect Pico Pi is bottleneck here. At first I tested connection from Pico Pi to PC and got almost same ~120 MBit/s. i.MX7 is not the newest SoC, so it is not really a surprise, you can't get more from that. However, before testing Pi4, I have to prepare another OS, as till now I used card borrowed from my Pi4, so can't do that quickly, unfortunately.

  • Demo

    Kamil Lorenc05/24/2021 at 14:09 0 comments

    I felt that this project is incomplete without any demo video, showing at least startup of Linux. Here it is. Enjoy.

  • Board version 0.1.0 working

    Kamil Lorenc05/22/2021 at 15:41 0 comments

    I was working on this project from time to time for several months already. During that time, few weeks I spent waiting for the board to arrive from JLCPCB. I ordered them partially assembled with whatever was available to assemble. Last few afternoons was soldering those elements that JLCPCB was unable to solder with their basic service (or at all?). Today I solved last significant problem with microSD card slot, so I am now able to boot automatically into OS that used to work on Raspberry Pi 4 before. In the meantime I also tested RPIBOOT jumper, so it is now confirmed that shorting this when connecting the power results in jumping into rpiboot mode of bootloader, so it should be possible to flash eMMC from there. I have CM4Lite, though, so was not able to confirm that.

    These are the things that I was able to verify till now:

    1. With testpoints it is possible to verify that power to SD card slot can be cut by CM4
    2. PWR LED indicates that board is powered
    3. ACT LED shows that some activity is going on (was not blinking when I had SD issue - weird)
    4. RPIBOOT goes into BCM2711 Boot, when shorted
    5. USB connector delivers power to board, but also allow USB communication to SoC
    6. UART shows system log, when booting Linux
    7. After system startup it is possible to interact with the system
    8. Ethernet link is going up and green LED on connector indicates that
    9. Ethernet activity LED blinks, when something is going on
    10. Ethernet link works, when connected to PC sharing its connection

    As can be seen above, generally everything is working. But this cannot be so sweet in first iteration. In the meantime, I identified some problems, that I try to keep track of on Github. Most significant one is 5V power rail being too thin at the very short distance, so it is possible that two Hirose pins are more loaded with current than the rest. I am not an expert in electronics, but on my first prototype I made a jumper with wire for a reason that turned out to be my mistake. Due to that trace width problem, I left this bridge, just in case.

    Other minor errors I noticed are as of now:

    1. No vias near USB testpoints on production files (KiCAD source was fine at all times!).
    2. Very tight fitting of Ethernet connector. Reason for this problem was me, migrating from other connector of same manufacturer, that was almost the same, excluding 0.1 mm diameter of shield mounting hole and way more obvious LED pin locations.
    3. RPIBOOT jumper is hard to short.
    4. Soldermask around vias - some are not under soldermask, some are. It is not a problem, but is ugly and unprofessional :)

View all 5 project logs

Enjoy this project?



MisureMeccaniche wrote 07/07/2021 at 05:55 point

Hello, where is possible to buy one pèiece for testing? Kind regards.

  Are you sure? yes | no

Kamil Lorenc wrote 07/11/2021 at 18:02 point

Hi. Thanks for interest. For now it is just personal project. But, if the interest in producing these would be high, maybe I can consider manufacturing them. For now, next step is to make prototype of new hardware iteration to eliminate problems that I found on the first board. So, stay tuned!

  Are you sure? yes | no

gplab-ide wrote 07/02/2021 at 11:45 point

What's the license of uCM4 design?  Can I make PCBs according to the uCM4 design and use the PCB commercially?

  Are you sure? yes | no

Kamil Lorenc wrote 07/02/2021 at 14:39 point

Give me few more days to figure this out. I don't know anything about licensing hardware, but I would like to allow anyone to do anything as long as he/she preserves the copyright notice and license. Something like MIT, but I'm not sure how well it fits hardware. That's why it is still not here.

Edit: I have just set license to CC BY 4.0.

  Are you sure? yes | no

gplab-ide wrote 06/11/2021 at 01:03 point

It is useful for building a raspberry pi cluster

  Are you sure? yes | no

Kamil Lorenc wrote 06/12/2021 at 18:53 point

Exactly. My idea was to play with this kind of stuff on Raspberry, that is why I designed this board.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates