Dieses Handbuch beschreibt Integration und Betrieb des Coldwave Yuki Module (YMOD) der ImagineOn GmbH — eines zellularen Connectivity-Moduls, das eine Trägerplatine bzw. einen Host-MCU über ein lokales UART-Protokoll an das Coldwave-Backend anbindet. Zielgruppe sind Integratoren (Entwicklung der Trägerplatine und der Host-Firmware) sowie Anlagenbetreiber.
Das YMOD ist eine Einbaukomponente. Bestimmte konformitäts- und sicherheitsrelevante Schritte (RF-Layout, Antennenpfad, Schlüssel-Provisioning, Secure-Boot-/Anti-Rollback-Konfiguration, Watchdog-Aktivierung, Endprodukt-Zertifizierung) liegen in der Verantwortung des Integrators bzw. des Endprodukt-Herstellers — siehe §16 und den Modul-Integrationsnachweis in der technischen Dokumentation.
ImagineOn GmbH
Neusser Str. 27–29
50670 Köln, Deutschland
Web: https://www.imagineon.de
Compliance: compliance@imagineon.de · PSIRT: security@coldwave.io
Die Konformitätsbewertung erfolgt nach Modul A (interne Fertigungskontrolle). Angewandte EU-Rechtsakte:
eg912 / bg77) der Richtlinie 2014/53/EU entspricht.
Der vollständige Text der EU-Konformitätserklärung (Nr. YMOD-DoC-1.0.0, ausgestellt am 2026-06-07,
Quell-Commit 7247ed2b53) ist Teil der technischen Dokumentation und beim Hersteller verfügbar
(compliance@imagineon.de). Online-Bezugsquelle: [zu bestätigen].
| Bereich | Norm |
|---|---|
| Sicherheit | EN 62368-1:2020+A11:2020 |
| HF-Exposition | EN 50665:2017 |
| EMV (Funk) | EN 301 489-1 V2.2.3, EN 301 489-17 V3.2.4, EN 301 489-52 V1.2.1 |
| Funk (Mobilfunk) | EN 301 908-1 V15.2.1, EN 301 908-13 V13.2.1 |
| Cybersicherheit | EN 18031-1:2024 |
| Vorausschauend (CRA) | ETSI EN 303 645 V3.1.3 |
Hinweis: Das EFR32MG26-SoC enthält ein BLE-/802.15.4-Funkteil, das in beiden YMOD-Varianten per Firmware nicht verlinkt ist (kein Stack im Build). Es ist ein plattformbezogener Vorhalt für künftige Varianten. Frequenz, Modulation und Sendeleistung des Mobilfunkteils sind vollständig durch das jeweils bestückte, vorzertifizierte Quectel-Modul (EG912 bzw. BG77) spezifiziert; YMOD enthält kein eigenes Funkdesign.
Das YMOD ist ein zellulares Connectivity-Modul zur Einbettung auf einer kundenseitigen Trägerplatine. Es übernimmt für einen Host-MCU die Mobilfunkanbindung (LTE), die DTLS-gesicherte Backend-Kommunikation (Telemetrie/Property-Sync, Remote-Konfiguration, OTA-Trigger), die Geräteidentität sowie — in der bg77-Variante — die GNSS-Positionsbestimmung, und stellt diese Dienste über ein TLV-basiertes UART-Protokoll bereit.
Typischer Einsatz: als bestücktes Funkmodul in Industrie-/Gewerbeumgebungen. Die Versorgung erfolgt über die Trägerplatine (SELV/PELV).
YMOD führt kein Modbus-/BACnet-Feldbus-Gateway, kein Scripting/Script-VM, keine Supercaps/Power-Fail-Pufferung, kein batteriegepuffertes RTC und kein Datenbudget. Diese in den yukiblock-Schwesterprodukten vorhandenen Funktionen sind für YMOD ersatzlos entfallen.
| Feld | Wert |
|---|---|
Produkt-ID (product_id) | YMOD |
HW-ID (hw_id) | EFR32MG26 |
| Firmware-Version | 1.0.0 (Build-Konstante APP_VERSION_STR, aus Git-Tag bei Release) |
| Service-UUID | 00000000-0000-1000-8002-006D0099AB53 (YMOD_SRV_UUID) |
| Kunden-Service-UUID | 00000001-0000-1000-8002-006D0099AB53 (CUST_SRV_UUID) — über UART SET_UUID parametrierbar |
| Geräte-ID | IMEI (15 Ziffern) des Mobilfunk-Moduls |
YUKI_MODEM)| Merkmal | eg912 Default | bg77 |
|---|---|---|
| Mobilfunk-Modul | Quectel EG912 | Quectel BG77 |
| Funktechnik | LTE Cat-1 | LTE-M / NB-IoT |
| GNSS | nein | ja (integriert, Empfangs-only) |
| Modem-Host-Link-Baud (modul-intern, Modul↔Modem) | 2 100 000 Baud | 115 200 Baud |
| LTE-Quality-Modell | Cat-1 (Tau 20 min) | LTE-M (Tau 1 min) |
| Build-Definition | YUKI_MODEM_EG912=1 | YUKI_MODEM_BG77=1, YUKI_MODEM_WITH_GNSS=1 |
Beide Varianten sind funktional identisch, abgesehen vom Modem, dem GNSS-Pfad und dem LTE-Quality-Modell. Der Modem-Host-Link-Baud bezeichnet die modul-interne Verbindung zwischen YMOD und dem Quectel-Modem — nicht die Baudrate der Host-UART-Schnittstelle zum Kunden-MCU (siehe §7/§9).
Die technische Geräte-ID ist die IMEI; sie wird beim ersten Boot aus dem Modem ausgelesen, plausibilisiert und persistiert. HW-Revision, Modul-Labeling und Seriennummern-Vergabe sind im Hardware-Datensatz definiert: [zu bestätigen].
Die Sendeleistung des Mobilfunkteils wird durch das jeweils bestückte Quectel-Modul bestimmt. Die HF-Expositionsbewertung nach EN 50665 erfolgt auf Endprodukt-Ebene durch den Integrator, einschließlich der Festlegung des erforderlichen Mindestabstands. Der GNSS-Empfänger der bg77-Variante ist reiner Empfänger (keine Sendeeigenschaft).
Das YMOD läuft als einzige Software auf einem EFR32MG26 (Cortex-M33) auf coldwave-os 2.2.0. Die Firmware ist bewusst schlank aufgebaut:
┌───────────────────────────────────────────────────────────────┐
│ Applikation (firmware/src/) │
│ ├─ main.cpp Identität (product_id="YMOD", │
│ │ hw_id="EFR32MG26"), Modem-Init-Blob │
│ ├─ app.cpp yuki_app_init(): Board + Connectivity- │
│ │ Supervisor + Coldwave-Service + Backend │
│ ├─ app/app_main.cpp UART-Server, GNSS (nur bg77), │
│ │ GPIO0/1-Tags, SYNC, Status-LEDs, Sync-Loop │
│ ├─ app/app_status.cpp Status-LED-Zustandsmaschine │
│ ├─ app/mcc_timezone.c MCC → POSIX-TZ │
│ ├─ uart_protocol/ TLV-Server + CRC-16 + Handler + IO │
│ └─ cli/cli.c Serielle Diagnose-CLI │
├───────────────────────────────────────────────────────────────┤
│ coldwave-yuki-core 1.0.0 (In-House, gepinnt): │
│ Connectivity-Supervisor + Recovery + LTE-Quality. │
│ Power-Fail / Budget auskompiliert (YUKI_CORE_WITH_*=OFF). │
├───────────────────────────────────────────────────────────────┤
│ coldwave-os 2.2.0: Kernel (FreeRTOS), lwIP, mbedTLS/PSA, │
│ DTLS, OTA, KV-FS, AT-Modem-Treiber, MCUboot-Bootloader │
└───────────────────────────────────────────────────────────────┘
Die primäre lokale Angriffsfläche ist der UART-Protokoll-Server (§9). Die Backend-Anbindung (DTLS/LTE), OTA, das KV-FS und die PSA-Kryptografie sind an coldwave-os delegiert; die Connectivity- und Recovery-Logik sowie das LTE-Quality-Modell stammen aus coldwave-yuki-core.
Das YMOD stellt dem Host-MCU die folgenden logischen Signale bereit. Die physische Zuordnung zum Modul-Footprint (Pin-/Pad-Nummern) ist im Hardware-Integrationsdatenblatt festgelegt: [zu bestätigen].
| Signal | Richtung | Funktion |
|---|---|---|
Host-UART (uart1): TXD, RXD, RTS, CTS | bidirektional | Lokales TLV-Protokoll zum Host-MCU (§9). 8-N-1; HW-Flow-Control-Leitungen (RTS/CTS) vorhanden. Host-UART-Baudrate: [zu bestätigen] (im geprüften Firmware-Stand keine Build-Konstante; bei der Integration festzulegen). |
| GPIO0 / GPIO1 | Ausgang (Modul → Träger) | Service-Tags: über das Backend bzw. per UART (SET auf Property 0x2000/0x2001, Typ BOOL) schaltbare Ausgangspins. |
| SYNC | Eingang (Träger → Modul) | Interrupt-Eingang; eine steigende Flanke löst einen sofortigen ereignisgetriggerten Backend-Sync aus. |
| SLEEP | Eingang (Pull-up) | Low fordert Low-Power-/Sleep-Behandlung an (Reserve-Pfad). |
| NW_ERR | Ausgang (Modul → Träger) | Hardware-Signal „Backend-Link gestört": High bei Mobilfunk-/Backend-Fehler, Low sobald das Backend angebunden ist. |
| LED_GREEN / LED_RED | Ausgang | Status-LED-Ansteuerung (§14). |
| Mobilfunk-Antennenport | HF | 50 Ω, gemäß Quectel-RF-Vorgaben. |
| GNSS-Antennenport bg77 | HF (Rx) | Nur bg77-Variante; Antennenpfad gemäß BG77 GNSS Application Note. |
| SIM-Schnittstelle | — | SIM/eSIM auf Träger/Modul; Form-Faktor und ESD-Schutz: [zu bestätigen]. Netzprofil (APN/MNO) ist Firmware-Build-Konstante. |
| Versorgung / GND | — | SELV/PELV von der Trägerplatine. |
| SWD/JTAG + SEGGER RTT | Debug | Nur physisch über JTAG/SWD erreichbar; im Auslieferungszustand durch den Gecko-Security-Element-Debug-Lock gesperrt. |
Reservierte/plattformseitige Pins: ein BLE-Eingang und ein POWER-GOOD-Eingang sind im Board-Bring-up konfiguriert, aber im aktuellen Funktionsumfang nicht produktiv verwendet.
bg77 zusätzlich die GNSS-Antenne. Keine Modifikation des RF-Pfades gegenüber dem Modul-Referenzdesign.Der UART-Protokoll-Server (src/uart_protocol/yuki_module_server.c) ist die lokale Schnittstelle des Moduls zum Host-MCU und zugleich seine primäre Angriffsfläche. Er wird über strikte Frame-, Längen- und CRC-Validierung abgesichert (Fuzzing-getestet). Es findet keine Authentifizierung statt — die Strecke gilt als baugruppen-/modulintern (vertrauenswürdiger Host-Link).
┌──────────── Header (2 Byte) ────────────┬── Payload (0..511) ──┬── CRC (2 Byte) ──┐
│ Byte0 = (Type << 1) | (Len-Bit8) │ V[0..Len-1] │ CRC-16 (Big-Endian)│
│ Byte1 = Len & 0xFF │ │ │
└──────────────────────────────────────────┴──────────────────────┴───────────────────┘
YUKI_MODULE_MAX_TLV_LENGTH). Überlängen werden mit EPROTO abgewiesen.0x1021, Init 0xFFFF, kein XOR-Out), berechnet über Header + Payload, Big-Endian übertragen.Auf jedes Request-Frame antwortet der Server mit demselben Type. Die Payload beginnt mit einem Fehler-/Statusbyte, gefolgt von den Nutzdaten:
Response.Payload = [ ErrByte ] [ Daten … ]
| Code | Name | Bedeutung |
|---|---|---|
0x00 | ERR_OK | Erfolg |
0x01 | ERR_CMD | Unbekanntes/nicht unterstütztes Kommando |
0x02 | ERR_ARG | Ungültiges Argument / Längenverletzung |
0x03 | ERR_BUSY | Dienst nicht bereit / belegt (z. B. Service noch nicht registriert, GNSS aktiv) |
0x10 | ERR_SIM | SIM-Fehler |
0x11 | ERR_NET | Mobilfunk nicht registriert |
0x12 | ERR_CONN | Keine Backend-/Datenverbindung |
0xFF | ERR_INTERNAL | Interner Fehler |
| Type | Kommando | Richtung | Antwort-Nutzdaten (nach ErrByte) |
|---|---|---|---|
0x00 | GET_PUBKEY | Host → Modul | 32 Byte ED25519-Public-Key des Geräts |
0x01 | GET_IMEI | Host → Modul | IMEI als String |
0x02 | GET_ICCID | Host → Modul | ICCID als String |
0x04 | SET | Host → Modul | keine (Property setzen; Payload siehe §9.4) |
0x05 | SYNC | Host → Modul | keine (löst Backend-Sync des Kunden-Service aus) |
0x06 | VERSION | Host → Modul | Firmware-Version als String |
0x07 | STATUS | Host → Modul | letzter Verbindungs-Statuscode (ErrByte) |
0x08 | GEO_ENA bg77 | Host → Modul | keine (GNSS-Fix aktivieren/deaktivieren; auf eg912 → ERR_CMD) |
0x09 | GEO_RPT | Modul → Host | 22-Byte-Geo-Report (Push, siehe §12) |
0x0A | GET_TIME | Host → Modul | Unix-Zeit UTC, 4 Byte Big-Endian |
0x0B | SET_UUID | Host → Modul | keine (32-Bit-Präfix → Kunden-Service-UUID) |
0x0D | GET_CLAIMCODE | Host → Modul | Claim-Code (12-stelliger Base58-String) |
0x0E | GET_LTE_QUALITY | Host → Modul | Signalqualität 0..5 (1 Byte) |
0x0F | GET_LTE_CONNECTED | Host → Modul | Modem-Datenverbindung aktiv (1 Byte 0/1) |
0x10 | GET_CLOUD_CONNECTED | Host → Modul | Backend angebunden (1 Byte 0/1) |
0x11 | FACTORY_RESET | Host → Modul | keine Antwort — Modul löscht IMEI-/ICCID-/Script-Cache und rebootet (§15) |
Das SET-Kommando setzt eine Property auf dem Kunden-Service. Payload-Aufbau:
[0..1] id (Big-Endian) [2] Flags (Bit4 = read-only) [3] Typ dann Wert
Typ STRING/BIN: [4..5] Länge (BE) [6..] Bytes
sonst (Skalar): [4..] Wert (feste Länge je Typ)
| Typ | Code | Länge | Typ | Code | Länge |
|---|---|---|---|---|---|
| INT32 | 0x01 | 4 | FLOAT | 0x09 | 4 |
| INT16 | 0x02 | 2 | DATETIME | 0x0A | 4 |
| INT8 | 0x03 | 1 | DOUBLE | 0x0B | 8 * |
| UINT32 | 0x04 | 4 | BIN | 0x0C | variabel |
| UINT16 | 0x05 | 2 | UINT64 | 0x0D | 8 * |
| UINT8 | 0x06 | 1 | STRING | 0x0E | variabel |
| BOOL | 0x07 | 1 | INT64 | 0x0F | 8 * |
| UUID | 0x08 | 16 | |||
* DOUBLE, UINT64 und INT64 werden im aktuellen Firmware-Stand angenommen, aber noch nicht verarbeitet (Antwort ERR_INTERNAL).
Über die serielle Diagnose-CLI (nur Debug/Service) stehen u. a. die Kommandos info, imei, iccid, pubkey, quality, connected, cloud_connected und exit zur Verfügung.
main → yuki_app_init(): Board-Bring-up, Status-LED-Thread, FS-Init.cwClient) wird registriert; Backend-Attach über LTE/DTLS gegen das Coldwave-Backend.app_main()-Loop: bedient den Host, treibt die Status-LEDs und den periodischen Sync.device_id am Backend.GET_PUBKEY exportiert.base58(SHA-256(pubkey ‖ imei ‖ iccid)), auf die ersten 8 Byte des Hashes gekürzt → 12-stelliger Base58-Code. Abruf über GET_CLAIMCODE. Der Claim-Code verknüpft das Gerät im Coldwave-Portal mit dem Eigentümer-Account.Im Normalbetrieb läuft das Modul autonom. Der app_main()-Loop (Periode 2 s):
desired_sync_interval_s) sowie ereignisgetriggerte Syncs über den SYNC-Pin,SET_UUID gesetzten UUID).Die vom Supervisor veröffentlichten Diagnose-Properties (read-only) umfassen:
| Property | ID | Typ | Bedeutung |
|---|---|---|---|
| LTE_RSRP | 0x1000 | int16 | Empfangspegel RSRP (dBm) |
| LTE_BW | 0x1010 | uint16 | LTE-Bandbreite |
| LTE_Q | 0x1011 | uint8 | Signalqualität |
| CELLINFO_MCC/MNC | 0x1001/0x1002 | uint16 | Mobile Country/Network Code |
| CELLINFO_LAC/CI | 0x1003/0x1004 | uint32 | Location Area Code / Cell-ID |
| GPIO0 / GPIO1 | 0x2000/0x2001 | bool | Service-Tag-Ausgänge |
Sicherheitsrelevante Betriebsparameter (Backend-FQDN, APN, MNO, Modem-Variante, Modem-Baud) stammen ausschließlich aus Build-Konstanten und sind zur Laufzeit nicht über externe Eingaben veränderbar. Es gibt keine Werks-Default-Passwörter und keine lokale Konfigurationskonsole.
bg77)In der bg77-Variante wird das GNSS-Gerät (gnss0) geöffnet. Der Host aktiviert die Positionsbestimmung über GEO_ENA (Type 0x08). Das Modul pollt anschließend den GNSS-Empfänger und sendet bei gültigem Fix einen Geo-Report (GEO_RPT, Type 0x09) als Push an den Host — ein festes 22-Byte-Payload:
| Offset | Feld | Format |
|---|---|---|
| 0 | fix_type | uint8 |
| 1 | sats (Satellitenzahl) | uint8 |
| 2..5 | ts_utc (Unix-Zeit) | uint32 BE |
| 6..9 | lat_e7 (Breite × 1e7) | int32 BE |
| 10..13 | lon_e7 (Länge × 1e7) | int32 BE |
| 14..17 | alt_cm (Höhe in cm) | int32 BE |
| 18..21 | hdop_centi (HDOP × 100) | uint32 BE |
Der GNSS-Empfänger ist reiner Empfänger (keine Sendeeigenschaft). Während aktiver GNSS-Fixe signalisiert die grüne LED das GPS-Muster (§14). Auf der eg912-Variante ist der GNSS-Pfad nicht verlinkt; GEO_ENA beantwortet der Server mit ERR_CMD.
APP_VERSION_STR (nur ein echter SemVer-Git-Tag wird als OTA-Version übernommen). Die Aktivierung von Secure Boot / Anti-Rollback und die Bereitstellung des produktiven OTA-Signaturschlüssels sind Produktions-Vorbedingungen des Integrators (siehe §16).Das Modul treibt eine grüne und eine rote LED. Der Status-Thread arbeitet mit 100-ms-Takt; die Muster ergeben sich aus dem vom Hauptloop gesetzten Zustand:
| LED-Muster | Zustand | Bedeutung |
|---|---|---|
| grün, dauerhaft | NORMAL | Online — Modem verbunden und Backend angebunden |
| grün, schnelles Blinken (~2 Hz) | CONNECTING | Modem verbunden, Backend-Anmeldung läuft |
| grün, langsames Blinken (~0,5 Hz) | SYNC | Ein Backend-Sync wurde soeben ausgeführt |
| grün, Puls-Muster (3 kurze Pulse je ~1,2 s) | GPS bg77 | GNSS-Positionsbestimmung aktiv |
| rot, 2× Blinken + Pause | NET_ERROR | Modem registriert, aber keine Datenverbindung |
| rot, 3× Blinken | MOBILE_ERROR | Modem nicht registriert / kein Mobilfunknetz |
| rot, 4× Blinken | SIM_ERROR | SIM-Fehler |
Zusätzlich signalisiert der NW_ERR-Ausgangspin den Backend-Link-Zustand hardwareseitig: High bei Mobilfunk-/Backend-Fehler, Low sobald das Backend angebunden ist. Der Host-MCU kann dieses Signal ohne UART-Abfrage auswerten.
Das YMOD hat keinen physischen Reset-Taster. Zurücksetzen erfolgt über den Host:
SYNC über UART, Type 0x05) stößt eine sofortige Backend-Synchronisation an.FACTORY_RESET (Type 0x11) löscht den lokal gecachten IMEI-/ICCID-/Script-Speicher und startet das Modul neu, sodass der nächste Boot die IMEI/ICCID frisch aus dem Modem liest. Das Modul antwortet nicht — der Host erkennt den Reset am Neustart des Moduls. Da der Host-Link als vertrauenswürdig gilt, erfolgt keine zusätzliche Bestätigung.cwClient, kein cwServer), kein Telnet/SSH/HTTP. Einzige lokale Schnittstelle ist der UART-Protokoll-Server.BACKEND_CA_CERT_PEM), damit die DTLS-Server-Cert-Prüfung greift.ImagineOn stellt für dieses Produkt sicherheitsrelevante Firmware-Updates über einen definierten Support-Zeitraum bereit und folgt einem koordinierten Offenlegungsprozess (CVD) nach IEC 62443-4-1 (§23). Die kalendarische Dauer des Support-Zeitraums für das YMOD-Endprodukt: [zu bestätigen].
{'0','3'}, Default-Band LTE_B8 (900 MHz). Tatsächlich unterstützte Bänder ergeben sich aus dem jeweiligen Quectel-Datenblatt.Der Connectivity-Supervisor (coldwave-yuki-core) überwacht die Verbindung (Periode 5 s) und durchläuft bei Verlust eine deterministische Recovery-Ladder: Reconnect → Modem-Reset → Reboot. Der Reboot greift erst nach maximal 3 erfolglosen Resets (max_resets_before_reboot=3) und einer Mindestlaufzeit von 30 min. Rund 5 fehlgeschlagene Syncs ohne Backend-Round-Trip werten als „attached-but-dead" und lösen ebenfalls einen Modem-Reset aus. Eine Raten-Obergrenze (ltemq_rate_cap_kbit_s) begrenzt den Durchsatz; ein monatliches Datenbudget gibt es nicht.
Das Modul ist wartungsfrei. Es enthält keine RTC-Pufferbatterie und keine vom Anwender wartbaren Teile (die Uhrzeit kommt aus NTP). Endprodukt-seitige Pflege (Reinigung, Prüfung des Antennenanschlusses) obliegt dem Betreiber gemäß der Dokumentation des Endprodukts.
| Parameter | Variante eg912 Default | Variante bg77 |
|---|---|---|
| Funkmodul | Quectel EG912 (vorzertifiziert) | Quectel BG77 (vorzertifiziert) |
| Funkdienst | LTE Cat-1 | LTE-M (Cat-M1) / NB-IoT |
| GNSS | — | integriert, Empfangs-only |
| Default-Band (Code) | LTE_B8 (900 MHz); unterstützte Bänder je Modul-Datenblatt | |
| Sendeleistung / Modulation | durch das jeweilige Quectel-Modulzertifikat spezifiziert (kein eigenes Funkdesign) | |
| Antenne | 50 Ω, Layout gemäß Quectel-RF-Application-Note; bg77 zusätzlich GNSS-Antennenpfad | |
Der Integrationsnachweis (RED Art. 3(2)) stützt sich für beide Module auf das jeweilige Quectel-CE-Zertifikat (GCF/PTCRB) und geräteseitige Prüfungen nach EN 301 489-1/-52 und EN 301 908-1/-13 auf Endprodukt-Ebene.
| MCU / Plattform | Silicon Labs EFR32MG26 (ARM Cortex-M33), Gecko Security Element (HW-TRNG, PSA-Crypto) |
|---|---|
| Betriebssystem | coldwave-os 2.2.0 (FreeRTOS, lwIP, mbedTLS/PSA, OTA, KV-FS, MCUboot-Bootloader) |
| Mobilfunk | Quectel EG912 (LTE Cat-1) oder BG77 (LTE-M/NB-IoT) — variantenabhängig |
| GNSS | nur bg77, Empfangs-only |
| Host-Schnittstelle | UART (TLV + CRC-16/CCITT-FALSE), max. TLV 511 Byte; GPIO0/1, SYNC, SLEEP, NW_ERR |
| Sicherheit (SW) | Secure Boot, signierte OTA (ECDSA-P256/SHA-256), DTLS, PSA-Keystore, ED25519-Geräteschlüssel |
| Versorgung | SELV/PELV über Trägerplatine — elektrische Kenndaten: [zu bestätigen] |
| Abmessungen / Footprint | [zu bestätigen] |
| Umgebungsbedingungen | [zu bestätigen] |
| Symptom | Mögliche Ursache | Maßnahme |
|---|---|---|
| NW_ERR bleibt High / rote LED blinkt 3× | Modem nicht registriert, kein Netz | Antennensitz und Empfang prüfen; SIM/Netzverfügbarkeit prüfen. |
| Rote LED blinkt 2× | Modem registriert, aber keine Backend-/Datenverbindung | APN/Netzstatus prüfen; auf Recovery-Ladder warten (§17.2). |
| Rote LED blinkt 4× | SIM-Fehler | SIM-Sitz/-Kontakte und -Provisionierung prüfen. |
UART-Antworten mit ERR_ARG | Frame-Länge/CRC oder SET-Payload fehlerhaft | Header/Längenfeld, CRC-16/CCITT-FALSE und die feste Typ-Länge prüfen (§9). |
UART-Antwort ERR_BUSY auf SYNC/SET | Kunden-Service noch nicht registriert oder GNSS aktiv | Erst nach Backend-Attach senden; UUID per SET_UUID setzen. |
GEO_ENA liefert ERR_CMD | eg912-Variante ohne GNSS | GNSS nur auf bg77; Variante prüfen. |
| Modul rebootet zyklisch beim Boot | keine plausible IMEI vom Modem | Modem-/SIM-Verdrahtung und Modem-Init prüfen. |
| Anliegen | Kontakt |
|---|---|
| Sicherheits-/Schwachstellen-Meldung (CVD/PSIRT) | security@coldwave.io |
| Konformitätsanfragen / Marktüberwachung | compliance@imagineon.de |
| Allgemeiner Support / Integration | [zu bestätigen] · www.imagineon.de |
Bitte keine öffentlichen GitHub-Issues für Schwachstellen. Bei der Meldung Firmware-Version (Release-Tag/Commit) und Modem-Variante (eg912/bg77) angeben; für UART-Protokoll-Themen ist eine minimale Byte-Sequenz ideal. Empfangsbestätigung binnen 2 Arbeitstagen; Triage binnen 5 Arbeitstagen; Fix für Critical/High (CVSS ≥ 7) binnen 90 Tagen, für Medium/Low binnen 180 Tagen (gebündelt ins nächste Minor-Release). Koordinierte Offenlegung nach Verfügbarkeit des Fixes und einem angemessenen Rollout-Fenster (typ. 30 Tage). Details: SECURITY.md.
| Komponente | Version | Rolle |
|---|---|---|
| coldwave-os (FU-Image) | 2.2.0 | RTOS, Netzwerk, DTLS, OTA, FS, PSA |
| coldwave-os (Bootloader) | 2.2.0 | MCUboot-artige Image-Verifikation |
| libflake | (über coldwave-os) | Property-Layer, IPC |
| coldwave-yuki-core | 1.0.0 | Connectivity-Supervisor + Recovery + LTE-Quality |
| UART-Protokoll-Server | (Produkt) | TLV + CRC-16/CCITT-FALSE + Handler — ImagineOn-authored |
Der YMOD-Applikationscode (src/) ist vollständig ImagineOn-authored; es gibt keinen vendored Drittanbieter-Quellcode im Image außer dem coldwave-os-SDK. Die vollständige SBOM (CycloneDX) liegt unter firmware/compliance/sbom/ymod-v1.0.0.cdx.json. Vertrieb durch die ImagineOn GmbH unter den ImagineOn-Softwarelizenzbedingungen (imagineon.de/de/info/licensing-terms) — keine Open-Source-Lizenz; Weiterverbreitung nur mit schriftlicher Vereinbarung.
| APN | Access Point Name — Einwahlpunkt im Mobilfunknetz |
| Claim-Code | kryptographisch abgeleiteter Onboarding-Code (Base58) |
| CRC-16/CCITT-FALSE | Prüfsumme (Poly 0x1021, Init 0xFFFF) über die UART-Frames |
| DTLS | Datagram TLS — verschlüsselte UDP-Übertragung |
| ED25519 | Edwards-Curve-Signaturverfahren des Geräteschlüssels |
| GNSS | Satellitennavigation (nur bg77, Empfangs-only) |
| ICCID | SIM-Kennung |
| IMEI | eindeutige Modem-/Geräte-Kennung (15 Ziffern) |
| LTE Cat-1 / LTE-M / NB-IoT | Mobilfunk-Datentechniken der Modem-Varianten |
| OTA | Over-the-Air-Firmware-Update |
| PSA Crypto | Platform Security Architecture — Schlüsselablage/Krypto-API |
| RED | Radio Equipment Directive 2014/53/EU |
| RSRP | Reference Signal Received Power — LTE-Empfangspegel |
| TLV | Type-Length-Value — Rahmenformat des UART-Protokolls |
| YUKI_MODEM | Build-Flag zur Wahl der Modem-Variante (eg912/bg77) |
| Version | Datum | Änderung |
|---|---|---|
| 1.0 | 2026-07-13 | Erstausgabe des Integrations- & Betriebshandbuchs (Firmware 1.0.0) |
© 2026 ImagineOn GmbH. Alle Rechte vorbehalten. Dieses Handbuch darf ohne ausdrückliche Genehmigung der ImagineOn GmbH nicht vervielfältigt oder Dritten zugänglich gemacht werden, ausgenommen die Weitergabe im Rahmen der Lieferkette des Produkts Coldwave Yuki Module (YMOD).
This manual describes the integration and operation of the Coldwave Yuki Module (YMOD) from ImagineOn GmbH — a cellular connectivity module that connects a carrier board or host MCU to the Coldwave backend over a local UART protocol. It is intended for integrators (development of the carrier board and the host firmware) and plant operators.
The YMOD is an embedded component. Certain conformity- and security-relevant steps (RF layout, antenna path, key provisioning, Secure Boot / anti-rollback configuration, watchdog activation, end-product certification) are the responsibility of the integrator or the end-product manufacturer — see §16 and the module integration evidence in the technical documentation.
ImagineOn GmbH
Neusser Str. 27–29
50670 Cologne, Germany
Web: https://www.imagineon.de
Compliance: compliance@imagineon.de · PSIRT: security@coldwave.io
The conformity assessment is carried out under Module A (internal production control). Applied EU legal acts:
eg912 / bg77) is in compliance with Directive 2014/53/EU.
The full text of the EU declaration of conformity (No. YMOD-DoC-1.0.0, issued on 2026-06-07,
source commit 7247ed2b53) is part of the technical documentation and available from the manufacturer
(compliance@imagineon.de). Online source: [to be confirmed].
| Area | Standard |
|---|---|
| Safety | EN 62368-1:2020+A11:2020 |
| RF exposure | EN 50665:2017 |
| EMC (radio) | EN 301 489-1 V2.2.3, EN 301 489-17 V3.2.4, EN 301 489-52 V1.2.1 |
| Radio (cellular) | EN 301 908-1 V15.2.1, EN 301 908-13 V13.2.1 |
| Cybersecurity | EN 18031-1:2024 |
| Forward-looking (CRA) | ETSI EN 303 645 V3.1.3 |
Note: The EFR32MG26 SoC contains a BLE / 802.15.4 radio component which is not linked in by firmware in either YMOD variant (no stack in the build). It is a platform-level provision for future variants. The frequency, modulation and transmit power of the cellular part are fully specified by the respective fitted, pre-certified Quectel module (EG912 or BG77); YMOD contains no radio design of its own.
The YMOD is a cellular connectivity module for embedding on a customer-side carrier board. On behalf of a host MCU it handles the cellular connection (LTE), the DTLS-secured backend communication (telemetry/property sync, remote configuration, OTA triggering), the device identity and — in the bg77 variant — GNSS positioning, and provides these services via a TLV-based UART protocol.
Typical use: as a fitted radio module in industrial/commercial environments. Power is supplied via the carrier board (SELV/PELV).
YMOD carries no Modbus/BACnet field-bus gateway, no scripting/script VM, no supercaps/power-fail buffering, no battery-backed RTC and no data budget. These functions, present in the sibling yukiblock products, have been removed for YMOD without replacement.
| Field | Value |
|---|---|
Product ID (product_id) | YMOD |
HW ID (hw_id) | EFR32MG26 |
| Firmware version | 1.0.0 (build constant APP_VERSION_STR, from the Git tag at release) |
| Service UUID | 00000000-0000-1000-8002-006D0099AB53 (YMOD_SRV_UUID) |
| Customer service UUID | 00000001-0000-1000-8002-006D0099AB53 (CUST_SRV_UUID) — configurable via UART SET_UUID |
| Device ID | IMEI (15 digits) of the cellular module |
YUKI_MODEM)| Feature | eg912 Default | bg77 |
|---|---|---|
| Cellular module | Quectel EG912 | Quectel BG77 |
| Radio technology | LTE Cat-1 | LTE-M / NB-IoT |
| GNSS | no | yes (integrated, receive-only) |
| Modem host-link baud (module-internal, module↔modem) | 2 100 000 baud | 115 200 baud |
| LTE quality model | Cat-1 (Tau 20 min) | LTE-M (Tau 1 min) |
| Build definition | YUKI_MODEM_EG912=1 | YUKI_MODEM_BG77=1, YUKI_MODEM_WITH_GNSS=1 |
Both variants are functionally identical apart from the modem, the GNSS path and the LTE quality model. The modem host-link baud refers to the module-internal link between YMOD and the Quectel modem — not the baud rate of the host UART interface to the customer MCU (see §7/§9).
The technical device ID is the IMEI; it is read from the modem on first boot, plausibility-checked and persisted. HW revision, module labelling and serial-number assignment are defined in the hardware dataset: [to be confirmed].
The transmit power of the cellular part is determined by the respective fitted Quectel module. The RF-exposure assessment per EN 50665 is performed at the end-product level by the integrator, including the determination of the required minimum distance. The GNSS receiver of the bg77 variant is receive-only (no transmit capability).
The YMOD runs as the sole software on an EFR32MG26 (Cortex-M33) on coldwave-os 2.2.0. The firmware is deliberately lean:
┌────────────────────────────────────────────────────────────────┐
│ Application (firmware/src/) │
│ ├─ main.cpp identity (product_id="YMOD", │
│ │ hw_id="EFR32MG26"), modem init blob │
│ ├─ app.cpp yuki_app_init(): board + connectivity │
│ │ supervisor + Coldwave service + backend │
│ ├─ app/app_main.cpp UART server, GNSS (bg77 only), │
│ │ GPIO0/1 tags, SYNC, status LEDs, sync loop│
│ ├─ app/app_status.cpp status-LED state machine │
│ ├─ app/mcc_timezone.c MCC → POSIX TZ │
│ ├─ uart_protocol/ TLV server + CRC-16 + handlers + IO │
│ └─ cli/cli.c serial diagnostic CLI │
├────────────────────────────────────────────────────────────────┤
│ coldwave-yuki-core 1.0.0 (in-house, pinned): │
│ connectivity supervisor + recovery + LTE quality. │
│ power-fail / budget compiled out (YUKI_CORE_WITH_*=OFF). │
├────────────────────────────────────────────────────────────────┤
│ coldwave-os 2.2.0: kernel (FreeRTOS), lwIP, mbedTLS/PSA, │
│ DTLS, OTA, KV-FS, AT modem driver, MCUboot bootloader │
└────────────────────────────────────────────────────────────────┘
The primary local attack surface is the UART protocol server (§9). The backend connectivity (DTLS/LTE), OTA, the KV-FS and the PSA cryptography are delegated to coldwave-os; the connectivity and recovery logic as well as the LTE quality model come from coldwave-yuki-core.
The YMOD provides the host MCU with the following logical signals. The physical mapping to the module footprint (pin/pad numbers) is defined in the hardware integration datasheet: [to be confirmed].
| Signal | Direction | Function |
|---|---|---|
Host UART (uart1): TXD, RXD, RTS, CTS | bidirectional | Local TLV protocol to the host MCU (§9). 8-N-1; HW flow-control lines (RTS/CTS) present. Host UART baud rate: [to be confirmed] (no build constant in the audited firmware build; to be defined during integration). |
| GPIO0 / GPIO1 | Output (module → carrier) | Service tags: output pins switchable via the backend or via UART (SET on property 0x2000/0x2001, type BOOL). |
| SYNC | Input (carrier → module) | Interrupt input; a rising edge triggers an immediate event-triggered backend sync. |
| SLEEP | Input (pull-up) | Low requests low-power/sleep handling (reserve path). |
| NW_ERR | Output (module → carrier) | Hardware signal "backend link disrupted": high on cellular/backend error, low as soon as the backend is attached. |
| LED_GREEN / LED_RED | Output | Status-LED drive (§14). |
| Cellular antenna port | RF | 50 Ω, per Quectel RF specifications. |
| GNSS antenna port bg77 | RF (Rx) | bg77 variant only; antenna path per the BG77 GNSS Application Note. |
| SIM interface | — | SIM/eSIM on carrier/module; form factor and ESD protection: [to be confirmed]. The network profile (APN/MNO) is a firmware build constant. |
| Supply / GND | — | SELV/PELV from the carrier board. |
| SWD/JTAG + SEGGER RTT | Debug | Reachable only physically via JTAG/SWD; locked by the Gecko Security Element debug lock in the delivered state. |
Reserved/platform-side pins: a BLE input and a POWER-GOOD input are configured in the board bring-up but are not used productively in the current feature set.
bg77 additionally the GNSS antenna. No modification of the RF path relative to the module reference design.The UART protocol server (src/uart_protocol/yuki_module_server.c) is the module's local interface to the host MCU and at the same time its primary attack surface. It is protected by strict frame, length and CRC validation (fuzz-tested). No authentication takes place — the link is considered assembly-/module-internal (trusted host link).
┌──────────── Header (2 bytes) ────────────┬── Payload (0..511) ──┬── CRC (2 bytes) ───┐
│ Byte0 = (Type << 1) | (Len bit8) │ V[0..Len-1] │ CRC-16 (big-endian)│
│ Byte1 = Len & 0xFF │ │ │
└──────────────────────────────────────────┴──────────────────────┴────────────────────┘
YUKI_MODULE_MAX_TLV_LENGTH). Over-length frames are rejected with EPROTO.0x1021, init 0xFFFF, no XOR-out), computed over header + payload, transmitted big-endian.The server replies to every request frame with the same Type. The payload starts with an error/status byte, followed by the payload data:
Response.Payload = [ ErrByte ] [ data … ]
| Code | Name | Meaning |
|---|---|---|
0x00 | ERR_OK | Success |
0x01 | ERR_CMD | Unknown/unsupported command |
0x02 | ERR_ARG | Invalid argument / length violation |
0x03 | ERR_BUSY | Service not ready / busy (e.g. service not yet registered, GNSS active) |
0x10 | ERR_SIM | SIM error |
0x11 | ERR_NET | Cellular not registered |
0x12 | ERR_CONN | No backend/data connection |
0xFF | ERR_INTERNAL | Internal error |
| Type | Command | Direction | Response payload (after ErrByte) |
|---|---|---|---|
0x00 | GET_PUBKEY | Host → module | 32-byte ED25519 public key of the device |
0x01 | GET_IMEI | Host → module | IMEI as a string |
0x02 | GET_ICCID | Host → module | ICCID as a string |
0x04 | SET | Host → module | none (set property; payload see §9.4) |
0x05 | SYNC | Host → module | none (triggers a backend sync of the customer service) |
0x06 | VERSION | Host → module | firmware version as a string |
0x07 | STATUS | Host → module | last connection status code (ErrByte) |
0x08 | GEO_ENA bg77 | Host → module | none (enable/disable GNSS fix; on eg912 → ERR_CMD) |
0x09 | GEO_RPT | Module → host | 22-byte geo report (push, see §12) |
0x0A | GET_TIME | Host → module | Unix time UTC, 4 bytes big-endian |
0x0B | SET_UUID | Host → module | none (32-bit prefix → customer service UUID) |
0x0D | GET_CLAIMCODE | Host → module | claim code (12-character Base58 string) |
0x0E | GET_LTE_QUALITY | Host → module | signal quality 0..5 (1 byte) |
0x0F | GET_LTE_CONNECTED | Host → module | modem data connection active (1 byte 0/1) |
0x10 | GET_CLOUD_CONNECTED | Host → module | backend attached (1 byte 0/1) |
0x11 | FACTORY_RESET | Host → module | no response — the module clears the IMEI/ICCID/script cache and reboots (§15) |
The SET command sets a property on the customer service. Payload structure:
[0..1] id (big-endian) [2] flags (bit4 = read-only) [3] type then value
type STRING/BIN: [4..5] length (BE) [6..] bytes
else (scalar): [4..] value (fixed length per type)
| Type | Code | Length | Type | Code | Length |
|---|---|---|---|---|---|
| INT32 | 0x01 | 4 | FLOAT | 0x09 | 4 |
| INT16 | 0x02 | 2 | DATETIME | 0x0A | 4 |
| INT8 | 0x03 | 1 | DOUBLE | 0x0B | 8 * |
| UINT32 | 0x04 | 4 | BIN | 0x0C | variable |
| UINT16 | 0x05 | 2 | UINT64 | 0x0D | 8 * |
| UINT8 | 0x06 | 1 | STRING | 0x0E | variable |
| BOOL | 0x07 | 1 | INT64 | 0x0F | 8 * |
| UUID | 0x08 | 16 | |||
* DOUBLE, UINT64 and INT64 are accepted in the current firmware build but not yet processed (response ERR_INTERNAL).
Via the serial diagnostic CLI (debug/service only), the commands info, imei, iccid, pubkey, quality, connected, cloud_connected and exit, among others, are available.
main → yuki_app_init(): board bring-up, status-LED thread, FS init.cwClient) is registered; backend attach via LTE/DTLS against the Coldwave backend.app_main() loop: serves the host, drives the status LEDs and the periodic sync.device_id at the backend.GET_PUBKEY.base58(SHA-256(pubkey ‖ imei ‖ iccid)), truncated to the first 8 bytes of the hash → 12-character Base58 code. Retrieved via GET_CLAIMCODE. The claim code links the device to the owner account in the Coldwave portal.In normal operation the module runs autonomously. The app_main() loop (period 2 s):
desired_sync_interval_s) as well as event-triggered syncs via the SYNC pin,SET_UUID) after the attach.The diagnostic properties published by the supervisor (read-only) include:
| Property | ID | Type | Meaning |
|---|---|---|---|
| LTE_RSRP | 0x1000 | int16 | Receive level RSRP (dBm) |
| LTE_BW | 0x1010 | uint16 | LTE bandwidth |
| LTE_Q | 0x1011 | uint8 | Signal quality |
| CELLINFO_MCC/MNC | 0x1001/0x1002 | uint16 | Mobile Country/Network Code |
| CELLINFO_LAC/CI | 0x1003/0x1004 | uint32 | Location Area Code / Cell ID |
| GPIO0 / GPIO1 | 0x2000/0x2001 | bool | Service-tag outputs |
Security-relevant operating parameters (backend FQDN, APN, MNO, modem variant, modem baud) come exclusively from build constants and cannot be altered at runtime via external inputs. There are no factory default passwords and no local configuration console.
bg77 only)In the bg77 variant the GNSS device (gnss0) is opened. The host enables positioning via GEO_ENA (type 0x08). The module then polls the GNSS receiver and, on a valid fix, sends a geo report (GEO_RPT, type 0x09) as a push to the host — a fixed 22-byte payload:
| Offset | Field | Format |
|---|---|---|
| 0 | fix_type | uint8 |
| 1 | sats (satellite count) | uint8 |
| 2..5 | ts_utc (Unix time) | uint32 BE |
| 6..9 | lat_e7 (latitude × 1e7) | int32 BE |
| 10..13 | lon_e7 (longitude × 1e7) | int32 BE |
| 14..17 | alt_cm (altitude in cm) | int32 BE |
| 18..21 | hdop_centi (HDOP × 100) | uint32 BE |
The GNSS receiver is receive-only (no transmit capability). While GNSS fixes are active, the green LED signals the GPS pattern (§14). On the eg912 variant the GNSS path is not linked in; the server answers GEO_ENA with ERR_CMD.
APP_VERSION_STR (only a genuine SemVer Git tag is adopted as the OTA version). The activation of Secure Boot / anti-rollback and the provisioning of the production OTA signing key are production preconditions on the integrator (see §16).The module drives a green and a red LED. The status thread runs on a 100 ms tick; the patterns follow the state set by the main loop:
| LED pattern | State | Meaning |
|---|---|---|
| green, solid | NORMAL | Online — modem connected and backend attached |
| green, fast blink (~2 Hz) | CONNECTING | Modem connected, backend registration in progress |
| green, slow blink (~0.5 Hz) | SYNC | A backend sync has just been performed |
| green, pulse pattern (3 short pulses every ~1.2 s) | GPS bg77 | GNSS positioning active |
| red, 2× blink + pause | NET_ERROR | Modem registered but no data connection |
| red, 3× blink | MOBILE_ERROR | Modem not registered / no cellular network |
| red, 4× blink | SIM_ERROR | SIM error |
In addition, the NW_ERR output pin signals the backend-link state in hardware: high on cellular/backend error, low as soon as the backend is attached. The host MCU can evaluate this signal without a UART query.
The YMOD has no physical reset button. Resetting is performed via the host:
SYNC via UART, type 0x05) initiates an immediate backend synchronisation.FACTORY_RESET (type 0x11) clears the locally cached IMEI/ICCID/script storage and restarts the module, so that the next boot reads the IMEI/ICCID freshly from the modem. The module does not respond — the host detects the reset from the module's restart. Since the host link is considered trusted, no additional confirmation is given.cwClient, no cwServer), no Telnet/SSH/HTTP. The only local interface is the UART protocol server.BACKEND_CA_CERT_PEM) so that the DTLS server-certificate check takes effect.ImagineOn provides security-relevant firmware updates for this product over a defined support period and follows a coordinated disclosure process (CVD) per IEC 62443-4-1 (§23). The calendar duration of the support period for the YMOD end product: [to be confirmed].
{'0','3'}, default band LTE_B8 (900 MHz). The actually supported bands follow from the respective Quectel datasheet.The connectivity supervisor (coldwave-yuki-core) monitors the connection (period 5 s) and, on loss, runs through a deterministic recovery ladder: reconnect → modem reset → reboot. The reboot only takes effect after at most 3 unsuccessful resets (max_resets_before_reboot=3) and a minimum uptime of 30 min. Around 5 failed syncs without a backend round trip count as "attached-but-dead" and likewise trigger a modem reset. A rate cap (ltemq_rate_cap_kbit_s) limits throughput; there is no monthly data budget.
The module is maintenance-free. It contains no RTC backup battery and no user-serviceable parts (the time comes from NTP). End-product-side care (cleaning, checking the antenna connection) is the operator's responsibility in accordance with the end-product documentation.
| Parameter | Variant eg912 Default | Variant bg77 |
|---|---|---|
| Radio module | Quectel EG912 (pre-certified) | Quectel BG77 (pre-certified) |
| Radio service | LTE Cat-1 | LTE-M (Cat-M1) / NB-IoT |
| GNSS | — | integrated, receive-only |
| Default band (code) | LTE_B8 (900 MHz); supported bands per module datasheet | |
| Transmit power / modulation | specified by the respective Quectel module certificate (no radio design of its own) | |
| Antenna | 50 Ω, layout per Quectel RF Application Note; bg77 additionally a GNSS antenna path | |
The integration evidence (RED Art. 3(2)) relies for both modules on the respective Quectel CE certificate (GCF/PTCRB) and device-side tests per EN 301 489-1/-52 and EN 301 908-1/-13 at the end-product level.
| MCU / platform | Silicon Labs EFR32MG26 (ARM Cortex-M33), Gecko Security Element (HW TRNG, PSA Crypto) |
|---|---|
| Operating system | coldwave-os 2.2.0 (FreeRTOS, lwIP, mbedTLS/PSA, OTA, KV-FS, MCUboot bootloader) |
| Cellular | Quectel EG912 (LTE Cat-1) or BG77 (LTE-M/NB-IoT) — variant-dependent |
| GNSS | bg77 only, receive-only |
| Host interface | UART (TLV + CRC-16/CCITT-FALSE), max. TLV 511 bytes; GPIO0/1, SYNC, SLEEP, NW_ERR |
| Security (SW) | Secure Boot, signed OTA (ECDSA-P256/SHA-256), DTLS, PSA keystore, ED25519 device key |
| Supply | SELV/PELV via carrier board — electrical characteristics: [to be confirmed] |
| Dimensions / footprint | [to be confirmed] |
| Environmental conditions | [to be confirmed] |
| Symptom | Possible cause | Action |
|---|---|---|
| NW_ERR stays high / red LED blinks 3× | Modem not registered, no network | Check antenna seating and reception; check SIM/network availability. |
| Red LED blinks 2× | Modem registered but no backend/data connection | Check APN/network status; wait for the recovery ladder (§17.2). |
| Red LED blinks 4× | SIM error | Check SIM seating/contacts and provisioning. |
UART replies with ERR_ARG | Frame length/CRC or SET payload faulty | Check the header/length field, CRC-16/CCITT-FALSE and the fixed type length (§9). |
UART reply ERR_BUSY on SYNC/SET | Customer service not yet registered or GNSS active | Send only after backend attach; set the UUID via SET_UUID. |
GEO_ENA returns ERR_CMD | eg912 variant without GNSS | GNSS only on bg77; check the variant. |
| Module reboots cyclically at boot | no plausible IMEI from the modem | Check the modem/SIM wiring and modem init. |
| Matter | Contact |
|---|---|
| Security / vulnerability report (CVD/PSIRT) | security@coldwave.io |
| Conformity enquiries / market surveillance | compliance@imagineon.de |
| General support / integration | [to be confirmed] · www.imagineon.de |
Please do not use public GitHub issues for vulnerabilities. When reporting, state the firmware version (release tag/commit) and the modem variant (eg912/bg77); for UART protocol matters a minimal byte sequence is ideal. Acknowledgement within 2 business days; triage within 5 business days; fix for Critical/High (CVSS ≥ 7) within 90 days, for Medium/Low within 180 days (bundled into the next minor release). Coordinated disclosure after the fix is available and an appropriate rollout window (typ. 30 days). Details: SECURITY.md.
| Component | Version | Role |
|---|---|---|
| coldwave-os (firmware image) | 2.2.0 | RTOS, networking, DTLS, OTA, FS, PSA |
| coldwave-os (bootloader) | 2.2.0 | MCUboot-like image verification |
| libflake | (via coldwave-os) | Property layer, IPC |
| coldwave-yuki-core | 1.0.0 | Connectivity supervisor + recovery + LTE quality |
| UART protocol server | (product) | TLV + CRC-16/CCITT-FALSE + handlers — ImagineOn-authored |
The YMOD application code (src/) is entirely ImagineOn-authored; there is no vendored third-party source code in the image apart from the coldwave-os SDK. The full SBOM (CycloneDX) is located at firmware/compliance/sbom/ymod-v1.0.0.cdx.json. Distributed by ImagineOn GmbH under the ImagineOn software license terms (imagineon.de/de/info/licensing-terms) — not an open-source license; redistribution only by written agreement.
| APN | Access Point Name — entry point in the cellular network |
| Claim code | cryptographically derived onboarding code (Base58) |
| CRC-16/CCITT-FALSE | checksum (poly 0x1021, init 0xFFFF) over the UART frames |
| DTLS | Datagram TLS — encrypted UDP transport |
| ED25519 | Edwards-curve signature scheme of the device key |
| GNSS | satellite navigation (bg77 only, receive-only) |
| ICCID | SIM identifier |
| IMEI | unique modem/device identifier (15 digits) |
| LTE Cat-1 / LTE-M / NB-IoT | cellular data technologies of the modem variants |
| OTA | Over-the-Air firmware update |
| PSA Crypto | Platform Security Architecture — key storage/crypto API |
| RED | Radio Equipment Directive 2014/53/EU |
| RSRP | Reference Signal Received Power — LTE receive level |
| TLV | Type-Length-Value — frame format of the UART protocol |
| YUKI_MODEM | build flag for selecting the modem variant (eg912/bg77) |
| Version | Date | Change |
|---|---|---|
| 1.0 | 2026-07-13 | First issue of the integration & operating manual (firmware 1.0.0) |
© 2026 ImagineOn GmbH. All rights reserved. This manual may not be reproduced or made available to third parties without the express consent of ImagineOn GmbH, except for distribution within the supply chain of the Coldwave Yuki Module (YMOD) product.
Le présent manuel décrit l'intégration et l'exploitation du Coldwave Yuki Module (YMOD) d'ImagineOn GmbH — un module de connectivité cellulaire qui relie une carte porteuse ou un MCU hôte au backend Coldwave via un protocole UART local. Le public visé comprend les intégrateurs (développement de la carte porteuse et du micrologiciel hôte) ainsi que les exploitants d'installations.
Le YMOD est un composant à intégrer. Certaines étapes pertinentes pour la conformité et la sécurité (tracé RF, chemin d'antenne, provisionnement des clés, configuration Secure Boot / anti-rollback, activation du watchdog, certification du produit final) relèvent de la responsabilité de l'intégrateur ou du fabricant du produit final — voir §16 et le justificatif d'intégration du module dans la documentation technique.
ImagineOn GmbH
Neusser Str. 27–29
50670 Cologne, Allemagne
Web : https://www.imagineon.de
Compliance : compliance@imagineon.de · PSIRT : security@coldwave.io
L'évaluation de la conformité est réalisée selon le module A (contrôle interne de la production). Actes juridiques UE appliqués :
eg912 / bg77) est conforme à la directive 2014/53/UE.
Le texte complet de la déclaration UE de conformité (n° YMOD-DoC-1.0.0, émise le 2026-06-07,
commit source 7247ed2b53) fait partie de la documentation technique et est disponible auprès du fabricant
(compliance@imagineon.de). Source en ligne : [à confirmer].
| Domaine | Norme |
|---|---|
| Sécurité | EN 62368-1:2020+A11:2020 |
| Exposition RF | EN 50665:2017 |
| CEM (radio) | EN 301 489-1 V2.2.3, EN 301 489-17 V3.2.4, EN 301 489-52 V1.2.1 |
| Radio (cellulaire) | EN 301 908-1 V15.2.1, EN 301 908-13 V13.2.1 |
| Cybersécurité | EN 18031-1:2024 |
| Prospectif (CRA) | ETSI EN 303 645 V3.1.3 |
Remarque : le SoC EFR32MG26 comprend une partie radio BLE / 802.15.4 qui, dans les deux variantes YMOD, n'est pas liée par le micrologiciel (aucune pile logicielle dans le build). Il s'agit d'une réserve liée à la plateforme pour de futures variantes. La fréquence, la modulation et la puissance d'émission de la partie cellulaire sont entièrement spécifiées par le module Quectel pré-certifié correspondant (EG912 ou BG77) ; le YMOD ne comporte aucune conception radio propre.
Le YMOD est un module de connectivité cellulaire destiné à être intégré sur une carte porteuse côté client. Il assure pour un MCU hôte la connexion cellulaire (LTE), la communication backend sécurisée par DTLS (télémétrie / synchronisation des propriétés, configuration à distance, déclenchement OTA), l'identité de l'appareil ainsi que — dans la variante bg77 — le positionnement GNSS, et met ces services à disposition via un protocole UART basé sur TLV.
Utilisation typique : en tant que module radio monté dans des environnements industriels / tertiaires. L'alimentation est fournie par la carte porteuse (SELV/PELV).
Le YMOD n'embarque aucune passerelle de bus de terrain Modbus / BACnet, aucun scripting / Script-VM, aucun supercondensateur / tampon en cas de coupure d'alimentation, aucune RTC sauvegardée par pile et aucun budget de données. Ces fonctions présentes dans les produits frères de la gamme yukiblock ont été supprimées pour le YMOD sans remplacement.
| Champ | Valeur |
|---|---|
ID produit (product_id) | YMOD |
ID matériel (hw_id) | EFR32MG26 |
| Version du micrologiciel | 1.0.0 (constante de build APP_VERSION_STR, issue du tag Git à la release) |
| UUID de service | 00000000-0000-1000-8002-006D0099AB53 (YMOD_SRV_UUID) |
| UUID du service client | 00000001-0000-1000-8002-006D0099AB53 (CUST_SRV_UUID) — paramétrable via UART SET_UUID |
| ID d'appareil | IMEI (15 chiffres) du module cellulaire |
YUKI_MODEM)| Caractéristique | eg912 par défaut | bg77 |
|---|---|---|
| Module cellulaire | Quectel EG912 | Quectel BG77 |
| Technologie radio | LTE Cat-1 | LTE-M / NB-IoT |
| GNSS | non | oui (intégré, réception seule) |
| Débit du lien modem-hôte (interne au module, module↔modem) | 2 100 000 bauds | 115 200 bauds |
| Modèle de qualité LTE | Cat-1 (Tau 20 min) | LTE-M (Tau 1 min) |
| Définition de build | YUKI_MODEM_EG912=1 | YUKI_MODEM_BG77=1, YUKI_MODEM_WITH_GNSS=1 |
Les deux variantes sont fonctionnellement identiques, hormis le modem, le chemin GNSS et le modèle de qualité LTE. Le débit du lien modem-hôte désigne la connexion interne au module entre le YMOD et le modem Quectel — et non le débit de l'interface UART hôte vers le MCU client (voir §7/§9).
L'identifiant technique de l'appareil est l'IMEI ; il est lu depuis le modem au premier démarrage, contrôlé quant à sa plausibilité et persisté. La révision matérielle, le marquage du module et l'attribution des numéros de série sont définis dans les données matérielles : [à confirmer].
La puissance d'émission de la partie cellulaire est déterminée par le module Quectel monté. L'évaluation de l'exposition RF selon EN 50665 est réalisée au niveau du produit final par l'intégrateur, y compris la détermination de la distance minimale requise. Le récepteur GNSS de la variante bg77 est un récepteur pur (aucune propriété d'émission).
Le YMOD s'exécute comme unique logiciel sur un EFR32MG26 (Cortex-M33) sous coldwave-os 2.2.0. Le micrologiciel est délibérément conçu de manière épurée :
┌───────────────────────────────────────────────────────────────┐
│ Applikation (firmware/src/) │
│ ├─ main.cpp Identität (product_id="YMOD", │
│ │ hw_id="EFR32MG26"), Modem-Init-Blob │
│ ├─ app.cpp yuki_app_init(): Board + Connectivity- │
│ │ Supervisor + Coldwave-Service + Backend │
│ ├─ app/app_main.cpp UART-Server, GNSS (nur bg77), │
│ │ GPIO0/1-Tags, SYNC, Status-LEDs, Sync-Loop │
│ ├─ app/app_status.cpp Status-LED-Zustandsmaschine │
│ ├─ app/mcc_timezone.c MCC → POSIX-TZ │
│ ├─ uart_protocol/ TLV-Server + CRC-16 + Handler + IO │
│ └─ cli/cli.c Serielle Diagnose-CLI │
├───────────────────────────────────────────────────────────────┤
│ coldwave-yuki-core 1.0.0 (In-House, gepinnt): │
│ Connectivity-Supervisor + Recovery + LTE-Quality. │
│ Power-Fail / Budget auskompiliert (YUKI_CORE_WITH_*=OFF). │
├───────────────────────────────────────────────────────────────┤
│ coldwave-os 2.2.0: Kernel (FreeRTOS), lwIP, mbedTLS/PSA, │
│ DTLS, OTA, KV-FS, AT-Modem-Treiber, MCUboot-Bootloader │
└───────────────────────────────────────────────────────────────┘
La principale surface d'attaque locale est le serveur de protocole UART (§9). La connexion au backend (DTLS/LTE), l'OTA, le KV-FS et la cryptographie PSA sont délégués à coldwave-os ; la logique de connectivité et de reprise ainsi que le modèle de qualité LTE proviennent de coldwave-yuki-core.
Le YMOD met à disposition du MCU hôte les signaux logiques suivants. L'affectation physique à l'empreinte du module (numéros de broches/pastilles) est définie dans la fiche d'intégration matérielle : [à confirmer].
| Signal | Direction | Fonction |
|---|---|---|
UART hôte (uart1) : TXD, RXD, RTS, CTS | bidirectionnel | Protocole TLV local vers le MCU hôte (§9). 8-N-1 ; lignes de contrôle de flux matériel (RTS/CTS) présentes. Débit de l'UART hôte : [à confirmer] (aucune constante de build dans l'état de micrologiciel vérifié ; à définir lors de l'intégration). |
| GPIO0 / GPIO1 | Sortie (module → carte porteuse) | Service-tags : broches de sortie commutables via le backend ou par UART (SET sur la propriété 0x2000/0x2001, type BOOL). |
| SYNC | Entrée (carte porteuse → module) | Entrée d'interruption ; un front montant déclenche une synchronisation backend immédiate, déclenchée par événement. |
| SLEEP | Entrée (pull-up) | Un niveau bas demande un traitement basse consommation / veille (chemin de réserve). |
| NW_ERR | Sortie (module → carte porteuse) | Signal matériel « liaison backend perturbée » : niveau haut en cas d'erreur cellulaire / backend, niveau bas dès que le backend est rattaché. |
| LED_GREEN / LED_RED | Sortie | Commande des LED d'état (§14). |
| Port d'antenne cellulaire | RF | 50 Ω, conformément aux prescriptions RF Quectel. |
| Port d'antenne GNSS bg77 | RF (Rx) | Variante bg77 uniquement ; chemin d'antenne conforme à la BG77 GNSS Application Note. |
| Interface SIM | — | SIM/eSIM sur la carte porteuse / le module ; facteur de forme et protection ESD : [à confirmer]. Le profil réseau (APN/MNO) est une constante de build du micrologiciel. |
| Alimentation / GND | — | SELV/PELV depuis la carte porteuse. |
| SWD/JTAG + SEGGER RTT | Débogage | Accessible uniquement physiquement via JTAG/SWD ; verrouillé à la livraison par le verrou de débogage du Gecko Security Element (debug-lock). |
Broches réservées / liées à la plateforme : une entrée BLE et une entrée POWER-GOOD sont configurées lors du bring-up de la carte, mais ne sont pas utilisées de manière productive dans le périmètre fonctionnel actuel.
bg77, également l'antenne GNSS. Aucune modification du chemin RF par rapport au design de référence du module.Le serveur de protocole UART (src/uart_protocol/yuki_module_server.c) est l'interface locale du module vers le MCU hôte et, en même temps, sa principale surface d'attaque. Il est sécurisé par une validation stricte des trames, des longueurs et du CRC (testé par fuzzing). Aucune authentification n'a lieu — la liaison est considérée comme interne à l'assemblage / au module (liaison hôte de confiance).
┌──────────── Header (2 Byte) ────────────┬── Payload (0..511) ──┬── CRC (2 Byte) ──┐
│ Byte0 = (Type << 1) | (Len-Bit8) │ V[0..Len-1] │ CRC-16 (Big-Endian)│
│ Byte1 = Len & 0xFF │ │ │
└──────────────────────────────────────────┴──────────────────────┴───────────────────┘
YUKI_MODULE_MAX_TLV_LENGTH). Les longueurs excessives sont rejetées avec EPROTO.0x1021, init 0xFFFF, pas de XOR-Out), calculé sur l'en-tête + la charge utile, transmis en big-endian.À chaque trame de requête, le serveur répond avec le même Type. La charge utile commence par un octet d'erreur / d'état, suivi des données utiles :
Response.Payload = [ ErrByte ] [ Daten … ]
| Code | Nom | Signification |
|---|---|---|
0x00 | ERR_OK | Succès |
0x01 | ERR_CMD | Commande inconnue / non prise en charge |
0x02 | ERR_ARG | Argument invalide / violation de longueur |
0x03 | ERR_BUSY | Service non prêt / occupé (p. ex. service pas encore enregistré, GNSS actif) |
0x10 | ERR_SIM | Erreur SIM |
0x11 | ERR_NET | Cellulaire non enregistré |
0x12 | ERR_CONN | Aucune connexion backend / de données |
0xFF | ERR_INTERNAL | Erreur interne |
| Type | Commande | Direction | Données utiles de réponse (après ErrByte) |
|---|---|---|---|
0x00 | GET_PUBKEY | Hôte → module | clé publique ED25519 de l'appareil, 32 octets |
0x01 | GET_IMEI | Hôte → module | IMEI sous forme de chaîne |
0x02 | GET_ICCID | Hôte → module | ICCID sous forme de chaîne |
0x04 | SET | Hôte → module | aucune (définit une propriété ; charge utile voir §9.4) |
0x05 | SYNC | Hôte → module | aucune (déclenche une synchronisation backend du service client) |
0x06 | VERSION | Hôte → module | version du micrologiciel sous forme de chaîne |
0x07 | STATUS | Hôte → module | dernier code d'état de connexion (ErrByte) |
0x08 | GEO_ENA bg77 | Hôte → module | aucune (active/désactive le fix GNSS ; sur eg912 → ERR_CMD) |
0x09 | GEO_RPT | Module → hôte | rapport géographique de 22 octets (push, voir §12) |
0x0A | GET_TIME | Hôte → module | heure Unix UTC, 4 octets big-endian |
0x0B | SET_UUID | Hôte → module | aucune (préfixe 32 bits → UUID du service client) |
0x0D | GET_CLAIMCODE | Hôte → module | Claim-Code (chaîne Base58 à 12 caractères) |
0x0E | GET_LTE_QUALITY | Hôte → module | qualité du signal 0..5 (1 octet) |
0x0F | GET_LTE_CONNECTED | Hôte → module | connexion de données du modem active (1 octet 0/1) |
0x10 | GET_CLOUD_CONNECTED | Hôte → module | backend rattaché (1 octet 0/1) |
0x11 | FACTORY_RESET | Hôte → module | aucune réponse — le module efface le cache IMEI/ICCID/script et redémarre (§15) |
La commande SET définit une propriété sur le service client. Structure de la charge utile :
[0..1] id (Big-Endian) [2] Flags (Bit4 = read-only) [3] Typ dann Wert
Typ STRING/BIN: [4..5] Länge (BE) [6..] Bytes
sonst (Skalar): [4..] Wert (feste Länge je Typ)
| Type | Code | Longueur | Type | Code | Longueur |
|---|---|---|---|---|---|
| INT32 | 0x01 | 4 | FLOAT | 0x09 | 4 |
| INT16 | 0x02 | 2 | DATETIME | 0x0A | 4 |
| INT8 | 0x03 | 1 | DOUBLE | 0x0B | 8 * |
| UINT32 | 0x04 | 4 | BIN | 0x0C | variable |
| UINT16 | 0x05 | 2 | UINT64 | 0x0D | 8 * |
| UINT8 | 0x06 | 1 | STRING | 0x0E | variable |
| BOOL | 0x07 | 1 | INT64 | 0x0F | 8 * |
| UUID | 0x08 | 16 | |||
* DOUBLE, UINT64 et INT64 sont acceptés dans l'état actuel du micrologiciel, mais pas encore traités (réponse ERR_INTERNAL).
Via la CLI de diagnostic série (débogage/service uniquement), les commandes info, imei, iccid, pubkey, quality, connected, cloud_connected et exit, entre autres, sont disponibles.
main → yuki_app_init() : bring-up de la carte, thread des LED d'état, init du FS.cwClient) est enregistré ; attachement au backend via LTE/DTLS auprès du backend Coldwave.app_main() : sert l'hôte, pilote les LED d'état et la synchronisation périodique.device_id au backend.GET_PUBKEY.base58(SHA-256(pubkey ‖ imei ‖ iccid)), tronqué aux 8 premiers octets du hachage → code Base58 à 12 caractères. Récupération via GET_CLAIMCODE. Le Claim-Code associe l'appareil au compte propriétaire dans le portail Coldwave.En fonctionnement normal, le module fonctionne de manière autonome. La boucle app_main() (période 2 s) :
desired_sync_interval_s) ainsi que des synchronisations déclenchées par événement via la broche SYNC,SET_UUID).Les propriétés de diagnostic publiées par le superviseur (en lecture seule) comprennent :
| Propriété | ID | Type | Signification |
|---|---|---|---|
| LTE_RSRP | 0x1000 | int16 | niveau de réception RSRP (dBm) |
| LTE_BW | 0x1010 | uint16 | bande passante LTE |
| LTE_Q | 0x1011 | uint8 | qualité du signal |
| CELLINFO_MCC/MNC | 0x1001/0x1002 | uint16 | Mobile Country/Network Code |
| CELLINFO_LAC/CI | 0x1003/0x1004 | uint32 | Location Area Code / Cell-ID |
| GPIO0 / GPIO1 | 0x2000/0x2001 | bool | sorties service-tag |
Les paramètres d'exploitation pertinents pour la sécurité (FQDN du backend, APN, MNO, variante de modem, débit du modem) proviennent exclusivement de constantes de build et ne sont pas modifiables à l'exécution par des entrées externes. Il n'existe aucun mot de passe usine par défaut ni console de configuration locale.
bg77 uniquement)Dans la variante bg77, le périphérique GNSS (gnss0) est ouvert. L'hôte active le positionnement via GEO_ENA (Type 0x08). Le module interroge ensuite (poll) le récepteur GNSS et envoie, en cas de fix valide, un rapport géographique (GEO_RPT, Type 0x09) en push vers l'hôte — une charge utile fixe de 22 octets :
| Offset | Champ | Format |
|---|---|---|
| 0 | fix_type | uint8 |
| 1 | sats (nombre de satellites) | uint8 |
| 2..5 | ts_utc (heure Unix) | uint32 BE |
| 6..9 | lat_e7 (latitude × 1e7) | int32 BE |
| 10..13 | lon_e7 (longitude × 1e7) | int32 BE |
| 14..17 | alt_cm (altitude en cm) | int32 BE |
| 18..21 | hdop_centi (HDOP × 100) | uint32 BE |
Le récepteur GNSS est un récepteur pur (aucune propriété d'émission). Pendant les fix GNSS actifs, la LED verte affiche le motif GPS (§14). Sur la variante eg912, le chemin GNSS n'est pas lié ; le serveur répond à GEO_ENA par ERR_CMD.
APP_VERSION_STR (seul un véritable tag Git SemVer est repris comme version OTA). L'activation de Secure Boot / anti-rollback et la mise à disposition de la clé de signature OTA de production sont des conditions préalables de production à la charge de l'intégrateur (voir §16).Le module pilote une LED verte et une LED rouge. Le thread d'état fonctionne à une cadence de 100 ms ; les motifs découlent de l'état défini par la boucle principale :
| Motif LED | État | Signification |
|---|---|---|
| vert, fixe | NORMAL | En ligne — modem connecté et backend rattaché |
| vert, clignotement rapide (~2 Hz) | CONNECTING | Modem connecté, enregistrement backend en cours |
| vert, clignotement lent (~0,5 Hz) | SYNC | Une synchronisation backend vient d'être effectuée |
| vert, motif d'impulsions (3 impulsions courtes toutes les ~1,2 s) | GPS bg77 | Positionnement GNSS actif |
| rouge, 2× clignotement + pause | NET_ERROR | Modem enregistré, mais aucune connexion de données |
| rouge, 3× clignotement | MOBILE_ERROR | Modem non enregistré / aucun réseau cellulaire |
| rouge, 4× clignotement | SIM_ERROR | Erreur SIM |
En complément, la broche de sortie NW_ERR signale l'état de la liaison backend au niveau matériel : niveau haut en cas d'erreur cellulaire / backend, niveau bas dès que le backend est rattaché. Le MCU hôte peut exploiter ce signal sans interrogation UART.
Le YMOD ne possède aucun bouton de reset physique. La réinitialisation s'effectue via l'hôte :
SYNC via UART, Type 0x05) déclenche une synchronisation backend immédiate.FACTORY_RESET (Type 0x11) efface la mémoire cache locale IMEI/ICCID/script et redémarre le module, de sorte que le prochain démarrage relit l'IMEI/l'ICCID à neuf depuis le modem. Le module ne répond pas — l'hôte détecte la réinitialisation au redémarrage du module. La liaison hôte étant considérée comme de confiance, aucune confirmation supplémentaire n'a lieu.cwClient, pas de cwServer), pas de Telnet/SSH/HTTP. La seule interface locale est le serveur de protocole UART.BACKEND_CA_CERT_PEM) pour que la vérification du certificat serveur DTLS soit effective.ImagineOn fournit pour ce produit des mises à jour de micrologiciel de sécurité pendant une période de support définie et suit un processus de divulgation coordonnée (CVD) conforme à IEC 62443-4-1 (§23). La durée calendaire de la période de support pour le produit final YMOD : [à confirmer].
{'0','3'}, bande par défaut LTE_B8 (900 MHz). Les bandes réellement prises en charge résultent de la fiche technique Quectel correspondante.Le superviseur de connectivité (coldwave-yuki-core) surveille la connexion (période 5 s) et, en cas de perte, parcourt une échelle de reprise déterministe : reconnexion → reset du modem → redémarrage. Le redémarrage n'intervient qu'après au plus 3 resets infructueux (max_resets_before_reboot=3) et une durée de fonctionnement minimale de 30 min. Environ 5 synchronisations échouées sans aller-retour vers le backend sont considérées comme « attaché mais inactif » (attached-but-dead) et déclenchent elles aussi un reset du modem. Un plafond de débit (ltemq_rate_cap_kbit_s) limite le débit ; il n'existe pas de budget de données mensuel.
Le module ne nécessite aucun entretien. Il ne contient aucune pile de sauvegarde RTC ni aucune pièce remplaçable par l'utilisateur (l'heure provient du NTP). L'entretien côté produit final (nettoyage, vérification du raccordement d'antenne) incombe à l'exploitant conformément à la documentation du produit final.
| Paramètre | Variante eg912 par défaut | Variante bg77 |
|---|---|---|
| Module radio | Quectel EG912 (pré-certifié) | Quectel BG77 (pré-certifié) |
| Service radio | LTE Cat-1 | LTE-M (Cat-M1) / NB-IoT |
| GNSS | — | intégré, réception seule |
| Bande par défaut (code) | LTE_B8 (900 MHz) ; bandes prises en charge selon la fiche technique du module | |
| Puissance d'émission / modulation | spécifiées par le certificat de module Quectel correspondant (aucune conception radio propre) | |
| Antenne | 50 Ω, tracé conforme à la RF Application Note Quectel ; pour bg77, chemin d'antenne GNSS supplémentaire | |
Le justificatif d'intégration (RED Art. 3(2)) s'appuie, pour les deux modules, sur le certificat CE Quectel correspondant (GCF/PTCRB) et sur des essais au niveau appareil selon EN 301 489-1/-52 et EN 301 908-1/-13, au niveau du produit final.
| MCU / plateforme | Silicon Labs EFR32MG26 (ARM Cortex-M33), Gecko Security Element (HW-TRNG, PSA Crypto) |
|---|---|
| Système d'exploitation | coldwave-os 2.2.0 (FreeRTOS, lwIP, mbedTLS/PSA, OTA, KV-FS, bootloader MCUboot) |
| Cellulaire | Quectel EG912 (LTE Cat-1) ou BG77 (LTE-M/NB-IoT) — selon la variante |
| GNSS | bg77 uniquement, réception seule |
| Interface hôte | UART (TLV + CRC-16/CCITT-FALSE), TLV max. 511 octets ; GPIO0/1, SYNC, SLEEP, NW_ERR |
| Sécurité (logiciel) | Secure Boot, OTA signées (ECDSA-P256/SHA-256), DTLS, keystore PSA, clé d'appareil ED25519 |
| Alimentation | SELV/PELV via la carte porteuse — caractéristiques électriques : [à confirmer] |
| Dimensions / empreinte | [à confirmer] |
| Conditions ambiantes | [à confirmer] |
| Symptôme | Cause possible | Action |
|---|---|---|
| NW_ERR reste au niveau haut / LED rouge clignote 3× | Modem non enregistré, aucun réseau | Vérifier le serrage de l'antenne et la réception ; vérifier la SIM / la disponibilité du réseau. |
| LED rouge clignote 2× | Modem enregistré, mais aucune connexion backend / de données | Vérifier l'APN / l'état du réseau ; attendre l'échelle de reprise (§17.2). |
| LED rouge clignote 4× | Erreur SIM | Vérifier le logement / les contacts de la SIM et son provisionnement. |
Réponses UART avec ERR_ARG | Longueur de trame / CRC ou charge utile SET erronée | Vérifier l'en-tête / le champ de longueur, le CRC-16/CCITT-FALSE et la longueur fixe du type (§9). |
Réponse UART ERR_BUSY sur SYNC/SET | Service client pas encore enregistré ou GNSS actif | N'émettre qu'après l'attachement au backend ; définir l'UUID via SET_UUID. |
GEO_ENA renvoie ERR_CMD | Variante eg912 sans GNSS | GNSS uniquement sur bg77 ; vérifier la variante. |
| Le module redémarre cycliquement au démarrage | aucun IMEI plausible du modem | Vérifier le câblage du modem / de la SIM et l'init du modem. |
| Objet | Contact |
|---|---|
| Signalement de sécurité / de vulnérabilité (CVD/PSIRT) | security@coldwave.io |
| Demandes de conformité / surveillance du marché | compliance@imagineon.de |
| Support général / intégration | [à confirmer] · www.imagineon.de |
Merci de ne pas utiliser d'issues GitHub publiques pour les vulnérabilités. Lors du signalement, indiquer la version du micrologiciel (tag de release / commit) et la variante de modem (eg912/bg77) ; pour les sujets relatifs au protocole UART, une séquence d'octets minimale est idéale. Accusé de réception sous 2 jours ouvrés ; tri sous 5 jours ouvrés ; correctif pour Critical/High (CVSS ≥ 7) sous 90 jours, pour Medium/Low sous 180 jours (regroupé dans la prochaine version mineure). Divulgation coordonnée après la disponibilité du correctif et une fenêtre de déploiement appropriée (typ. 30 jours). Détails : SECURITY.md.
| Composant | Version | Rôle |
|---|---|---|
| coldwave-os (image FU) | 2.2.0 | RTOS, réseau, DTLS, OTA, FS, PSA |
| coldwave-os (bootloader) | 2.2.0 | Vérification d'image de type MCUboot |
| libflake | (via coldwave-os) | Couche de propriétés, IPC |
| coldwave-yuki-core | 1.0.0 | Superviseur de connectivité + reprise + qualité LTE |
| Serveur de protocole UART | (produit) | TLV + CRC-16/CCITT-FALSE + gestionnaires — développé par ImagineOn |
Le code applicatif du YMOD (src/) est entièrement développé par ImagineOn ; il n'existe aucun code source tiers vendored dans l'image, hormis le SDK coldwave-os. La SBOM complète (CycloneDX) se trouve sous firmware/compliance/sbom/ymod-v1.0.0.cdx.json. Distribution par ImagineOn GmbH selon les conditions de licence logicielle ImagineOn (imagineon.de/de/info/licensing-terms) — aucune licence open source ; redistribution uniquement sous accord écrit.
| APN | Access Point Name — point d'accès dans le réseau cellulaire |
| Claim-Code | code d'intégration dérivé cryptographiquement (Base58) |
| CRC-16/CCITT-FALSE | somme de contrôle (poly 0x1021, init 0xFFFF) sur les trames UART |
| DTLS | Datagram TLS — transmission UDP chiffrée |
| ED25519 | procédé de signature à courbe d'Edwards de la clé d'appareil |
| GNSS | navigation par satellite (bg77 uniquement, réception seule) |
| ICCID | identifiant de la SIM |
| IMEI | identifiant unique du modem / de l'appareil (15 chiffres) |
| LTE Cat-1 / LTE-M / NB-IoT | techniques de données cellulaires des variantes de modem |
| OTA | mise à jour du micrologiciel par voie hertzienne (Over-the-Air) |
| PSA Crypto | Platform Security Architecture — stockage de clés / API crypto |
| RED | Directive Équipements Radioélectriques 2014/53/UE |
| RSRP | Reference Signal Received Power — niveau de réception LTE |
| TLV | Type-Length-Value — format de trame du protocole UART |
| YUKI_MODEM | drapeau de build pour le choix de la variante de modem (eg912/bg77) |
| Version | Date | Modification |
|---|---|---|
| 1.0 | 2026-07-13 | Première édition du manuel d'intégration et d'exploitation (micrologiciel 1.0.0) |
© 2026 ImagineOn GmbH. Tous droits réservés. Le présent manuel ne peut être reproduit ou communiqué à des tiers sans l'autorisation expresse d'ImagineOn GmbH, exception faite de la transmission dans le cadre de la chaîne d'approvisionnement du produit Coldwave Yuki Module (YMOD).