Hardware Reference

Librescoot runs on two ARM boards inside the scooter: the MDB (vehicle control) and the DBC (dashboard UI and navigation).

MDB — Middle Driver Board

The main vehicle controller. Talks to the ECU over CAN, reads keycards and batteries via NFC, and manages cellular/GPS connectivity.

ComponentDetails
SoCARMv7 Cortex-A series
RAMDDR3
StorageeMMC (A/B Mender partitions)
CAN BusECU communication (Bosch motor controller)
NFCPN7150 (keycard authentication + battery BMS communication)
4G ModemSIM7100E (cellular + GPS)
Bluetooth/nRFnRF52840 co-processor via USOCK (UART + CBOR)
IP Address192.168.7.1 (USB Ethernet gadget)

nRF52840 Co-processor

The nRF52840 handles Bluetooth Low Energy and LED control. It communicates with the MDB via a USOCK protocol (UART framing with CBOR encoding). The bluetooth-service on the MDB owns this interface and exposes BLE state to Redis.

Blinker and hazard switch

The stock handlebar switch has two blinker positions, wired to separate GPIO inputs on the MDB. Some aftermarket switch assemblies add a physical hazard button that closes both inputs at once.

Since 1.2, vehicle-service recognises that: when both blinker inputs are active it reports blinker:switch as both and runs the hazard lights. Stock switches behave exactly as before, so this costs nothing if you haven't swapped yours.

DBC — Dashboard Computer

Runs the dashboard UI (Qt on a 480×480 display) and offline navigation.

ComponentDetails
SoCNXP i.MX6DL — dual Cortex-A9 @ 800 MHz
Display480×480 parallel RGB565 at 59.1 Hz
GPUVivante GC2000 (3D, etnaviv) + GC355 (2D)
Ambient LightOPT3001 sensor, read by dbc-backlight-service for auto-brightness
StorageeMMC (A/B Mender partitions + /data user partition)
IP Address192.168.7.2 (USB Ethernet gadget, via MDB)

Display pipeline

The IPU (Image Processing Unit) drives the parallel display via /dev/fb0. The GPU renders to an EGL surface using the render node (/dev/dri/renderD128) and blits to the framebuffer. The GPU and display are separate subsystems; etnaviv has no KMS connectors.

Network Topology

The MDB and DBC are connected via USB Ethernet gadget. The MDB runs a Redis instance; DBC services connect to it over the network.

MDB 192.168.7.1

Redis :6379
SSH :22

USB Ethernet
DBC 192.168.7.2

Redis client → 192.168.7.1:6379
SSH :22

From an external machine, SSH into the MDB first, then jump to the DBC:

ssh root@<mdb-ip>               # MDB direct
ssh -J root@<mdb-ip> root@192.168.7.2  # DBC via jump

UART Debug Access

Both boards expose a 3-pin UART debug header at 115200 baud, 8N1. No hardware flow control.

MDB Debug UART

PinSignal
Pin 1GND
Pin 2TXD (MDB transmits)
Pin 3RXD (MDB receives)

Baud rate: 115200

DBC Debug UART

6-pin header at the bottom of the DBC, next to the main connectors. Accessible without opening the case.

PinSignal
Pin 1 (square)GND
Pin 2
Pin 3
Pin 4RXD (DBC receives)
Pin 5TXD (DBC transmits)
Pin 6

Baud rate: 115200

Voltage: 3.3V logic — do not use 5V

If you get no output, try swapping pins 4 and 5.

Voltage warning: Both UART headers use 3.3V logic levels. Using a 5V adapter will damage the hardware.

Boot Flow

MDB Boot Sequence

  1. U-Boot loads from eMMC boot partition
  2. Kernel decompresses and initializes hardware
  3. systemd starts services in dependency order
  4. vehicle-service enters stand-by state, scooter is ready for keycard

DBC Boot Sequence

  1. U-Boot (stored in eMMC boot partition, mmcblk3boot0) loads kernel and DTB from /boot/ on the active rootfs partition
  2. Kernel initializes i.MX6DL, IPU, and etnaviv GPU
  3. Boot animation starts early (~T+3s), rendered by ThorVG to /dev/fb0, runs until multi-user.target
  4. scootui-qt Qt dashboard starts via dbc-dispatcher
  5. The /data partition (mmcblk3p4) mounts at ~T+7s after fsck, so it's not available for early services

Mender A/B Partitions

Both boards use Mender for OTA updates with atomic A/B partition switching. The active partition is selected by U-Boot on each boot. A failed update automatically rolls back to the previous partition on the next boot attempt.

PartitionContents
(raw, no partition entry)U-Boot itself, written to the eMMC boot area
mmcblk?p1/boot (vfat): kernel and DTB for the active rootfs
mmcblk?p2Rootfs A (active)
mmcblk?p3Rootfs B (inactive / update target)
mmcblk?p4/data, persistent user data (maps, settings)

← Architecture Services Reference →