Hardware-Referenz
LibreScoot läuft auf zwei ARM-Boards im Roller: dem MDB (Fahrzeugsteuerung) und dem DBC (Dashboard-UI und Navigation).
MDB – Middle Driver Board
Der zentrale Fahrzeug-Controller. Spricht per CAN mit der ECU, liest Keycards und Akkus per NFC und verwaltet Mobilfunk/GPS.
| Komponente | Details |
|---|---|
| SoC | ARMv7 Cortex-A |
| RAM | DDR3 |
| Speicher | eMMC (A/B-Mender-Partitionen) |
| CAN-Bus | ECU-Kommunikation (Bosch-/Votol-Motorcontroller) |
| NFC | PN7150 (Keycard-Authentifizierung + BMS-Kommunikation mit dem Akku) |
| 4G-Modem | SIM7100E (Mobilfunk + GPS) |
| Bluetooth/nRF | nRF52840-Co-Prozessor per USOCK (UART + CBOR) |
| IP-Adresse | 192.168.7.1 (USB-Ethernet-Gadget) |
nRF52840-Co-Prozessor
Der nRF52840 kümmert sich um Bluetooth Low Energy und LED-Steuerung. Er kommuniziert mit dem MDB über ein USOCK-Protokoll (UART-Framing mit CBOR-Encoding). Der bluetooth-service auf dem MDB besitzt diese Schnittstelle und stellt den BLE-Status in Redis bereit.
DBC – Dashboard Computer
Betreibt das Dashboard-UI (Qt auf 480×480-Display) und die Offline-Navigation.
| Komponente | Details |
|---|---|
| SoC | NXP i.MX6DL – Dual Cortex-A9 @ 800 MHz |
| Display | 480×480 paralleles RGB565 mit 59,1 Hz |
| GPU | Vivante GC2000 (3D, etnaviv) + GC355 (2D) |
| Umgebungslicht | OPT3001-Sensor, gelesen vom dbc-backlight-service für Auto-Helligkeit |
| Speicher | eMMC (A/B-Mender-Partitionen + Nutzerpartition /data) |
| IP-Adresse | 192.168.7.2 (USB-Ethernet-Gadget, über das MDB) |
Display-Pipeline
Die IPU (Image Processing Unit) bedient das parallele Display über /dev/fb0. Die GPU rendert auf eine EGL-Surface über den Render-Node (/dev/dri/renderD128) und kopiert das Ergebnis in den Framebuffer. GPU und Display sind separate Subsysteme; etnaviv hat keine KMS-Connector.
Netzwerk-Topologie
MDB und DBC sind per USB-Ethernet-Gadget verbunden. Das MDB betreibt eine Redis-Instanz; DBC-Services verbinden sich über das Netzwerk damit.
Redis :6379
SSH :22
Redis-Client → 192.168.7.1:6379
SSH :22
Von einem externen Rechner erst auf das MDB einloggen, dann aufs DBC jumpen:
ssh root@<mdb-ip> # MDB direkt ssh -J root@<mdb-ip> root@192.168.7.2 # DBC per Jump-Host
UART-Debug-Zugriff
Beide Boards bieten einen 3-poligen UART-Debug-Header mit 115200 Baud, 8N1, ohne Hardware-Flusskontrolle.
MDB-Debug-UART
| Pin | Signal |
|---|---|
| Pin 1 | GND |
| Pin 2 | TXD (MDB sendet) |
| Pin 3 | RXD (MDB empfängt) |
Baudrate: 115200
DBC-Debug-UART
6-poliger Header an der Unterseite des DBC, neben den Hauptsteckern. Erreichbar, ohne das Gehäuse zu öffnen.
| Pin | Signal |
|---|---|
| Pin 1 (quadratisch) | GND |
| Pin 2 | — |
| Pin 3 | — |
| Pin 4 | RXD (DBC empfängt) |
| Pin 5 | TXD (DBC sendet) |
| Pin 6 | — |
Baudrate: 115200
Spannung: 3,3-V-Logik – kein 5 V
Wenn du keine Ausgabe bekommst, tausch Pin 4 und 5.
Boot-Ablauf
MDB-Boot-Reihenfolge
- U-Boot lädt aus der eMMC-Boot-Partition
- Kernel entpackt sich und initialisiert die Hardware
- systemd startet Services in Abhängigkeitsreihenfolge
vehicle-servicegeht in den Zustandstand-by, der Roller ist bereit für die Keycard
DBC-Boot-Reihenfolge
- U-Boot (in der eMMC-Boot-Partition mmcblk3boot0) lädt Kernel und DTB aus
/boot/der aktiven Rootfs-Partition - Kernel initialisiert i.MX6DL, IPU und etnaviv-GPU
- Boot-Animation startet früh (~T+3s), wird von ThorVG nach
/dev/fb0gerendert und läuft bis multi-user.target scootui-qtQt-Dashboard startet perdbc-dispatcher- Die
/data-Partition (mmcblk3p4) wird ~T+7s nach fsck gemountet, steht frühen Services also noch nicht zur Verfügung
Mender-A/B-Partitionen
Beide Boards nutzen Mender für OTA-Updates mit atomarem A/B-Partitionswechsel. Welche Partition aktiv ist, wählt U-Boot bei jedem Boot. Ein fehlgeschlagenes Update rollt beim nächsten Boot automatisch auf die vorherige Partition zurück.
| Partition | Inhalt |
|---|---|
| mmcblk?p1 | U-Boot-Environment |
| mmcblk?p2 | Rootfs A (aktiv) |
| mmcblk?p3 | Rootfs B (inaktiv / Update-Ziel) |
| mmcblk?p4 | /data, persistente Nutzerdaten (Karten, Einstellungen) |