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-shellQt5/Kirigami application. The ovos-installer installsovos-shellon Mark 2 devices so they keep a screen until the GUI rework replacement lands. - The microphone is read through the
ovos-microphone-plugin-sounddeviceplugin (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:
- 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 thevocalfusion-soundcard.kokernel module against the running kernel headers, installs it, and registers it to load at boot. - Updates the bootloader firmware. It sets the Raspberry Pi EEPROM release channel and runs an EEPROM update (a reboot may be required).
- Initialises the amplifier and board. It creates an SJ201 helper virtualenv and runs the XMOS flash tool plus the TAS5806 amplifier init.
- Sets up the touchscreen. It adds the
rpi-backlightoverlay and switches the display driver overlay (vc4-kms-v3d→vc4-fkms-v3d) for the Mark 2 panel. - Configures audio routing via a Mark 2 WirePlumber/PipeWire profile.
- Writes a tuned
mycroft.conf: thesounddevicemicrophone settings above, Mark-2 wake-word sensitivity/VAD tuning, the legacy OCP audio playback path, and (on the dev kit only) theovos-PHAL-plugin-mk2-v6-fan-controlfan 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