Forum: PC-Programmierung serial Port hello world mit Linux bash echo+cat


von Stefan E. (attiny45) Benutzerseite


Lesenswert?

Hallo, ich will mich gerade in serial Port und rs232 einarbeiten.
dazu hab ich gegoogelt, aber die tutorials funktionieren bei mir nicht.
ich will einfach nur erstmal irgendein 'helloworld' zum /dev/ttyS4 
schicken und dann kontrollieren und anzeigen lassen, ob es angekommen 
ist am port.
2 terminals hab e ich offen.
terminal 1: root@pc1:/home/user1# cat /dev/ttyS4

terminal 2: root@pc1:/home/user1# echo "hallo" > /dev/ttyS4

beide terminals haengen aber, also der cursor is in der newline ohne 
prompt.

das hier muessten die beiden serialports meiner pci adapterkarte sein:
root@pc1:/home/user1# dmesg | grep tty
[    0.000000] console [tty0] enabled
[    1.035158] 0000:03:00.0: ttyS4 at I/O 0xd030 (irq = 17, base_baud = 
115200) is a ST16650V2
[    1.057793] 0000:03:00.1: ttyS5 at I/O 0xd020 (irq = 18, base_baud = 
115200) is a ST16650V2
root@pc1:/home/user1#

also ttyS4 und ttyS5

warum geht da nix?
also vom Prinzip her will ich halt sowas hier machen:
https://giovanni.wordpress.com/2007/01/06/send-bytes-to-serial-port/
also ich blick da eh noch garnicht durch...erst hab ich es probiert ohne 
ein Kabel anzuschliessen. jetz hab ich mal ein Nullmodemkabel zwischen 
S4 und S5 gehaengt. aber nie kommt was.


Gruss Stefan

: Bearbeitet durch User
von Sebastian (Gast)


Lesenswert?

Hi,

du schreibst die Daten mit echo nach ttyS4 und liest mit cat ebenfalls 
von ttyS4. Damit das funktioniert müsstest du an ttyS4 den TxD mit dem 
RxD verbinden.

Wenn du, wie du geschrieben hast, ttyS4 mit einem Nullmodem-Kabel mit 
ttyS5 verbunden hast, dann kannst du in einer der beiden schreiben und 
müsstest die Daten an dem jeweils anderen Device lesen können. Das 
sollte dann natürlich in beiden Richtungen gehen.

Greets
  Sebastian.

von Stefan E. (attiny45) Benutzerseite


Lesenswert?

Sebastian schrieb:
> Wenn du, wie du geschrieben hast, ttyS4 mit einem Nullmodem-Kabel mit
> ttyS5 verbunden hast, dann kannst du in einer der beiden schreiben und
> müsstest die Daten an dem jeweils anderen Device lesen können. Das
> sollte dann natürlich in beiden Richtungen gehen.

Hi Sebastian,
also das hab ich jetz probiert, geht leider auch nicht:
terminal 1:
root@pc1:/home/user1# echo "hallo" > /dev/ttyS4
root@pc1:/home/user1#

terminal 2 : wieder empty newline...kein hallo...
root@pc1:/home/user1# cat /dev/ttyS5

von Daniel A. (daniel-a)


Lesenswert?

Versuche mal bei einem "picocom /dev/ttyS4" und beim anderen "picocom 
/dev/ttyS5". Gib eventuell mit -b noch eine Baudrate mit. Prüfe vorher 
eventuell mit "stty -F /dev/ttyS4" was für eine baud rate etc. 
eingestellt ist. Damit kann man die auch setzen, wenn das nicht durch 
ein anderes Program (picocom, getty, etc.) erledigt wird.

von Günter Lenz (Gast)


Lesenswert?

Es gab schon mal ein ähnliches Thema.
Lies das mal durch, vielleicht hilft es dir.

Beitrag "Eingaben in eine Datei umleiten"

von Damals (Gast)


Lesenswert?

Was ist mit Flowcontrol? (RTS/CTS)
DTR/DSR/CD ist richtig gesetzt?

von Stefan E. (attiny45) Benutzerseite


Lesenswert?

Damals schrieb:
> Was ist mit Flowcontrol? (RTS/CTS)
> DTR/DSR/CD ist richtig gesetzt?

genau von diesem ganzen Zeugs hab ich noch null Ahnung, aber ich vermute 
auch langsam dass es irgendwie an diesen Dingern/Settings liegen wird.
mittlerweile geht wenigstens bisserl was.
naemlich so: die Reihenfolge is anscheinend entscheidend.
zuerst muss ich auf s4 den echo absenden. dann geht der cursor in die 
empty newline.
aber noch ohne prompt.
dann geh ich im anderen terminal rein und sage cat /dev/ttys5 und mach 
return, und dann reagiert auch das echo terminal und zeigt das prompt 
an, also dass der befehl erledigt is. und im cat terminal kommen 
manchmal ein 'h' oder ein unknown zeichen, danach aber immer gleich auch 
das prompt. also in der reihenfolge erst echo dann cat haengt jetz 
zumindest mal nix mehr.
ich glaube dass da beim senden des echo erst die connection noch closed 
sein muss und durch das cat wird die connection erst open gemacht, 
irgendwie durch handshake vielleicht? aber mein nullmodem kabel hat kein 
handshake draht, nur masse tx und rx, laut artikelbeschreibung...hab 
noch nicht nachgeschaut.

und zum picocom Tipp von Daniel: hab ich jetz mal probiert, aber ich 
weiss noch nicht wie man das benutzt. muss ich mal rumprobieren.


also mit picocom kommt jetz wirklich was raus im target terminal, also 
genau die Buchstaben die ich im term1 eingebe, kommen im term2 raus.
aber das is mir zu highlevel, mir wuerde es gefallen wenn das mit den 
schoenen basic Mitteln cat und echo auch gehen wuerde, so wie es in all 
den Tutorials auch geht. da kann man dan naemlich auch schoene bash 
scripte schreiben mit cat+echo vielleicht.

: Bearbeitet durch User
von Stefan E. (attiny45) Benutzerseite


Lesenswert?

Günter Lenz schrieb:
> Beitrag "Eingaben in eine Datei umleiten"
>Im unteren Fenster gebe ich dann:
>cat > /dev/ttyUSB0
>ein, und im oberen Fenster gebe ich:
>cat /dev/ttyUSB0

ah cool, das geht ja wirklich! ABER: das geht nur wenn man nach der 
Eingabe RETURN drueckt! hab ich grade zufaellig rausgefunden.
wahnsinn, endlich geht mal was.

term1: root@pc1:/home/user1# cat > /dev/ttyS4
term2: root@pc1:/home/user1# cat /dev/ttyS5

eingabe in term1 und senden mit returntaste.

beenden mit ctrl+d


danke

von Günter Lenz (Gast)


Lesenswert?

>Damals schrieb:
>> Was ist mit Flowcontrol? (RTS/CTS)
>> DTR/DSR/CD ist richtig gesetzt?
>
>genau von diesem ganzen Zeugs hab ich noch null Ahnung, aber ich vermute
>auch langsam dass es irgendwie an diesen Dingern/Settings liegen wird.

Das sind sogenannte Handshakeleitungen, wenn du sie in
dein Datenkabel nicht hast und nur RXD und TXD benutzt
kannst du das mit stty abschalten.
Mit stty kannst du den Serial-Port nach deinen Wünschen
konfigurieren.


https://www.ip-insider.de/was-ist-ein-handshake-a-794054/

https://de.wikipedia.org/wiki/Datenflusssteuerung

http://www.netzmafia.de/skripten/hardware/PC-Schnittstellen/seriell.html

http://www.netzmafia.de/skripten/hardware/PC-Schnittstellen/SerialPort_Programming_c.pdf

von Günter Lenz (Gast)


Lesenswert?

Hier wird erklärt wie man stty benutzt.

http://www.fibel.org/linux/lfo-0.6.0/node92.html

von Stefan E. (attiny45) Benutzerseite


Lesenswert?

jetzt habich was gutes gefunden:
https://pimylifeup.com/raspberry-pi-serial/

im term1:
root@pc1:/home/user1/lernen/pythontest# apt install python-serial
root@pc1:/home/user1/lernen/pythontest# cat serialwrite.py
#!/usr/bin/env python
import time
import serial
ser = serial.Serial(
        port='/dev/ttyS4', #Replace ttyS0 with ttyAM0 for Pi1,Pi2,Pi0
        baudrate = 9600,
        parity=serial.PARITY_NONE,
        stopbits=serial.STOPBITS_ONE,
        bytesize=serial.EIGHTBITS,
        timeout=1
)
counter=0
while 1:
        ser.write('Write counter: %d \n'%(counter))
        time.sleep(1)
        counter += 1

root@pc1:/home/user1/lernen/pythontest#
root@pc1:/home/user1/lernen/pythontest# python serialwrite.py

und im term2:
root@pc1:/home/user1# cat /dev/ttyS5
hallo
123

Write counter: 0
Write counter: 1
Write counter: 2
Write counter: 3
Write counter: 4
Write counter: 5
Write counter: 6
Write counter: 7
Write counter: 8
Write counter: 9
Write counter: 10
root@pc1:/home/user1#

: Bearbeitet durch User
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.