Hello, Habr! After designing both a SMARC module and a motherboard to test all its interfaces, I decided to challenge myself further by creating a mini-PC for personal use. I aimed for a small box with all the necessary ports to replace my old desktop PC. Let me share with you how it turned out.
Choosing a Case
Instead of starting with the set of interfaces, as is usually done, I began by searching for a case. I wanted a highly compact design considering the SMARC module’s size of 82×50 mm. I aimed to avoid a cube shape and kept the height between 30-40 mm to allow space for a cooling system. After some online searching, I found a fantastic option measuring 120x88x38 mm, made of black aluminum, and promptly purchased it.
Figure 1. Aluminum Case 120x88x38 mm.
The package even included spare screws, a switch, and a piece of wire (oddly, just one). I specifically chose a case that could be easily assembled with side panels, allowing for straightforward debugging and temperature measurements. It looks very neat.
External Interfaces
I utilized the SECO Intel Atom x6425RE module (SOM-SMARC-EHL (C93), if anyone’s curious). It was a powerful quad-core processor (1.9GHz) with 64GB eMMC, 16GB LPDDR4x, and a full array of interfaces. Before ordering the case, I needed to determine what I truly needed and how to arrange it optimally.
On the rear panel, I have:
- 12V power supply. The 5A power unit handles everything effortlessly.
- HDMI port. Although there are combined HDMI + DP ports available, I wanted to keep it separate on a four-layer board and also add internal modules (lots of high-speed data lines).
- 2xUSB2.0. I opted for external dongles instead of an internal Wi-Fi/Bluetooth module due to the metallic case and to avoid the need for an external antenna like old cell phones had. The second USB is for wireless keyboard/mouse.
- Gigabit Ethernet. Despite planning for Wi-Fi, I decided to retain a wired interface.
Figure 2. Rear Panel Interfaces.
On the front panel, I have:
- Power and activity LEDs. Indication is always beneficial. I considered adding a third disk activity LED but decided against it.
- Power button. Likely can be configured for hibernation.
- Headset jack, including headphone and microphone ports. I will discuss the codec further below.
- Two buttons: reset and recovery, recessed to be pushed with a needle (hopefully, never needed).
- 2xUSB3.0. For user convenience, the high-speed USB ports are Type-A instead of Type-C, though I considered making everything, including power, Type-C.
Figure 3. Front Panel Interfaces.
Codec
Continuing our discussion about the codec: the module uses an I2S interface. I designed a circuit based on the NAU88C22YG (highly recommended). Configuring the codec requires I2C, which I had trouble finding in the BIOS due to the excessive settings. I eventually realized I didn’t need that complexity, as there was also room for up to two additional USB2.0 interfaces on the SMARC.
Figure 4. USB Codec Circuit Using PCM2912.
The PCM2912 USB codec fits well with just a 5V power supply, providing a simple and efficient solution, optimizing board space and reducing setup hassle.
Internal Interfaces
The module features 64GB of eMMC onboard, and I think a couple of connections for SSDs won’t hurt:
- Socket for mSATA SSDs in mini PCI-E form factor (52 pins).
- Socket for PCIE3.0x4 M.2 NGFF SSDs (75 pins).
- Two microUSB ports paralleling Type-A (USB_OTG) to avoid complex cabling.
- CR1220 RTC battery slot. I wanted a larger one but had no space (except for a vertical slot).
- Connector for cooling fan with RPM monitoring and select voltage (5V/12V via jumper), configurable in BIOS for a 3-wire/4-wire fan.
- DIP switch (beneath the module) for selecting boot modes (eMMC, SATA, PCEI, USB, etc.).
Figure 5. Internal Interfaces (Bottom View).
The underside houses SSD power, fan control circuitry, and codec. The mSATA is considerably larger than M.2.
Figure 6. Internal Interfaces (Top View).
I managed the arrangement on four layers, reserving one side for ease of debugging, and limited interfaces to only what’s necessary. I thought about adding a microSD slot but didn’t find room. In the end, USB card readers are available.
Initial Testing and Issue
Upon starting, there was no HDMI output. Fans and lights worked, but no display. Checking the module’s documentation, it mentions “2xDP++ 1.4 or 1xDP++ 1.4 and 1xHDMI 1.4 interfaces.” This means one interface can be interchangeable, but I’d configured incorrectly for a previous project.
Figure 8. DP_AUX_SEL Error.
The only remedy was a makeshift wire on the board.
Figure 9. First (second) power-up trial.
Finally, the Windows 10 desktop appeared. I left the fan directly on the board without a heat sink for now (65-75°C while setting up). With a 12W thermal output, it’s working but gets quite hot. I may try using a heat sink without active cooling, though passive might not be enough.
Figure 10. Drives in the System.
Case and Cooling
Having bought the case, I now face creating precise cuts for ports. The thought of chiseling with a file does not appeal to me. While drafting a design, I might try milling or similar techniques.
I’m considering notebook cooling solutions given the limited space inside the case.
Figure 11. HP Laptop Cooling System.
An ambitious thought was to integrate all this into a laptop case, thanks to the module’s LVDS support for displays. Thanks for your attention, and all the best with your projects!