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

Gast #5001852
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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;
}
#5003993
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren