OpenWrt: ttyS0 Read funktioniert nicht

OP #4295651
Lesenswert?
• ▲
▼
Hallo Community,

ich bin dabei ein Programm für OpenWrt zu schreiben. Dies soll die 
Serielle Schnittstelle(ttyS0) ansteuern. Das funktioniert soweit auch 
gut, nur das lesen funktioniert nicht.
Sobald ich etwas auf der Seriellen schreibe, wird auf der anderen Seite 
der gleiche Inhalt zurück geliefert, aber mit einem CRLF.

Die Konsole habe ich schon abgeschaltet.
OP #4295676
Lesenswert?
• ▲
▼
OpenWrt --> PC funktioniert
PC      --> OpenWrt funktioniert nicht

Sobald der PC Daten verschickt, gibt Openwrt die Daten wieder zurück mit 
einem CRLF.

Folgende Konfiguration habe ich in OpenWrt vorgenommen:
◾/etc/sysctl.conf  --> kernel.printk = 0

◾/etc/inittab      --> #::askconsole:/bin/ash --Login

http://wiki.openwrt.org/doc/recipes/terminate.console.on.serial

Quellcode:

1
pFile =fopen("/dev/ttyS0","a");
2
read(fileeno(pFile),Buffer, size);
Moderator Persönliche Seite #4295692
Lesenswert?
• ▲
▼
Patrick S. schrieb:
> OpenWrt --> PC funktioniert
> PC      --> OpenWrt funktioniert nicht


Mach Dich schlau, wie Du auf dem TTY das Echo abschaltest und das TTY in 
den Raw-Mode bekommst, do dass keine Zeichen mehr vom TTY-Treiber 
manipuliert werden.

Google-Eingabe: man termios

Das Auf-Raw-Stellen mittels stty geht zwar auch, besser ist es aber, 
wenn das Programm die TTY-Einstellungen selber kontrolliert.
Gast #4295855
Lesenswert?
• ▲
▼
Patrick S. schrieb:

> Wenn ich statt fopen, open verwende mit dem Flag "O_RDWR",
> könnte das helfen?

Ja, es wird einfacher; fopen() gemischt mit read() ist unnötig 
unübersichtlich.

Meine Programme initialisieren den Port so:
1
struct termios  comm_params;
2

3
  comm_params.c_iflag = IGNBRK | IGNPAR;
4
  comm_params.c_oflag = 0;
5
  comm_params.c_cflag = CREAD | CLOCAL | bits | parity | stopbits | baud;
6
  comm_params.c_lflag = 0;
7
  comm_params.c_line = 0;
8
  comm_params.c_cc[VMIN] = 1;
9
  comm_params.c_cc[VTIME] = 0;
10
  if (ioctl (fd, TCSETS, &comm_params)) {
11
    /* error */
12
    close (fd);
13
  }
OP #4296341
Lesenswert?
• ▲
▼
eagle user schrieb:
> Patrick S. schrieb:
>
>> Wenn ich statt fopen, open verwende mit dem Flag "O_RDWR",
>> könnte das helfen?
>
> Ja, es wird einfacher; fopen() gemischt mit read() ist unnötig
> unübersichtlich.

Das habe ich auch beseitigt, hatte am Anfang fopen verwendet. Bin dann 
aber auf open/read/write gewechselt.

eagle user schrieb:
> Patrick S. schrieb:
>
> Meine Programme initialisieren den Port so:
>
>
1
struct termios  comm_params;
2
> 
3
>   comm_params.c_iflag = IGNBRK | IGNPAR;
4
>   comm_params.c_oflag = 0;
5
>   comm_params.c_cflag = CREAD | CLOCAL | bits | parity | stopbits | 
6
> baud;
7
>   comm_params.c_lflag = 0;
8
>   comm_params.c_line = 0;
9
>   comm_params.c_cc[VMIN] = 1;
10
>   comm_params.c_cc[VTIME] = 0;
11
>   if (ioctl (fd, TCSETS, &comm_params)) {
12
>     /* error */
13
>     close (fd);
14
>   }
15
>
1
int file = open("dev/ttyS0", O_RDWR);
2
if(file == -1)
3
{
4
//Fehler
5
}
6
else
7
{
8
fcntl(file, F_SETFL, FNDELAY);
9

10
//Config 8N1 
11
tcgetattr(file, & options);
12
cfsetispeed(&options, B38400);
13
cfsetospeed(&Options, B38400);
14
options.c_cflag |= (CLOCAL | CREAD);
15
options.c_cflag &= ~PARENB;
16
options.c_cflag &= ~CSTOPB;
17
options.c_cflag &= ~CSIZE;
18
options.c_cflag |= CS8;
19
options.c_cflag &= ~ECHO;
20

21
tcsetattr(file, TCSANOW, &Options);
22

23
}

Gibt es eine Deutsche Dokumentation zu der Konfiguration? Bisher bin ich 
nur auf englische gestoßen?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.