Forum: Mikrocontroller und Digitale Elektronik NRF24L01 löscht meine packete weil es denkt diese wären ein resend


von box25 (Gast)


Lesenswert?

Hallo,
mein Problem ist, das ich ein eigenes Protokoll auf dem NRF24L01 
geschrieben habe, jetzt ist das problem: alle module loggen sich in das 
Hauptmodul ein, sobalt sie starten, wenn jetzt aber ein modul startet 
und sich anmeldet, und aus beispielsewisen Spannungsproblemen neustartet 
und sich nochmal anmeldet, kommen die Packete nicht an. ich habe 
verzweifelt über eine Woche versucht den Fehler zu finden, und jetzt 
hoffe ich, das ich ihn gefunden habe: Das loginn besteht aus relativ 
wenigen Datenübertragungen zwischen den 2 Modulen. Wenn jetzt das 
neugestartete Modul sich anmeldet, denkt die haupteinheit, das das 
empfangene paket ein altes nochmals gesendetes ist, und bestätigt somit 
dem sendenden Modul, das es angekommen ist (ack), gibt dem uC aber nicht 
weiter das etwas empfangen wurde, weil diese Datenpaket entwertet wurde. 
Diese theorie klingt für mich logisch, da das packet, die adresse und 
selbst der CRC exakt die gleichen sind.

1. Jetzt ist die frage: klingt das für euch auch so plausibel wie für 
mich?
2. kann ich irgendwie den CRC Wert selbst ändern, weil dann könnte ich 
mir einen Wert im EEPROM meines UC speichern, und diesen bei jedem 
neustart um eins erhöhen, und als startwert für den CRC in das NRF24L01 
Modul laden. Somit wären war bei erneutem einloggen alle Daten gleich 
wie davor, aber das CRC bit würde eben beim 1. mal auf 0 stehen, danach 
auf 1, dann 2, dann 3, und erst dann wieder auf 0 stehen.

Schonmal im Vorraus vielen dank für eure Hilfe, und entschuldigt bitte 
meine Rechtschreibung.

von Nop (Gast)


Lesenswert?

Das Problem ist, daß Deine Haupteinheit unsinnig reagiert. Die sollte 
nicht nur ein ACK schicken, wenn sie einen erneuten Login sieht, sondern 
an den Stand zurückspringen, wo der Login eben losgeht, und ALLES 
nochmal schicken.

Mit anderen Worten, statt da in den Modulen was zurechtzupfuschen, 
solltest Du den Fehler da beheben, wo er ist, und zwar in der 
Statemachine der Haupteinheit.

von Einer K. (Gast)


Lesenswert?

Der CRC Wert wird aus den Daten berechnet.
Jedes mal neu.
Änderst du die Daten, ändert sich der CRC Wert.
Zwangsläufig.

Nein, du hast da einen anderen Bock geschossen!

von Bernd (Gast)


Lesenswert?

Ich hatte genau das selbe Problem und habe es durch zusätzliche Daten in 
den Paketen gelöst. Einerseits einen Zähler, der bei jedem Paket erhöht 
wird (der muss natürlich über Neustarts hinweg gesichert) und zusätzlich 
die NodeId des sendenden Moduls.

Das Problem mit den Nrf24l01 Modulen ist, dass sie ein Resend nur anhand 
des crc Feldes und einem 2Bit Counter erkennen. Diese Info wird für das 
letzte empfangene Paket gespeichert, egal wie lang es her ist. Wenn der 
Sender dann neustarten, der 2Bit Counter zufällig bei 0 war und die 
gleichen Daten
(=gleicher crc) gesendet werden, denkt der Empfänger es ist ein Resend 
und verwirft das Paket.

Die SourceId war bei mir notwendig weil ich mehrere Module auf einem 
Channel hatte, was so eigentlich nicht gedacht ist.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.