SD-Karte: V2X-Frames direkt auf SD speichern (CSV, autonom)
- 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
This commit is contained in:
@@ -0,0 +1,149 @@
|
||||
# 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?
|
||||
Reference in New Issue
Block a user