# V2X-Sniffer Firmware — SD-Karte Speicherung ## Übersicht Die Firmware speichert V2X-Daten (BSM, CAM, DENM) **komplett autonom** auf einer SD-Karte im ESP32-C5. Kein Host-PC ist erforderlich. ### Was wurde geändert? | Alt | Neu | |-----|-----| | NVS-Flash (4 MB, begrenzt) | SD-Karte via SDMMC (FAT32, unbegrenzt) | | Keine Rohdatenspeicherung | CSV mit Rohdaten (Hex) pro Frame | | Manuell / interaktiv | Komplett autonom, channel-hopping | | C++ Lambda in C-Code (Bug) | Korrekter C-Code mit Queue | ## Hardware **T-Dongle-C5** mit SD-Karte (FAT32 formatiert) ### SD-Karte Pinbelegung (ESP32-C5 native SDMMC) | Signal | GPIO | |--------|------| | SD_CMD | GPIO 2 | | SD_CLK | GPIO 6 | | SD_D0 | GPIO 7 | | SD_CS | GPIO 23 | ### SD-Karte vorbereiten ```bash # Auf dem Host: SD-Karte mit FAT32 formatieren mkfs.fat -F 32 /dev/mmcblk0 # Linux diskutil eraseDisk FAT32 V2X /dev/disk2 # macOS format /dev/sdX /FS:FAT32 /Q # Windows # Oder direkt auf dem ESP nach Boot: # Die Firmware formatiert automatisch falls nötig ``` ## Ausgabe ### v2x_frames.csv Jeder gefangene Frame als eine Zeile CSV: ```csv timestamp_us,msg_type,channel,frequency_mhz,rssi_dbm,noise_dbm,rate_index,frame_len,mac_addr,bssid,raw_hex 1715234567890,2,157,5845.0,-45,-92,8,314,AA:BB:CC:DD:EE:FF,11:22:33:44:55:66,AABBCCDD... ``` **Spalten:** | Spalte | Beschreibung | |--------|-------------| | timestamp_us | Mikrosekunden seit Systemstart | | msg_type | 1=BSM, 2=CAM, 3=DENM, 0=Unknown | | channel | Kanal (157-164, 17, 18) | | frequency_mhz | Frequenz in MHz (5845-5925 oder 4300) | | rssi_dbm | Empfangsleistung | | noise_dbm | Rauschleistung | | rate_index | Datenraten-Index (802.11p) | | frame_len | Paketlänge in Bytes | | mac_addr | MAC-Adresse des Absenders | | bssid | BSSID der Basisstation | | raw_hex | Rohdaten als Hex-String | ### v2x_log.txt System-Log mit: - Start-Zeitstempel - Periodischen Statistiken (alle 60 Sekunden) - Fehlermeldungen - CSV-Rotation-Ereignissen ### CSV-Rotation Wenn die CSV-Datei > 50 MB erreicht, wird sie automatisch umbenannt: ``` v2x_frames_20260509_143022.csv ``` und eine neue leere CSV mit Header erstellt. ## Kanal-Hopping Die Firmware wechselt alle 30 Sekunden durch alle V2X-Kanäle: ``` 5845, 5855, 5865, 5875, 5885, 5895, 5905, 5915, 5925, 4300 MHz ``` ## Datenanalyse ### Auf dem PC öffnen ```bash # CSV auf SD-Karte kopieren cp /media/user/V2X/v2x_frames.csv ./v2x_frames.csv # Mit Python analysieren python3 -c " import csv, pandas as pd df = pd.read_csv('v2x_frames.csv') print(df.head()) print(df.describe()) print('Message Types:') print(df['msg_type'].value_counts()) " # Mit Excel/Numbers öffnen # Direkt per Doppelklick in der SD-Karte ``` ### Rohdaten dekodieren Die `raw_hex` Spalte enthält die unveränderten V2X-PDUs (ASN.1 DER / BER-TLC). Diese können mit einem C-ITS Decoder weiterverarbeitet werden. ## Bauen ```bash cd v2x_fw idf.py set-target esp32c5 idf.py build idf.py flash monitor ``` ## Betrieb 1. SD-Karte (FAT32) in Slot stecken 2. Firmware flashen 3. Gerät starten — Daten landen automatisch in `v2x_frames.csv` auf der SD-Karte 4. SD-Karte auslesen wenn benötigt ## Fehlerbehebung **SD-Karte wird nicht erkannt:** - FAT32 Format prüfen - GPIO-Pins richtig verkabelt (ESP32-C5 SDMMC) - SD-Karte ≤ 32GB (SDSC) oder ≤ 2TB (SDHC/SDXC) **CSV-Schreibfehler:** - SD-Karte schreibgeschützt? - Genug freier Speicher? - FAT32-Dateisystem korrupt? **Keine Frames im CSV:** - Kanal-Hopping funktioniert? (Log prüfen) - Promiscuous Mode aktiv? - Andere Geräte senden auf V2X-Kanälen?