Firmware update of PC Engines APU2 systems

Published on 2020-02-16

This guide explains how to update the firmware of systems based on the PC Engines APU2 platform (apu2d0 to apu4d4).

You need the following hardware:

  • computer
  • USB to RS232 (serial) cable with DB9 connector or adapter
  • USB drive
  • apu4d4 or other apu2 system

And this software:

Connect the USB drive to your computer. Use balenaEtcher to copy the TinyCore image onto the drive. The SYSLINUX partition should be mountable on all major operating systems. Put the .rom firmware file onto it. Unmount the USB drive, disconnect it from your computer and connect it to the apu2.

Connect your serial cable setup to your computer and the apu2. Power the apu2 up.

On Linux connecting to the serial console works like this:

user@host ~$ screen /dev/ttyS0 115200

On macOS it works like this:

user@host ~$ ls /dev/cu.usbserial*

user@host ~$ screen /dev/cu.usbserial-1234 115200

PuTTY should work on Microsoft Windows.

Press F10 to display a boot menu prompt:

boot menu

Select your USB drive. TinyCore will boot:

tinycore prompt

TinyCore might try to mount some partition forever. Press Ctrl+C to cancel.

After TinyCore has booted, the firmware image should be in /media/SYSLINUX. Use flashrom to flash it.

If your firmware version is older than v4.6.7 mainline or 4.0.15 legacy or you get a motherboard mismatch warning when trying to flash, run this command:

user@host ~$ flashrom -w /media/SYSLINUX/apuX_vX.X.X.X.rom -p internal:boardmismatch=force

Otherwise run this one:

user@host ~$ flashrom -w /media/SYSLINUX/apuX_vX.X.X.X.rom -p internal

The firmware will be replaced:

flashrom writes firmware

Shut down TinyCore:

user@host ~$ reboot

Powercycle the apu2 by pulling and reinserting the power plug.

The version number of your new firmware should be displayed during BIOS startup.

PS: The apu2 can be unbricked with the flash recovery module spi1a.

PPS: Apparently OpenBSD fails to boot with legacy firmware versions and mainline version Version still works and version should work again.