Files
Aime/docs/01-hardware.md
schakal00783andClaude Opus 5 0aa6a37325 feat(system): System von der SD-Karte auf die eMMC umgezogen
Alles lag auf der SD (System, DB, Aufnahmen, Modelle), die verloetete eMMC lag
ungenutzt daneben. SD-Karten sterben im Dauerbetrieb meist ohne Vorwarnung, und
Aime schreibt bei jeder Aufnahme WAV + MP3 plus DB und Suchindex. Die eMMC meldet
ihren Verschleiss: life_time 0x01, pre_eol 0x01 = unter 10 % verbraucht.

Vorher vollstaendige Sicherung der SD gezogen und verifiziert (94.501 Eintraege =
find / -xdev, SHA-256-Stichprobe).

Drei Erkenntnisse:

1. mkfs.ext4 (e2fsprogs 1.47) setzt orphan_file, was das Incompat-Merkmal
   orphan_present mitbringt -- U-Boots ext4-Leser verweigert dann das Lesen.
   Vor dem ersten Start entfernt: tune2fs -O ^orphan_file,^metadata_csum_seed.
2. U-Boot liest boot.scr und armbianEnv.txt von der SD, solange sie steckt --
   nachgewiesen, indem die SD-Konfiguration testweise wieder auf die SD-Root
   zeigte und das Board prompt das alte System hochfuhr.
3. Daher aime-bootsync.service: spiegelt /boot beim Start und beim Herunterfahren
   auf die SD. Sonst liefe ein Kernel-Update auseinander (neue Module auf der
   eMMC, alter Kernel von der SD). Faellt die SD aus, greift die vollstaendige
   eMMC-Bootkette.

Ergebnis: / = mmcblk0p1 (aime-emmc), keine fehlgeschlagene Unit, dieselben fuenf
Dienste aktiv wie vorher, HTTP 200, NPU v0.9.8, Suchindex 1799/1799.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-03 01:07:26 +02:00

3.5 KiB
Raw Permalink Blame History

01 — Hardware

Board: Youyeetoo R1

Komponente Detail
SoC Rockchip RK3588S — 4× Cortex-A76 (max 2,256 GHz) + 4× A55, NPU 6 TOPS (3 Kerne)
RAM 8 GB
OS Armbian, Kernel 6.1.115 — System auf der eMMC (seit 2026-08-03, siehe 07 – Betrieb)
Speicher eMMC 58 GB (mmcblk0p1, Label aime-emmc) = / · SD-Karte 119 GB (mmcblk1p1, Label armbi_root) = Bootdateien + Rückfallebene, sonst nicht eingehängt
Netz WLAN 192.168.1.200 (primär, auto-join) / LAN 192.168.1.50
Funk Intel AX210 M.2: BT über USB (hci0, Name "Aime") + WiFi über PCIe (wlP4p65s0). Alter RTL8821CU-USB-Dongle entfernt.
Kühlung Lüfterlos (harte Anforderung). Lüfter am roten POWER-Port war unregelbar (Konstantspannung) und wurde entfernt; echter PWM-Header (FAN 2-Pin, hwmon7) bleibt ungenutzt.

Audio-Hardware

flowchart TB
    subgraph PC["Windows-PC"]
        TEAMS["Teams / Medien-Wiedergabe"]
    end
    subgraph BOARD["Youyeetoo R1"]
        UAC2["USB-C: UAC2-Audio-Gadget<br/>(Board erscheint am PC als Headset)"]
        H390["USB-A: Logitech H390 Headset<br/>ALSA card3, 046d:0a8f"]
        ES(("ES8323 3,5mm<br/>DEFEKT")) 
        AX["AX210 Bluetooth<br/>'Aime' = BT-Headset fürs iPhone"]
    end
    IPHONE["iPhone 'Skynet16'"]

    TEAMS <--> UAC2
    IPHONE <-->|"HFP/eSCO (mSBC)"| AX
    H390 --- BOARD
  • Logitech H390 USB-Headset = Mikrofon + Hörer des Nutzers. Ersetzt den defekten ES8323-3,5mm-Pfad (Mikrofonverstärkung stand fest auf −42,14 dB, Treiberdefekt; S16-Modus zusätzlich verbuggt → Umstieg 2026-07-07).
  • USB-C zum PC = UAC2-Gadget: Der PC sieht das Board als USB-Headset. PC-Audio kommt als ALSA-Capture alsa_input.platform-fc000000.usb... ins Board; Richtung Board→PC (alsa_output.platform-fc000000.usb) hört die Gegenseite den Nutzer.
  • Headset-Inline-Tasten (Vol +/−, Mute) = HID-Events auf /dev/input/event5 → Daemon aime-headset-keys.service → pactl-Sink-Volume.
  • Windows-Lautstärkeregler wirkt nicht auf den Datenstrom, sondern kommt als UAC2-Mixer-Wert (amixer -c UAC2Gadget numid=7) → aime-volbridge-headset.sh pollt und setzt die Headset-Sink-Lautstärke.

NPU-Nutzung

Aufgabe Engine Modell
Whisper-Encoder RKNN (NPU) turbo-encoder-fp16.rknn (selbst konvertiert, Kosinus-Ähnlichkeit 0,9998 zur CPU-Referenz)
LLM-Analyse rkllm 1.3.0 (NPU) gemma3-4b-w8a8g128-16k.rkllm
Diarization CPU (sherpa-onnx) bewusst CPU: RTF 0,194 ≈ NPU-Referenzwert

Thermik (lüfterlos!)

Whisper/Diarization auf allen A76-Kernen bei Volltakt → bigcore critical temp → Hardware-Schutzabschaltung (zweimal passiert, Aufnahmen schienen „verschwunden“). Gegenmaßnahmen:

flowchart LR
    START["transcribeWav() startet"] --> CAP["A76-Takt kappen<br/>2256 → 1608 MHz<br/>(aime-cpucap.sh, sudoers NOPASSWD)"]
    CAP --> WORK["Whisper + Diarization<br/>(~72 °C statt >90 °C)"]
    WORK --> GUARD{"Temp > 90 °C?"}
    GUARD -- ja --> STOPP["SIGSTOP Whisper<br/>bis < 78 °C, dann SIGCONT"]
    GUARD -- nein --> WORK
    WORK --> FIN["finally: Takt zurück auf 2256 MHz"]
  • Cap umschließt die ganze transcribeWav (Whisper und Diarization) — Absturz #2 kam, weil die Diarization nach Whisper wieder mit Volltakt lief.
  • 1,8 GHz wurde getestet und verworfen (~90 °C, Guard-Flattern). 1,6 GHz ≈ 72 °C stabil.
  • Seit Whisper-Encoder auf NPU: Transkription 90 °C → 59 °C; Cap kostet nur noch ~7 % Gesamtzeit.