I’m still trying to work my way down the stack of single-board computers I have to review, and the Debix Model A has been queued up for far too long–for a few interesting reasons, and a lot of mundane ones.
The mundane ones range from flu to the work rollercoaster that is my life, but the interesting ones include the OS it shipped with (Windows 10 IoT Enterprise) and the challenges associated with testing that consistently.
Disclaimer: Debix supplied me with a Model A free of charge, for which I thank them. And, as usual, this article follows my review policy.
But I’m getting ahead of myself. Let’s start with the hardware.
Hardware
The board is pretty a drop-in replacement for a Raspberry Pi from a form factor perspective, with a few interesting changes–most notably the second set of pins (not really GPIOs, but LVDS and the primary Ethernet interface), a (thankfully) full-sized HDMI port and dual USB-C ports for power and USB 2.0 OTG:
Then there’s the stuff that is harder to notice:
- A NXP i.MX 8M Plus 1.6GHz CPU (4xA53)
- 8GB of LPDDR4 RAM
- 2.4GHz & 5GHz Wi-Fi, Bluetooth 5.0
- A tiny, easy to miss PCIe Gen 3 1-lane port
- Headphone and Mic combo port
- The usual round of UART, I2C, SPI, etc.
The second set of pins has:
- 1xLVDS, single & dual channel 8bit
- 1xMIPI CSI (4-lane)
- 1xMIPI DSI (4-lane)
- Bare Ethernet (without a line driver)
This is the first time I’ve tested an NXP chipset, and this one includes a 2.3 TOPS NPU (that I was unable to test given the usual challenges of non-mainstream SoCs) and a 1080p60 H.264/H.265 video encoder/decoder (which I was also unable able to test fully, although I suspect it was actually working in Windows since video playback was quite decent).
Software
The board has nominally complete OS support–besides the Windows 10 IoT image my board shipped with pre-installed, you can also download Android 11, Yocto, Ubuntu 22.04 and Debian 12 images, some of which (alas, not the Debian one) can self-install to the eMMC (which should be the norm).
Annoyingly, though, downloading images and flashing them was a mess. Some downloads are hosted on WeTransfer (which is not an improvement over the usual “public folder on Google Drive” setup from most manufacturers and caused me a lot of grief), and some of the eMMC images came bundled with a Windows executable to flash them to the device.
If, like me, you use almost exclusively a Mac, having to use a random Windows executable to flash things an additional hassle to deal with.
But, if like me, you deal with embedded systems a lot and have a small mini-PC dedicated to running Windows (because of Rockchip tooling), you’d expect that random executable to work, right?
Well, I was unable to flash the board via USB with most images, and was resigned to booting the board off the SD card–until I tried the Ubuntu 22.04 image that self-flashed to eMMC.
That was the key reason why it took me so long to get to this review: I had to try doing this a number of times, and even though Debix has a great deal of documentation (including, for a change, nice PDFs with all steps spelled out), I wait for a day when I could dedicate a few hours to plugging everything in, trying to flash things, etc. And then another, and another…
Windows 10 IoT Enterprise
The board booted directly to the desktop, and after a little bit of setup, I was able to use Remote Desktop to do most of the testing, starting with checking system information:
Windows 10 seemed to have support for all the relevant hardware–except wireless and audio (although of course I was able to get RDP audio to work).
The RAM was reported as 6GB (which was odd, since the values for GPU shared memory were inconsistent), and that did have an impact–the machine was usable (I could use Edge to browse and download other stuff without issues), but not as snappy as I would have liked.
However, the one thing I was interested in was in testing legacy industrial software on it. I first tried a couple of small apps I knew had both ARM and Intel versions, and all the ARM executables I tried (not many, granted) worked without issues–but 64-bit Intel executables did not.
That included some of the OPC-UA software I had lying around, so I had to spend a bit of time trying to get older software to work.
And it did–I can’t show the OPC-UA stuff running (it was licensed for a client), but Firefox 32-bit ran without issues–if a bit slowly:
However, I was unable to do any real performance testing in Windows, so I tried to move on to Debian 12.
Ubuntu 22.04
After a lot of attempts, I was able to flash the board with the Ubuntu 22.04 image, and it booted directly to a GNOME desktop without any login screen. After a few updates and disabling graphical login, I set to work.
The good news is that it runs a relatively recent kernel:
❯ uname -a
Linux debix 6.1.22 #4 SMP PREEMPT Mon Mar 11 08:30:49 UTC 2024 aarch64 aarch64 aarch64 GNU/Linux
The not-so-good news is that there were no hardware sensors visible to lm-sensors
(so I had to resort to reading the CPU temp directly).
Another thing I noticed was that lshw
had trouble figuring out the number of CPU cores, which I suspect is a quirk of the NXP chipset:
❯ lshw
debix
description: Computer
product: NXP i.MX8MPlus EVK board
serial: 181108008530a3b9
width: 64 bits
capabilities: smp tagged_addr_disabled
*-core
description: Motherboard
physical id: 0
*-cpu:0
description: CPU
product: cpu
physical id: 0
bus info: cpu@0
size: 1600MHz
capacity: 1600MHz
capabilities: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid cpufreq
*-cache
description: L1 Cache
physical id: 0
size: 32KiB
*-cpu:1
description: CPU
product: cpu
physical id: 1
bus info: cpu@1
size: 1600MHz
capacity: 1600MHz
capabilities: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid cpufreq
*-cache
description: L1 Cache
physical id: 0
size: 32KiB
*-cpu:2
description: CPU
product: cpu
physical id: 2
bus info: cpu@2
size: 1600MHz
capacity: 1600MHz
capabilities: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid cpufreq
*-cache
description: L1 Cache
physical id: 0
size: 32KiB
*-cpu:3
description: CPU
product: cpu
physical id: 3
bus info: cpu@3
size: 1600MHz
capacity: 1600MHz
capabilities: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid cpufreq
*-cache
description: L1 Cache
physical id: 0
size: 32KiB
*-cpu:4 DISABLED
description: CPU
product: idle-states
physical id: 4
bus info: cpu@4
*-cpu:5 DISABLED
description: CPU
product: l2-cache0
physical id: 5
bus info: cpu@5
*-memory
description: System memory
physical id: 6
size: 7889MiB
*-usbhost:0
product: xHCI Host Controller
vendor: Linux 6.1.22 xhci-hcd
physical id: 1
bus info: usb@1
logical name: usb1
version: 6.01
capabilities: usb-2.00
configuration: driver=hub slots=1 speed=480Mbit/s
*-usbhost:1
product: xHCI Host Controller
vendor: Linux 6.1.22 xhci-hcd
physical id: 2
bus info: usb@2
logical name: usb2
version: 6.01
capabilities: usb-3.00
configuration: driver=hub slots=1 speed=5000Mbit/s
*-usbhost:2
product: xHCI Host Controller
vendor: Linux 6.1.22 xhci-hcd
physical id: 3
bus info: usb@3
logical name: usb3
version: 6.01
capabilities: usb-2.00
configuration: driver=hub slots=1 speed=480Mbit/s
*-usb
description: USB hub
product: 4-Port USB 2.1 Hub
vendor: Generic
physical id: 1
bus info: usb@3:1
version: 1.01
capabilities: usb-2.10
configuration: driver=hub slots=4 speed=480Mbit/s
*-usbhost:3
product: xHCI Host Controller
vendor: Linux 6.1.22 xhci-hcd
physical id: 4
bus info: usb@4
logical name: usb4
version: 6.01
capabilities: usb-3.00
configuration: driver=hub slots=1 speed=5000Mbit/s
*-usb
description: USB hub
product: 4-Port USB 3.1 Hub
vendor: Generic
physical id: 1
bus info: usb@4:1
version: 1.01
capabilities: usb-3.10
configuration: driver=hub slots=4 speed=5000Mbit/s
*-mmc0
description: MMC Host
physical id: 5
logical name: mmc0
*-device
description: SDIO Device
physical id: 1
bus info: mmc@0:0001
serial: 0
capabilities: sdio
*-interface:0
description: Wireless interface
product: 43455
vendor: Broadcom
physical id: 1
bus info: mmc@0:0001:1
logical name: mmc0:0001:1
logical name: wlan0
serial: ac:6a:a3:31:38:d0
capabilities: ethernet physical wireless
configuration: broadcast=yes driver=brcmfmac driverversion=7.45.173 firmware=01-d2799ea2 multicast=yes wireless=IEEE 802.11
*-interface:1
product: 43455
vendor: Broadcom
physical id: 2
bus info: mmc@0:0001:2
logical name: mmc0:0001:2
*-bt
description: BlueTooth interface
product: 43455
vendor: Broadcom
physical id: 3
bus info: mmc@0:0001:3
logical name: mmc0:0001:3
capabilities: wireless bluetooth
configuration: wireless=BlueTooth
*-mmc1
description: MMC Host
physical id: 6
logical name: mmc1
*-mmc2
description: MMC Host
physical id: 7
logical name: mmc2
*-device
description: SD/MMC Device
product: CJTD4R
vendor: Unknown (21)
physical id: 1
bus info: mmc@2:0001
date: 04/2022
serial: 1568669415
capabilities: mmc
*-interface:0
physical id: 1
logical name: /dev/mmcblk2rpmb
*-interface:1
physical id: 2
logical name: /dev/mmcblk2
size: 62537072640
capabilities: partitioned partitioned:dos
configuration: logicalsectorsize=512 sectorsize=512 signature=fda602fe
*-volume:0
description: Windows FAT volume
vendor: mkfs.fat
physical id: 1
logical name: /dev/mmcblk2p1
logical name: /boot
version: FAT16
serial: 2078-019e
size: 479MiB
capacity: 490MiB
capabilities: primary fat initialized
configuration: FATs=2 filesystem=fat mount.fstype=vfat mount.options=rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro state=mounted
*-volume:1
description: EXT4 volume
vendor: Linux
physical id: 2
logical name: /dev/mmcblk2p2
version: 1.0
serial: 0dda7379-98cf-4613-b507-5f371e182d9c
size: 57GiB
capacity: 57GiB
capabilities: primary journaled extended_attributes large_files huge_files dir_nlink recover 64bit extents ext4 ext2 initialized
configuration: created=2022-04-28 17:42:32 filesystem=ext4 lastmountpoint=/ modified=2024-11-14 18:35:46 mounted=2024-11-14 18:35:46 state=clean
*-sound:0
description: audiohdmi
physical id: 8
logical name: card0
logical name: /dev/snd/controlC0
logical name: /dev/snd/pcmC0D0p
*-sound:1
description: es8316audio
physical id: 9
logical name: card1
logical name: /dev/snd/controlC1
logical name: /dev/snd/pcmC1D0c
logical name: /dev/snd/pcmC1D0p
*-input:0
product: 30370000.snvs:snvs-powerkey
physical id: a
logical name: input0
logical name: /dev/input/event0
capabilities: platform
*-input:1
product: audio-hdmi HDMI Jack
physical id: b
logical name: input1
logical name: /dev/input/event1
*-network:0
description: Ethernet interface
physical id: c
logical name: ens34
serial: 10:07:23:6e:00:20
capacity: 1Gbit/s
capabilities: ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
configuration: autonegotiation=on broadcast=yes driver=fec driverversion=6.1.22 link=no multicast=yes port=twisted pair
*-network:1
description: Ethernet interface
physical id: d
logical name: ens33
serial: 10:07:23:6e:00:1d
size: 1Gbit/s
capacity: 1Gbit/s
capabilities: ethernet physical tp mii 10bt-fd 100bt-fd 1000bt-fd autonegotiation
configuration: autonegotiation=on broadcast=yes driver=st_gmac driverversion=6.1.22 duplex=full ip=192.168.1.202 link=yes multicast=yes port=twisted pair speed=1Gbit/s
This prompted me to have a look at the device tree, and I found that Debix had added support for a number of devices, including (apparently) the Raspberry Pi touchscreen:
❯ ls -1 /boot/
Image
boot_logo.bin
boot_logo.sh
imx8mp-debix-4g-board.dtb
imx8mp-debix-core-HC050IG40029-D58V.C.dtb
imx8mp-debix-core-HC080IY28026-D60V.C.dtb
imx8mp-debix-core-HC101IK25050-D59V.C.dtb
imx8mp-debix-core-JW050R0320I01.dtb
imx8mp-debix-core-JW070R0520B02.dtb
imx8mp-debix-core-JW080R1120B02.dtb
imx8mp-debix-core-JW101HD-X00.dtb
imx8mp-debix-core-ar1335.dtb
imx8mp-debix-core-board.dtb
imx8mp-debix-core-gc2145.dtb
imx8mp-debix-core-ov5640.dtb
imx8mp-debix-io-HC050IG40029-D58V.C.dtb
imx8mp-debix-io-HC080IY28026-D60V.C.dtb
imx8mp-debix-io-HC101IK25050-D59V.C.dtb
imx8mp-debix-io-JW050R0320I01.dtb
imx8mp-debix-io-JW070R0520B02.dtb
imx8mp-debix-io-JW080R1120B02.dtb
imx8mp-debix-io-JW101HD-X00.dtb
imx8mp-debix-io-board.dtb
imx8mp-debix-io-imx219.dtb
imx8mp-debix-io-raspberrypi-touchscreen.dtb
imx8mp-debix-lora-HC050IG40029-D58V.C.dtb
imx8mp-debix-lora-HC080IY28026-D60V.C.dtb
imx8mp-debix-lora-HC101IK25050-D59V.C.dtb
imx8mp-debix-lora-JW050R0320I01.dtb
imx8mp-debix-lora-JW070R0520B02.dtb
imx8mp-debix-lora-JW080R1120B02.dtb
imx8mp-debix-lora-JW101HD-X00.dtb
imx8mp-debix-lora-board.dtb
imx8mp-evk.dtb
This is a nice touch, and likely to speed up integration into vertical solutions.
Power
The board can be powered via USB-C or PoE (via an additional module), and I used a 5V/3A power supply plugged into a Zigbee power socket, which gave me the following measurements:
- 4W on Windows, idle, peaking up to 5W under load
- 2.7W idle on Ubuntu (with or without a graphical session)
- 5W under load on Ubuntu
This sort of confirmed why the board felt very hot under Windows–it was drawing a lot more power, which is a common theme in Windows on ARM devices.
Temperature
Given that it came without any cooling solution, and even though Debix touts the fact that the board features industrial-grade components, I added one of my trademark copper blocks as soon as I could.
While running Windows 10, the board got considerably hot. Not uncomfortably so to the touch, but enough for me to worry about. Under Ubuntu, it idled at 49 C, but with a sustained 100% load across all cores for several minutes (courtesy of ollama
) I couldn’t get it to go past 64C with the copper shim in place–nor did it ever throttle below 1.6GHz, which was impressively stable:
Performance
Of course, this stability comes at a price: It was slightly slower than a Raspberry Pi 4 at running ollama, (3.5 tokens/s vs 3.77), but sbc-bench
gave me some interesting results when I compared it to similar boards:
Device / details | Clockspeed | Kernel | Distro | 7-zip multi | 7-zip single | AES | memcpy | memset | kH/s |
---|---|---|---|---|---|---|---|---|---|
NXP i.MX8MPlus EVK board | 1600 MHz | 6.1 | Ubuntu 22.04.5 LTS (jammy) arm64 | 4400 | 1198 | 746700 | 2610 | 12340 | - |
Rockchip RK3566 EVB2 LP4X V10 Board | 1800 MHz (throttled) | 5.10 | Raspbian (bullseye) | 3080 | 1294 | 827780 | 2930 | 7910 | 3.98 |
Rockchip RK3566 EVB2 LP4X V10 Board | ~1340 MHz | 5.10 | Debian 11 bullseye | 3390 | 948 | 620820 | 2060 | 4220 | - |
Radxa Zero | 1800 MHz | 6.6 | Armbian 24.5.5 bookworm | 4530 | 1337 | 834820 | 1580 | 5620 | 6.65 |
Raspberry Pi Zero 2 (RP3A0) | 1200 MHz | 5.10 | Raspberry Pi OS Buster | 3640 | 1007 | 36300 | 1320 | 1790 | - |
Raspberry Pi 4B | 1800 MHz | 5.15 | Armbian Jammy arm64 | 5640 | 1752 | 36260 | 2580 | 3110 | - |
I found the memset
value particularly interesting, as it was the highest of all comparable boards I tested, and the AES performance was also quite good–for other tests like 7-zip multi/single performance, AES, and memcpy, the Model A is still quite competitive, and I think that a 1800MHz board would nudge it a hair beyond the Pi 4B.
But, as usual, benchmarks are only part of the story, and my gut feeling is that the performance of this board is more than enough for most applications, even clocked at 1.6GHz–and the overall stability under load is a big plus for industrial applications.
Conclusion
In summary, the Debix Model A is a capable and versatile Raspberry Pi alternative, and so far the only SBC I tested that came with Windows 10 IoT Enterprise pre-installed–and thus, thanks to the x86 emulation, an interesting choice for industrial applications that require Windows compatibility.
As to software, I am a bit sad I couldn’t get neither the Windows flashing tool nor Debian 12 to work–I have no idea why the self-flashing process the Ubuntu image uses isn’t available for all images, but on the upside the documentation is quite detailed and comprehensive.
That documentation is a big plus, and the board itself is well-built, with a lot of interesting features that make it a good choice for a variety of projects–from industrial to hobbyist–and the power consumption is OK, although I would ship a cooling solution with boards pre-loaded with Windows.