874dd969b6
- NVS-Flash (4MB) durch SD-Karte via SDMMC ersetzt - GPIO: SD_CMD=2, SD_CLK=6, SD_D0=7, SD_CS=23 - CSV-Ausgabe mit Rohdaten-Hex: timestamp, msg_type, channel, RSSI, MAC, raw_hex - Channel-Hopping über alle 10 V2X-Kanäle (5845-5925 MHz) - CSV-Auto-Rotation bei >50MB - v2x_log.txt mit periodischen Statistiken - Frame Queue (64 Frames) zwischen Promisc-CB und Writer Task - Kanal-Hopper, Stats-Task, Frame-Writer als eigene Tasks - README mit SD-Vorbereitung und Analyse-Hinweisen
3.5 KiB
3.5 KiB
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
# 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:
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
# 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
cd v2x_fw
idf.py set-target esp32c5
idf.py build
idf.py flash monitor
Betrieb
- SD-Karte (FAT32) in Slot stecken
- Firmware flashen
- Gerät starten — Daten landen automatisch in
v2x_frames.csvauf der SD-Karte - 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?