Forum: Mikrocontroller und Digitale Elektronik Raspberry Pi4 : UART RX "verschluckt" Datum


von RPi4_R (Gast)


Lesenswert?

Hallo,

nachdem mir hier schon mal zum RPi4 UART geholfen wurde, bitte ich
nochmals um Hilfe bei einem anderen Problem mit dem UART des RPi4.

Zum Auslesen von Sensoren habe ich ein C Programm erstellt und
benutze einen UART mit Termios.

Ich habe den UART eigentlich soweit, dass ich Daten senden und
empfangen kann. Das geht auch gut, bis auf einen reproduzierbaren
Fall. Ich empfange normalerweise immer 7 Zeichen. Das klappt auch
solange bis an 3. Stelle der Wert 0x11 steht. Dieses Datum
wir immer unterdrückt und es werden nur 6 Daten empfangen. Das
3. Datum (0x11) wird einfach ausgelassen und fehlt im Empfangspuffer.
Mit einem Protokollanalyzer kann ich aber sehen, dass der Sender das
3. Datum ordnungsgemäß sendet, also 7 Zeichen liefert.

Ist 0x11 irgend was besonderes für den UART des RPI4? Kann mir da
bitte jemand weiterhelfen oder hat eine Idee dazu?

Danke

Beitrag #6906989 wurde von einem Moderator gelöscht.
von Achim M. (minifloat)


Lesenswert?

Guck mal https://de.m.wikipedia.org/wiki/Steuerzeichen

0x11...0x14
"Gerätespezifische Steuerzeichen, etwa um bestimmte Gerätefunktionen (z. 
B. Schriftart bei Druckern) ein- und auszuschalten.

DC3 ^S (XOFF) und DC1 ^Q (XON) werden zur Flusskontrolle bei XON/XOFF 
eingesetzt."

mfg mf

von c-hater (Gast)


Lesenswert?

RPi4_R schrieb:

> nochmals um Hilfe bei einem anderen Problem mit dem UART des RPi4.

Nein, du bittest um Hilfe, weil du zu faul bist, Doku zu lesen. Im 
konkrete Fall natürlich die zu termios.

> Ist 0x11 irgend was besonderes für den UART des RPI4?

Wenn du via ioctl mit hinreichend schwachsinnig initialisierter 
termios-Struktur diese Verhalten anforderst, wird dir auch das Linux des 
Paspi4 deinen Wunsch erfüllen. Sei er auch noch so idiotisch...

Nein, das "Do what I want"-Feld gibt es in der termios-Struktur nicht, 
man muss das schon kompetent selber ausfüllen...

von Achim M. (minifloat)


Lesenswert?

PS.
https://de.m.wikipedia.org/wiki/Datenflusssteuerung#Software-Flusssteuerung,_Software-Handshake,_Software-Protokoll_oder_X-ON/X-OFF

Da steht nochmal genauer, dass
* DC1 0x11 = XON
* DC3 0x13 = XOFF

Daher termios mal ohne XON/XOFF konfigurieren.

mfg mf

von PittyJ (Gast)


Lesenswert?

Warum überträgt man Binärwerte mit einem Protokoll, das nur für 
Buchstaben gedacht wurde?

von RPi4_R (Gast)


Lesenswert?

Vielen Dank Achim M. (minifloat)für den einzigen freundlichen
und konstruktive Beitrag. Das hilft mir.

von Achim M. (minifloat)


Lesenswert?

PittyJ schrieb:
> Warum überträgt man Binärwerte mit einem Protokoll, das nur für
> Buchstaben gedacht wurde?

Viele Leute übertragen Binärdaten über einen UART. Die Frage ist nicht 
"warum", sondern "wie". Scheinbar wird hier durch Sendepause der 
Paketanfang synchronisiert, kann man so machen...

mfg mf

von STK500-Besitzer (Gast)


Lesenswert?

Achim M. schrieb:
> Scheinbar wird hier durch Sendepause der
> Paketanfang synchronisiert, kann man so machen...

oder über die Paketlänge.
Oder man verwendet halt nicht die Standardstart- und -stopzeichen.
Es gibt auch Protokolle, die nur als Startsignal ein Byte >= 0x80 
übertragen, und die Daten nur < 0x80 sein dürfen. Damit kann man zwar 
keine Binärzahlen übertragen, ist in dem Fall aber egal.

von Stefan F. (Gast)


Lesenswert?

Ich denke, du hast keine Lust auf irrelevante Ratschläge und falsche 
Vorwürfe. Überlege mal, woher die kommen.

Wenn du Fragen zu einem selbst geschriebenen Programm hast, solltest du 
mindestens dessen Quelltext bereit stellen.

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.