Mikrocontroller hängt während der seriellen Kommunikation

Ich habe an einem Projekt gearbeitet, bei dem der Mikrocontroller seriell mit dem Computer kommuniziert.

Anfangs funktioniert es richtig, aber nach einiger Zeit (dh 2-3 Stunden) bleibt der Mikrocontroller hängen.

Ich denke, es hängt an der seriellen Kommunikation mit dem Computer. Um dies zu überprüfen, habe ich ein Programm für Mikrocontroller und Computer geschrieben, um Daten seriell zu senden und zu empfangen.

In meinem Programm übertrage ich zunächst eine Zeichenfolge aus fünf Zeichen seriell vom Computer. Der Mikrocontroller empfängt die Zeichenfolge und überträgt dieselbe Zeichenfolge erneut an den Computer. Der Computer empfängt die vom Mikrocontroller übertragene Zeichenfolge.

Jetzt habe ich eine Zeichenfolge gesendet und eine Zeichenfolge am Computer empfangen, ich vergleiche beide Zeichenfolgen und wenn sie gleich sind, schreibe ich '1' in eine Datei und '0', wenn sie unterschiedlich sind.

Ich möchte wissen, ob mein Prozess zur Überprüfung der Kommunikation über die serielle Schnittstelle korrekt ist oder nicht?

Code oder es ist nicht passiert.
Wie wird es mit Strom versorgt? Es kann sein, dass es Geräusche von der Stromversorgung aufnimmt.

Antworten (3)

Eine lange serielle Verkabelung kann übrigens unter Bitfehlern leiden. Wie wäre es, wenn Sie jeder Nachricht (Datenrahmen), die Sie senden, eine Prüfsumme hinzufügen, damit das empfangende Ende diese Prüfsumme überprüfen und den gesamten Datenrahmen verwerfen kann, wenn er falsch ist, und wahrscheinlich um eine erneute Übertragung bittet.

Ein einfacher Prüfsummenmechanismus kann durch EOR-Verknüpfung aller Bytes im Rahmen und Senden des resultierenden Bytes als Prüfsumme erreicht werden. Die empfangende Seite sollte in der Lage sein, dieselbe Prüfsumme zu berechnen.

Was Sie vorschlagen, wird testen, ob die Hardware und die grundlegende Low-Level-Software funktionieren. Das wussten Sie jedoch bereits, da Sie sagen, dass es über 2 Stunden läuft, bevor etwas stoppt.

Dies bedeutet, dass Sie einen Fehler in etwas haben, das nur selten auftritt, wie z. B. ein Bitfehler, ein Überlauf oder ein Rahmenfehler. Was passiert unter jeder dieser Bedingungen im Mikro? Die Hardware muss möglicherweise bei einem Rahmenfehler oder Überlauf zurückgesetzt werden. Machst du das?

Außerdem muss man bedenken, dass Rauschen in die Leitung gelangen kann. Wie erholt sich Ihr Protokoll, wenn eine Seite etwas anderes empfängt als die andere Seite gesendet hat? An diese Dinge muss man denken. Sie könnten Daten in Paketen mit Prüfsummen, ACKs und Wiederholungen senden. Sie könnten eine Art Keepalive-Schema mit automatischem Zurücksetzen bei Inaktivität nach einem Timeout durchführen. Es gibt viele Wege. Aus diesen Gründen ist es viel schwieriger, ein gutes serielles Protokoll zu entwerfen, als die meisten Leute auf den ersten Blick denken.

Wenn es immer 2 Stunden sind, könnte auch ein Speicherpufferüberlauf eine Ursache sein.

Führen Sie gleichzeitig andere Dinge auf dem Mikroprozessor aus? Wenn ja, versuchen Sie, sie zu deaktivieren. Versuchen Sie nach Möglichkeit, einen anderen Chip zu verwenden, und prüfen Sie, ob Sie dasselbe Verhalten erhalten.