ESPRESSObin with an mPCIe Video card.

Last Update: Dec 2, 2021 @ 10:06 Preliminary information, subject to change.

This is an Application Note that investigates how to use the Globalscale ESPRESSObin V4 and V7 single board computers to support an mPCIe graphics card.

The ESPRESSObin boards do not have any display hardware, using just the serial port console for control. This leaves the mPCIe port as the only location for display hardware. A number of obsolete VGA-era boards were identified, but which are no longer available. In May 2021, the Commell (Taiwan) MPX-768 was announced, locally priced about CA$200.

This board uses the Silicon Motion SM768 SOC device, with

  • embedded ARM Cortex R5 cpu + firmware that handles all the following;
    • 256MB internal DDR3 video ram.
    • embedded HDMI v1.4 controller (1920×1080 supported).
    • embedded USB2 hub with 4 ports for peripherals.
    • decoding and displaying various video formats.
    • communications via the mPCIe interface.
The V7 board with Commell MPX-768 graphics board installed. An extension cable to the HDMI connector is not shown.
Note also the SATA device connector pair on the bottom edge of the board. A half height 128GB SATA module will be fitted here.

The MPX-768 is a valid mPCIe device and may include the internal 4-port USB hub. If so, the V4 / V7 jumpers have to be set to route the USB2 connector to the mPCIe connector pins 36 and 38.

If the MPX-768 does not expose the internal USB hub, the jumpers can be left enabling USB2 devices.

Wikipedia has a detailed discussion of PCIExpress.

Developing a mPCIe driver is a non-trivial effort. A comprehensive discussion can be found here. Silicon Motion have helpfully provided us with the Ubuntu mPCIe driver source code for their SM768 SoC device. This code builds a Loadable Kernel Module (a.k.a. LKM, a .ko binary file).

The Mini PCIe interface explained, briefly…

Modern PC and ARM based hardware implements PCI, either as an internal module or external chip. Depending on the age of the PC, there may be PCI slots (with a parallel interface now considered obsolete), while recent PCs have PCI Express slots, which are smaller and use faster serial lanes.

PCI Express is based on point-to-point topology, with separate serial links connecting every device (also known as an endpoint), to the root complex controller that can be integrated into the CPU.

The Mini PCIe (or mPCIe) hardware interface is 52 pins, with (most commonly) a single Receive / Transmit differential on pins 23,25 and 31,33 respectively. There are two pins (36,38) reserved for a module USB connection that supports a usb device. Note here that the host hardware may not provide a way to access any mPCIe USB device(s).

Similarly, a PC host (e.g. laptop) may support configuring the mPCIe connection for a WiFi board only. Industrial embedded hardware (Intel or ARM based) often support multiple mPCIe modules.

The most common mPCIe boards are WiFi network devices in laptops. These are usually fitted to internal connectors that require opening the laptop case. This is also because the mPCIe peripheral has two screws that secure it to the host hardware.

Hardware Assumptions to be investigated

The SM768 SOC on the MPX-768 board includes the ARM Cortex R5 cpu with its own OS firmware that is independent of the host hardware operating system (linux or Windows). Put another way, the host sends and receives commands and data to / from the MPX-768 via mPCIe bus.

What does linux detect with the lspci -v command

Something like this is expected:

00:00.0 Graphics controller: Commell Corporation MPX-768
Subsystem: Commell Corporation < more info not presented >

What does linux detect with the lsusb command

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus nnn Device 001: ID <tbd> Commell <tbd> HID? | MSD?

Can the MPX-768 ARM R5 firmware be updated?

The R5 firmware is loaded at the factory. Since this is a new product announced in late 2021, the possibility exists that firmware will get updated. It’s unknown at present how or if this could be updated. In general, the process is likely to be an app (Windows or linux) that sends commands to the MPX-768 that sets it into update mode, and then receives the new firmware binary.

First Evaluation Setup

Commell provide a Windows 10-64 bit driver (and Windows 7-32 bit which we won’t use) so a mPCIe–>PCIe adapter board is required to test in a desktop workstation. This adapter board was tested in a Windows 10-32 desktop using an Intel WiFi module. The WiFi module was identified and the appropriate driver loaded.

The aim here is to identify and document what the MPX-768 identifies itself as to Windows 10-64, and what additional functionality is present. For example, does any attached HDMI monitor configure itself to the MPX-768 and display data like any other screen. Do any additional USB ports appear?

< more to be added >