Fehler: stty: /dev/ttyUSB0: Unpassender IOCTL (I/O-Control) für das Gerät

Gast #5001852
Hallo,

ich möchte mit stty eine serielle Schnittstelle konfigurieren um Bytes 
mit einem Microcontroller auszutauschen.
( 8 Datenbits, 1 Stoppbit, Parity: keine, also 8N1)

Schon beim setzen der Baudrate erscheint eine Fehlermeldung, aus der ich 
nicht schlau werde.
Google hilft mir hier auch nicht viel weiter.

linux-u98m:/home/chris # stty -F /dev/ttyUSB0 9600
stty: /dev/ttyUSB0: Unpassender IOCTL (I/O-Control) für das Gerät
linux-u98m:/home/chris #

Kann jemand helfen?
Gast #5001861
Hast Du die erforderlichen Rechte für das Gerät?

crw-rw-rw- 1 root dialout 188, 0 Mai  7 13:37 /dev/ttyUSB0
crw-rw-rw- 1 root dialout 188, 1 Mai  7 13:37 /dev/ttyUSB1

bei mir funktioniert es ohne Fehlermeldung.

mfG
Gast #5001875
Bist du sicher, du hast den richtigen Stick erwischt?

Schauen, ob beim einstecken ein /dev/serial/by-id/xyz erscheint. Sollte 
ein Link auf /dev/ttyUSB0 sein.

Meist findet Google etwas, wenn du nach der Id suchst.
Mit lsusb bekommst du eine Id in der Art 1058:10b8 .
Gast #5001897
Jetzt funktionierts. Wenn ich mir jetzt allerdings die gesendeten Daten 
vom µC ansehen möchte, erscheint nix sinnvolles...

linux-u98m:/home/chris # stty -F /dev/ttyUSB0 9600
linux-u98m:/home/chris # stty -F /dev/ttyUSB0 raw
linux-u98m:/home/chris # cat < /dev/ttyUSB0
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^Z
[1]+  Angehalten              cat < /dev/ttyUSB0
linux-u98m:/home/chris # cat < /dev/ttyUSB0
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^Z
[2]+  Angehalten              cat < /dev/ttyUSB0
linux-u98m:/home/chris #


Der Contoller sendet 0.
Gast #5001921
Die Ziffer "0" oder alle Bits auf 0?

"@" ist binär 01000000. Rs232 sendet umgekehrt, also 0000001. Da liegt 
erst mal die Vermutung nahe, dein MC sendet doppelt so schnell und die 1 
ist das Startbit.

Wenn du kein Oszilloskop hast, musst du wohl verschiedene Bitmuster 
senden, aus denen sich erahnen lässt, was da nicht zusammen passt.
Gast #5002274
Der Controller ist auf 9600 Baud eingestellt.

#define F_CPU 16000000
#define MaxInput 2
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

volatile unsigned int i = 0;

int main(void)
{
        TIMSK0 |= (1<<TOIE0);
  TCCR0A = 0b00000000;
  TCCR0B = 0b00000101;


  UBRR0 = 103; //9600 Baud at 16MHz
  UCSR0C = 0b00000110;
  UCSR0B |= (1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0);

  //Pullup für RX
  PORTD |= ( 1<<0 );

  sei();

    while (1)
    {
    while (!(UCSR0A & (1<<UDRE0))) {}
    UDR0 = i;
    _delay_ms(200);
    }

  return 0;
}

ISR(USART_RX_vect)
{
  i = UDR0;
}

ISR(TIMER0_OVF_vect)
{
  Startcondition=1;
}
Gast #5002705
0x4E schrieb:
> Ja das Gerät hat root - Rechte
>
> linux-u98m:/home/chris # ls -l /dev/ttyUSB*
> -rw-rw-rw- 1 root root 0  7. Mai 13:05 /dev/ttyUSB0
> linux-u98m:/home/chris #

Das sieht aus, als ob das eine reguläre Datei ist und kein Gerät!

mfG
#5003993
Das sieht schon sehr nach falscher Baudrate aus.
Aber dein Code ist offenbar nicht echt, denn der dürfte so nicht durch 
den Compiler gehen, denn diese Variable:

>   Startcondition=1;

ist nirgends definiert.


0x4E schrieb:
> linux-u98m:/home/chris # stty -F /dev/ttyUSB0 9600
> linux-u98m:/home/chris # stty -F /dev/ttyUSB0 raw
> linux-u98m:/home/chris # cat < /dev/ttyUSB0
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^Z
> [1]+  Angehalten              cat < /dev/ttyUSB0
> linux-u98m:/home/chris # cat < /dev/ttyUSB0
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^Z
> [2]+  Angehalten              cat < /dev/ttyUSB0
> linux-u98m:/home/chris #

Du solltest dir angewöhnen, die Programme zu beenden und nicht nur zu 
suspendieren. Du hast hier am Ende zwei angehaltene cat-Prozesse, die 
darauf warten, dass du sie weiterlaufen lässt. Das könnte übrigens auch 
zu Fehlern führen, wenn du angehaltene Prozesse hast, die die 
Schnittstelle noch offen haben und du parallel dazu neue startest, die 
die gleiche Schnittstelle öffnen. Abbrechen tut man eine Programm mit 
Ctrl+C, nicht mit Ctrl+Z.
Und beim cat kannst du übrigens das < weglassen.

uiop schrieb:
> 0x4E schrieb:
>> Ja das Gerät hat root - Rechte
> Du meinst das Gerät benötigt Root-Rechte.
> Und diese Root-Rechte hat der User Chris auch?

Root-Rechte hat nur root. Deshalb heißen sie ja so. Wie man aber sieht, 
haben alle Lese- und Schreibberechtigung, nicht nur root.

R. M. schrieb:
> Das sieht aus, als ob das eine reguläre Datei ist und kein Gerät!

Allerdings, und zwar eine leere Datei. Dass da Daten rauskommen, kann 
also nicht sein.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.