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


von 0x4E (Gast)


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?

von R. M. (Gast)


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

von 0x4E (Gast)


Lesenswert?

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 #

von Noch einer (Gast)


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 .

von 0x4E (Gast)


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.

von Noch einer (Gast)


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.

von 0x4E (Gast)


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;
}

von MaWin (Gast)


Lesenswert?

Fuse falsch eingestellt und der Controller läuft mit internen 8 MHz?

von uiop (Gast)


Lesenswert?

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?

von R. M. (Gast)


Lesenswert?

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

von Rolf M. (rmagnus)


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.

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.