Periodischer Müll auf der seriellen Schnittstelle

Ich habe ein eingebettetes Board, basierend auf Allwinner V40, das eine serielle (UART) Schnittstelle mit TTL-Spannungspegeln hat. Ich greife auf diese Schnittstelle mit einer kleinen Adapterplatine (MAX232) und einem RS232->USB-Adapter zu.

Normalerweise ist diese Schnittstelle so konfiguriert, dass sie Debug-Informationen sendet (/dev/ttyS0 unter Linux). Ich kann das ein- und ausschalten, und ich kann Daten senden und empfangen, wie ich will. Etwas anderes sendet jedoch genau alle zehn Sekunden Daten. So sieht der Müll aus (10 Sekunden zwischen jeder Zeile, aufgezeichnet mit 9600 Baud, die dritte Zeile wurde von mir gesendet).

Geben Sie hier die Bildbeschreibung ein

Als Referenz ist dies die erste Zeile in Hex:

0A 05 31 04 41 6C 4E 0A 02 39 02 F3 F0 F4 F7 F1 F1 F6 F3 F1 F6 F1 FF FF FF FE FF FF FF FF FF FF FF

Ich habe versucht, die Baudeinstellungen usw. zu ändern, falls etwas anderes mit einer anderen Baudrate sendet, aber das hat zu nichts geführt. Ich habe auch versucht, Bluetooth zu deaktivieren, da Raspberry Pis ein ähnliches Problem haben, wenn Bluetooth aktiviert ist. Das hat nicht geholfen, aber es wird auch nicht schlimmer, wenn Bluetooth aktiv genutzt wird.

Dies ist ein Zweidraht-UART, es gibt keine Flusskontrolle. UART 0 ist mit PB22 und PB23 auf dem SoC verkabelt, was korrekt erscheint. Aus meiner sys_config.fex (ich verwende den Legacy/Allwinner-Kernel):

[uart0]
uart0_used       = 1
uart0_port       = 0
uart0_type       = 2
uart0_tx         = port:PB22<2><1><default><default>
uart0_rx         = port:PB23<2><1><default><default>

[uart0_suspend]
uart0_tx         = port:PB22<7><1><default><default>
uart0_rx         = port:PB23<7><1><default><default>

Ich hoffe jemand erkennt das Bitmuster und kann mir sagen woran es liegt. Irgendwelche Ideen?

Ist der Watchdog aktiviert?
Ich weiß nicht. Ehrlich gesagt bin ich mir nicht einmal sicher, was du meinst...
grep -R "HELLO THIS IS A TEST" /
etwas wie root@orangepizero:~# systemctl status watchdog.service
Nach dem, was ich finden konnte, ist dies möglicherweise nicht hilfreich, aber 0x0A 0x05 sind ASCII-Steuerzeichen für "Newline" "Enquiry" ... alle Zeilen, die so beginnen, bezeichnen Sie als "Müll"? Könnte es eine Methode zur Flusskontrolle sein (?) Vielleicht haben Sie leere Zeilen in Ihrer Datei (?) Ich weiß nicht, Sie werfen nur Dinge weg, die mit anderen Dingen korrelieren könnten, die Sie bereits erkannt haben.
@CapnJJ ja, alle Zeilen beginnen mit 0x0A, 0x05, 0x31 (oder 0x32) und enden mit vielen gesetzten Bits (0xFF usw.). "HALLO, DAS IST EIN TEST" war von mir, um zu beweisen, dass ich die gleiche Baudrate habe und kommunizieren kann :-) .
@SpehroPefhany Dieses Gerät hat Android 6 (gerootet), kein systemctl. Es gibt einen Watchdog-Timer im SoC, der das Gerät zurücksetzen kann, wenn es hängt, aber wir verwenden es derzeit nicht.
Ah. Ich bin davon ausgegangen, dass Sie, als Sie "etwas anderes sendet alle zehn Sekunden Daten sendet. So sieht es aus" schrieben , die tatsächlichen Daten zeigten, die alle zehn Sekunden gesendet werden. Wie dumm von mir.
Sieht aus wie eine Flusskontrolle, ein Problem mit der Überprüfung gültiger Daten, das nicht richtig gefiltert wird. Überprüfen Sie den UART-Fehlerstatus und möchten die Ergebnisse filtern?
Überprüfen Sie vielleicht mit lsof /dev/ttyS0, ob ein anderer Prozess den Port verwendet?
@filo Bingo! Es war ein Touchscreen-Daemon, eGTouchD, der zufällig alle TTYs öffnete und ihnen schrieb. Sie mussten den Befehl jedoch wiederholt verwenden, um ihn auf frischer Tat zu erwischen. Wenn Sie mit dem lsof-Trick eine Antwort geben, kann ich sie akzeptieren, damit Sie die Wiederholung erhalten :-).

Antworten (1)

Überprüfen Sie mit lsof /dev/ttyS0, ob ein anderer Prozess den Port verwendet?