Skip to content

Mycroft Mark 2 Hardware

Looking for a device to buy or flash today?

Don't start here. The Mark 2 is discontinued, best-effort legacy hardware with rough edges. See raspOVOS for the turnkey image that's the closest thing to a ready-to-buy-and-flash OVOS device today.

In a nutshell

The Mark 2 is Mycroft's second smart-speaker: a Raspberry Pi 4 with a touchscreen and a custom audio board (the SJ201 HAT). Unlike the faceplate-only Mark 1, it runs the complete OVOS software stack plus a graphical shell. Getting its hardware working takes a custom kernel driver, a firmware (EEPROM) update, and board-specific tweaks. This makes the Mark 2 a best-effort, not-actively-maintained legacy platform, even more so than the Mark 1. There are also two slightly different boards (an early "dev kit" and the retail unit) that need slightly different setup. This page documents the OVOS way to set it up (via the ovos-installer), the kernel driver involved, and the one thing you must not do: mix in Neon packages (see the warning below). Audio, fan control, the touchscreen, and the hardware buttons all work through the installer today. The LED ring works out of the box on the dev kit; on the retail Mark II it is the one piece of the SJ201 board the installer path doesn't drive yet. New to the terms here? See the Glossary.

The Mycroft Mark 2 is built around a Raspberry Pi 4 carrying the SJ201 HAT. This is an audio board with a far-field microphone array (an XMOS VocalFusion DSP), a TAS5806 speaker amplifier, an LED ring, a fan, and hardware buttons, behind a square IPS touchscreen.

Hardware support was left in rough shape

Mycroft's hardware bring-up for the Mark 2 was incomplete and poorly documented. Making the SJ201 work needs a custom out-of-tree kernel module, device-tree overlays, a bootloader/EEPROM firmware update, and a separate amplifier init step. None of this is standard Raspberry Pi practice. OVOS has reconstructed a working path, but expect rough edges and treat everything below as best-effort.


Two boards: dev kit vs retail Mark II

There are two SJ201 revisions, and they need slightly different setup:

Dev kit (early backers) Retail Mark II
SJ201 board revision 6 revision 10
Tell-tale exposes an attiny1614 micro-controller on the i2c bus no attiny1614
Fan control needs the ovos-PHAL-plugin-mk2-v6-fan-control plugin (pip install ovos-PHAL-plugin-mk2-fan-control — the pip name has no v6) PWM fan handled by a device-tree overlay
LED ring driven by the installer via ovos-PHAL-plugin-sj201-leds (dev-kit boards only) not driven by the installer (see the LED note below)

The ovos-installer tells them apart automatically by probing the i2c bus: a Raspberry Pi 4 with the tas5806 amplifier present is treated as the "Mark 2 family", and if an attiny1614 is also present it is treated as the dev kit.


Support status — best-effort legacy

When Mycroft AI shut down, Neon AI officially took over the Mark 2: they continued selling the devices and publish their own Mark 2 software (see Neon's hardware packages below). OVOS still runs on the Mark 2 but treats it as a best-effort, not actively maintained legacy platform.

Do not install Neon packages on an OVOS system (and vice-versa)

Neon is downstream of OVOS and runs on a completely different release cycle. Neon packages pin older versions of OVOS packages. If you install Neon's Mark 2 packages on top of an OVOS install, pip will happily downgrade your OVOS packages to satisfy those pins, leaving you in a broken, half-downgraded, non-functional state that is very hard to untangle.

Pick one stack and stay on it. The OVOS path is the ovos-installer, which uses only OVOS repositories. It pulls in no Neon packages. If you want Neon's Mark 2 software instead, use their image/packages on their own and don't mix OVOS packages into it.


How OVOS runs on the Mark 2

Unlike the Mark 1, the Mark 2 has a real display, so it runs the graphical OVOS experience:

  • The standard core services run exactly as on any other device. There is no Mark 2 fork of ovos-core.
  • The screen is driven by the GUI service feeding the ovos-shell Qt5/Kirigami application. The ovos-installer installs ovos-shell on Mark 2 devices so they keep a screen until the GUI rework replacement lands.
  • The microphone is read through the ovos-microphone-plugin-sounddevice plugin (the installer tunes its block size and latency for the SJ201), not an ALSA/i2c helper.

What the ovos-installer does for the Mark 2

When the ovos-installer detects Mark 2 hardware it applies a dedicated ovos_hardware_mark2 role. (On the Mark 2 you must use the installer's virtualenv method. The container method is not supported there.) That role:

  1. Builds and installs the OVOS kernel driver. It clones VocalFusionDriver, copies the SJ201 device-tree overlays (soundcard, buttons, PWM fan; Pi-5 variants auto-selected), enables the UART, compiles the vocalfusion-soundcard.ko kernel module against the running kernel headers, installs it, and registers it to load at boot.
  2. Updates the bootloader firmware. It sets the Raspberry Pi EEPROM release channel and runs an EEPROM update (a reboot may be required).
  3. Initialises the amplifier and board. It creates an SJ201 helper virtualenv and runs the XMOS flash tool plus the TAS5806 amplifier init.
  4. Sets up the touchscreen. It adds the rpi-backlight overlay and switches the display driver overlay (vc4-kms-v3dvc4-fkms-v3d) for the Mark 2 panel.
  5. Configures audio routing via a Mark 2 WirePlumber/PipeWire profile.
  6. Writes a tuned mycroft.conf: the sounddevice microphone settings above, Mark-2 wake-word sensitivity/VAD tuning, the legacy OCP audio playback path, and (on the dev kit only) the ovos-PHAL-plugin-mk2-v6-fan-control fan plugin.

ovos-i2csound is not used by the installer

A common misconception: the ovos-installer does not use ovos-i2csound or any other raspOVOS helper script. ovos-i2csound belongs to the raspOVOS image. The installer's Mark 2 audio comes entirely from the VocalFusionDriver kernel module above.

LED-ring support differs by board

On the dev kit the installer drives the ring automatically: alongside the ovos-PHAL[mk2dev] extra it git-installs ovos-PHAL-plugin-sj201-leds, which drives the 12-pixel ring directly over i2c (dev-kit boards only). On the retail Mark II the installer ships no LED plugin, so the ring stays dark. One option there is Neon's neon-phal-plugin-linear_led (see the Neon packages table below), which already drives the ring's listening/speaking/muted/error animations. Keep in mind the warning above about not mixing Neon and OVOS packages on the same system.


The OVOS kernel driver: VocalFusionDriver

OpenVoiceOS/VocalFusionDriver is OVOS's out-of-tree Linux kernel driver and device-tree overlays for the SJ201 HAT. It builds a vocalfusion-soundcard.ko module that wires up the SJ201's XMOS VocalFusion DSP microphone over I2S (configuring the master clock on a GPIO, plus reset/power lines), and ships the device-tree overlays for the soundcard, the hardware buttons, and the PWM fan, with both standard and Raspberry Pi 5 variants. The overlays are shared across SJ-201 Rev6 and Rev10 (the rev10 in the PWM-fan overlay filename is just a name. That overlay also targets Rev6&10). So there is no rev-specific driver code. The TAS5806 amplifier is initialized separately at boot rather than inside the module.

It is actively used (the installer builds it on every Mark 2 setup) and is kept working against current kernel versions. It is community-maintained, adapted from earlier community XMOS-loader code.


The raspOVOS image path

ovos-installer is one way to get OVOS onto a device. The other is raspOVOS, a ready-made Raspberry Pi OS image (OpenVoiceOS/raspOVOS) with OVOS layered on top.

The two paths set the SJ201 up differently. The installer builds the VocalFusionDriver kernel module (above). The raspOVOS image instead detects and configures i2c sound HATs with ovos-i2csound and friends. See i2c Sound & Audio Setup for those tools.

ovos-i2csound belongs to the raspOVOS image, not the installer

ovos-i2csound is not invoked by the ansible ovos-installer, which uses the VocalFusionDriver kernel module for the Mark 2 instead. Don't expect ovos-i2csound on an installer-provisioned system.


Neon Mark 2 packages (official, but separate)

Because Neon AI is the platform's official maintainer, they publish their own Mark 2 hardware packages. These are Neon-maintained and downstream of OVOS. They are useful to know about, but see the downgrade warning before installing any of them on an OVOS system.

Neon package Purpose
sj201-interface (repo) Python library + sj201 CLI for the board itself — detect revision (get-revision → 6 or 10), reset the LED ring, set fan speed, init the TI/TAS5806 amplifier, patch config.txt. Derived from Mycroft's mark-ii-hardware-testing.
neon-phal-plugin-linear_led (repo) PHAL plugin driving the LED ring (listening/speaking/muted/error animations).
neon-phal-plugin-fan (repo) CPU-temperature-based fan control.
neon-phal-plugin-switches (repo) Reads the SJ201 hardware buttons (volume up/down, action, mute).

Buildroot: where OVOS originated

OpenVoiceOS/ovos-buildroot is the original Buildroot-based embedded Linux distribution that first brought ovos-core to devices like the Raspberry Pi and the Mark 2. It is the project where OpenVoiceOS itself began (drawing on Mycroft AI, HassOS and SkiffOS). It builds the SJ201 audio stack from its own Buildroot packages for the VocalFusion/XVF3510 driver, baked into the image at build time.

It is now a legacy / dormant project: it is not formally archived, but it has no current releases and little recent activity. New installs should use the ovos-installer or the raspOVOS images instead. It is documented here because it is a meaningful part of OVOS history and still the ancestor of today's Mark 2 audio packaging.



Source code: OpenVoiceOS/ovos-installer (ovos_hardware_mark2 role) and OpenVoiceOS/VocalFusionDriver.


Read next: Contributing Related: Mark 1 Hardware · i2c Sound & Audio Setup · PHAL · OCP Audio Plugin