mikrocontroller.net

Forum: PC Hard- und Software ttyUSB* versagt bei Kommunikation an FT232RL


Autor: Andreas Schmidt (hebbatz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen zusammen,

ich hoffe hier kann mir einer mit folgendem Problem weiterhelfen:

Also ich habe einen ATmega168 der hinter einem FT232RL sitzt. Der 
Controller steuert ein Lasermodul. Dieses möchte ich an und ausschalten 
können. Dazu sende ich ein Paket mit 6 Bytes. Das ganze klappt auch 
wunderbar unter Windows mit HTerm. Ich arbeite aber unter Linux.

Ich habe nun mal meine Ports unter Linux mit einem Nullmodemkabel 
getestet und hatte keine Probleme. Sobald ich aber versuche mittels 
gtkterm oder ähnlichen Programmen Daten an die USB-Seriell Schnittstelle 
zu senden passiert nichts.
Gtkterm gibt "Control signals read: Bad Address" aus. Port stimmt aber 
auf jeden Fall.

Da es unter Windows klappt und meine Ports funktionieren, bin ich zu dem 
Schluss gekommen, dass es ein Problem mit dem FT232RL unter Linux gibt.

Hatte vielleicht schonmal jemand ein ähnliches Problem?

Danke und Grüße,

Andreas

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei mir funktioniert der FT232 unter Linux problemlos. Natürlich braucht 
man das passende Kernelmodul.
Gib mal "dmesg" auf der Konsole ein und überprüfe, ob der FT232 korrekt 
eingebunden wurde (bei den meisten Distributionen als /dev/ttyUSB0).

Viele Grüße
Markus

Autor: Andreas Schmidt (hebbatz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Markus,

also dmsg |grep FTDI gibt mir aus, "FTDI USB Serial Device converter is 
now attached to ttyUSB0".
Sieht alles ganz gut aus. Zusätzliche Kernelmodule musste ich nicht 
laden.

Ich verstehe das auch nicht so ganz. Es ist auch kein Rechte Problem, da 
ich natürlich in der Gruppe dialout eingetragen bin. Hast du vielleicht 
noch irgendwas anderes geladen oder angepasst bevor der FT232RL bei dir 
problemlos lief?

Viele Grüße,

Andreas

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Solange Du in Deinem Controller kein Terminal emulierst wird es Dir 
wenig bringen, das zu versuchen.

libftdi benutzen...

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich habe nun mal meine Ports unter Linux mit einem Nullmodemkabel
> getestet und hatte keine Probleme.

Den ttyUSB0 oder andere Ports (z.B. ttyS0?

Auszug aus /man errno/:

       EFAULT          Bad address (POSIX.1)

Read lieferte also einen EFAULT.

Auszug aus /man 2 read/:

       ssize_t read(int fd, void *buf, size_t count);
       ...
       EFAULT buf is outside your accessible address space.

Das sieht zunächst nach einem Bug in GTKTerm aus. Da Google zu
'gtkterm "bad address"' sonst so gut wie nichts liefert, liegt der
Fehler aber eher woanders.

Was passiert, bei

  cat /dev/ttyUSB0

?

Autor: Andreas Schmidt (hebbatz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo und Danke für euere Hilfe,

> Den ttyUSB0 oder andere Ports (z.B. ttyS0?

Also ich habe meinen Laptop über einen zweiten USB/Seriel Wandler 
mittels Nullmodemkabel an meinen Desktop angeschlossen (Laptop: ttyUSB1 
und Desktop ttyS0). Mittels cat kann ich dadurch zwischen den beiden 
kommunizieren. Es klappt auch mittels minicom, cutecom oder picocom, 
aber halt nicht zum FTDI.

Bei cat /dev/ttyUSB0 (also die Verbindung zum FTDI) gibt es keinen 
Fehler. Er wartet halt auf Daten vom FTDI. Da kommt aber nix.

libftdi ist installiert. Der Controller schaut einfach nur, ob die 
ersten beiden Startbytes 0xFF sind, ob die darauf folgenden 3 Datenbytes 
passen, und ob die Checksum stimmt. Es klappt ja auch unter Windows. 
Somit sollte es doch auch unter Linux klappen, so lange das Protokoll 
stimmt. Wie ich nun ein Terminal im Controller emuliere ist mir im 
Moment nicht so ganz klar.

Grüße,

Andreas

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Schmidt wrote:

> libftdi ist installiert.

Tolle Sache. Wenn Du jetzt auch noch eine korrekte Applikation zum 
Zugriff auf den FTDI damit schreibst klappt die Sache.

Autor: Andreas Schmidt (hebbatz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Tolle Sache. Wenn Du jetzt auch noch eine korrekte Applikation zum
> Zugriff auf den FTDI damit schreibst klappt die Sache.

Hmmm...das klappt bestimmt, aber müsste ich auf die simulierte serielle 
Schnittstelle nicht auch einfach duch /dev/ttyUSB* zugreifen können?

Ist es nicht möglich einfach nur durch die libserial Biliothek (oder 
halt einfach durch einen write(...) in C++, wenn die 
Verbindungsparameter eingestellt sind ) die Ansteuerung hinzubekommen?

Und sollte es nicht auch mittel gtkterm oder ähnlichen Programmen 
klappen auf den FTDI zu zugreifen ohne die libftdi? Diese wird ja zum 
kompilieren der Programme nicht benötigt.

Grüße,

Andreas

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn 'cat /dev/ttyUSB0' keinen Fehler ausgibt, scheint Treiber- und
rechtemäßig alles in Ordnung zu sein. Die libftdi brauchst du nicht,
wenn du den FTDI nur als gewöhnlichen USB-Seriell-Konverter über das
ttyUSB0-Device benutzt. Vergiss sie für den Moment einfach. Natürlich
schadet die bloße Installation dieser Bibliothek nicht.

Bist du sicher, dass der Controller gar nichts empfängt, oder empfängt
er möglicherweise nur falsche Daten? Du kannst ja das
Controllerprogramm zu Testzewecken den Ausgang immer dann schalten
lassen, wenn es irgendein Byte empfängt.

Nur der Vollständigkeit halber: Ist die Baudrate auf beiden Seiten auf
den gleichen Wert eingestellt?

Sind Hardware- und Software-Handshake deaktiviert? Wenn nicht, wird
möglicherweise auf dem PC das Senden blockiert.

Du kannst auch einmal die andere Richtung testen: Lass den Controller
periodisch irgendwelche Zeichen ausgeben und schau nach, ob sie am PC
ankommen.

Oder du sorgst dafür, dass der Controller sein TXD inaktiv hält (TXD
nicht aktivieren und nicht auf Ausgangschalten), und verbindest RXD
und TXD-Pin des FTDI (als Loopback). Dann müssten, unabhängig von der
Baudrate, alle Daten, die du mit

  echo Hallo >/dev/ttyUSB0

sendest, mit

  cat /dev/ttyUSB0

sofort wieder empfangen können.

Wenn das GTKTerm Zicken macht, kannst du es auch mit Minicom
versuchen.

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Andreas,

es ist vermutlich das Paket "brltty" installiert, um den FTDI Chip
nutzen zu können musst Du das Paket "brltty" vollständig deinstallieren.

Wenn Du über die libftdi bzw. libusb auf den Chip zugreifst ist es egal
ob "brltty" installiert ist oder nicht.

Schau mal ob das Kernel Modul geladen wurde:
  lsmod | grep ftdi_sio

wenn nicht das Modul per Hand laden:
  modprobe ftdi_sio

dann sollte es schon gehen :-)

Grüße
Klaus

Autor: Andreas Schmidt (hebbatz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> es ist vermutlich das Paket "brltty" installiert, um den FTDI Chip
> nutzen zu können musst Du das Paket "brltty" vollständig deinstallieren.

> Wenn Du über die libftdi bzw. libusb auf den Chip zugreifst ist es egal
> ob "brltty" installiert ist oder nicht.

> Schau mal ob das Kernel Modul geladen wurde:
>  lsmod | grep ftdi_sio

> wenn nicht das Modul per Hand laden:
>  modprobe ftdi_sio

Leider ist keines davon das Problem. "brltty" ist von Anfang an 
deinstalliert gewesen und das Kernel Modul ist auch geladen. Trotzdem 
Danke.

Baudrate ist auch richtig eingestellt gewesen. Ich werde nun mal yalu's 
Vorschlag verfolgen.

Ich denke in der Tat, dass am Controller einfach nur Müll ankommt und 
deswegen das alles nicht funktioniert. Werde dem mal nachgehen. Warum 
GtkTerm nicht klappt weiß ich auch nicht.

Danke euch allen.

Grüße,

Andreas

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Haeng doch mal den Programmcode des Controllers an und einen Schaltplan, 
sonst kann man hier doch endlos herumraten.

Autor: Sven K. (svenk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne die Details zu kennen, tippe ich darauf,
das die Bytes die ankommen, falsch interpretiert werden.

Mögliches Zeilenende / Zeilenvorschub fehlt oder
wird im Atmel nicht richtig verarbeitet.

Gruß Sven

Autor: Andreas Schmidt (hebbatz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So ich habe nun endlich meinen Fehler gefunden. Ein ziemlich blöder 
zwar, aber von nun an werd ich das nicht mehr vergessen. Ich hate im c++ 
Code immer das CR / LF nicht mit übertragen. So konnte es ja nicht 
gehen.

Somit vielen, vielen Dank an svenk, der mich auf die richtige Fährte 
gebracht hat, aber auch an alle anderen vielen Dank.

Hier noch mein Codeschnipsel, falls jemand anderes mal vor dem selben 
Problem steht. 0xd 0x2f 0xa enspricht dem CR / LF.
std::string strLaserOn  = "on";
std::string strLaserOff = "off";


 if(strcmp(argv[1], strLaserOn.c_str()) == 0)
 {
   std::cerr << "LaserOn" << std::endl;
   const char buf[9] = {0xFF , 0xFF , 0xFF, 0x00, 0x00 , 0xFF, 0xd, 
                        0x2f, 0xa };

               for(int i = 0; i< sizeof(buf); i++)
               {
                       serial_port.write( &buf[i], 1 ) ;
               }
 }
 else if(strcmp(argv[1], strLaserOff.c_str()) == 0)
 {
   std::cerr << "LaserOff" << std::endl;
   const char buf[9] = {0xFF , 0xFF , 0x00, 0xFF, 0xFF , 0x00, 0xd,
                        0x2f, 0xa };

               for(int i = 0; i< sizeof(buf); i++)
               {
                       serial_port.write( &buf[i], 1 ) ;
               }
 }

Grüße,

Andreas

Autor: MoritzS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...nur fürs Archiv: Der Tipp von Klaus, "brltty" zu entfernen, hat bei 
mir zur Lösung geführt. Nach dem Einstecken von einem FT232RL Chip 
erschien kurz die /dev/ttyUSB0, verschwand dann aber sofort wieder. 
dmesg sagte:
"[27887.308000] usb 2-1: usbfs: interface 0 claimed by ftdi_sio while 
'brltty' sets config #1"
Nach dem Deinstallieren von "brltty" blieb die /dev/ttyUSB0 bestehen.

Gruß, MoritzS
(Ubuntu 7.10, 2.6.22-15)

Autor: baalschemtov (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo!

es ist mir klar, dass meine frage ttyUSB* zum Novatel Ovation nicht hier 
her gehört, trotzdem kann ich eine große portion hilfe gut vertragen. 
Ich arbeite mit ubuntu linux 9.04; vor kurzem habe ich mir ein hspu 
modem von novatel erstanden. dies jedoch will nicht funktionieren. wenn 
ich dmesg eingebe, bekomme ich folgende meldung:
[  283.636772] wlan0: associated
[  283.639174] ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
[  294.260062] wlan0: no IPv6 routers present
[ 1419.876123] usb 3-1: new full speed USB device using uhci_hcd and 
address 2
[ 1420.040374] usb 3-1: configuration #1 chosen from 1 choice
[ 1420.115173] Initializing USB Mass Storage driver...
[ 1420.116477] scsi4 : SCSI emulation for USB Mass Storage devices
[ 1420.116849] usbcore: registered new interface driver usb-storage
[ 1420.116939] USB Mass Storage support registered.
[ 1420.117316] usb-storage: device found at 2
[ 1420.117321] usb-storage: waiting for device to settle before scanning
[ 1420.159448] usbcore: registered new interface driver usbserial
[ 1420.159484] USB Serial support registered for generic
[ 1420.159601] usbcore: registered new interface driver 
usbserial_generic
[ 1420.159606] usbserial: USB Serial Driver core
[ 1420.202234] USB Serial support registered for GSM modem (1-port)
[ 1420.202442] usbcore: registered new interface driver option
[ 1420.202447] option: v0.7.2:USB Driver for GSM modems
[ 1425.117300] usb-storage: device scan complete
[ 1425.120423] scsi 4:0:0:0: CD-ROM            Novatel  Mass Storage 
1.00 PQ: 0 ANSI: 2
[ 1425.153191] sr0: scsi-1 drive
[ 1425.153199] Uniform CD-ROM driver Revision: 3.20
[ 1425.154658] sr 4:0:0:0: Attached scsi CD-ROM sr0
[ 1425.158205] sr 4:0:0:0: Attached scsi generic sg1 type 5
[ 1425.398195] sr0: CDROM (ioctl) error, command: Get configuration 46 
00 00 00 00 00 00 00 20 00
[ 1425.398225] sr: Sense Key : No Sense [current]
[ 1425.398234] sr: Add. Sense: No additional sense information
[ 1425.464203] sr0: CDROM (ioctl) error, command: Get configuration 46 
00 00 00 00 00 00 00 20 00
[ 1425.464229] sr: Sense Key : No Sense [current]
[ 1425.464237] sr: Add. Sense: No additional sense information
[ 1426.266196] sr 4:0:0:0: [sr0] Media Changed
[ 1426.266204] sr 4:0:0:0: [sr0] Result: hostbyte=DID_OK 
driverbyte=DRIVER_SENSE
[ 1426.266213] sr 4:0:0:0: [sr0] Sense Key : Unit Attention [current]
[ 1426.266224] sr 4:0:0:0: [sr0] Add. Sense: No additional sense 
information
[ 1426.266236] end_request: I/O error, dev sr0, sector 2096896
[ 1426.266245] __ratelimit: 3 callbacks suppressed
[ 1426.266251] Buffer I/O error on device sr0, logical block 2096896
[ 1426.266259] Buffer I/O error on device sr0, logical block 2096897
[ 1426.266265] Buffer I/O error on device sr0, logical block 2096898
[ 1426.266272] Buffer I/O error on device sr0, logical block 2096899
[ 1426.266278] Buffer I/O error on device sr0, logical block 2096900
[ 1426.266284] Buffer I/O error on device sr0, logical block 2096901
[ 1426.266291] Buffer I/O error on device sr0, logical block 2096902
[ 1426.266297] Buffer I/O error on device sr0, logical block 2096903
[ 1426.275207] sr0: CDROM (ioctl) error, command: Get configuration 46 
00 00 00 00 00 00 00 20 00
[ 1426.275216] sr: Sense Key : No Sense [current]
[ 1426.275219] sr: Add. Sense: No additional sense information
[ 1426.461158] sr0: CDROM (ioctl) error, command: Get configuration 46 
00 00 00 00 00 00 00 20 00
[ 1426.461168] sr: Sense Key : No Sense [current]
[ 1426.461172] sr: Add. Sense: No additional sense information
[ 1426.672197] sr0: CDROM (ioctl) error, command: Get configuration 46 
00 00 00 00 00 00 00 20 00
[ 1426.672226] sr: Sense Key : No Sense [current]
[ 1426.672235] sr: Add. Sense: No additional sense information
[ 1426.681234] sr0: CDROM (ioctl) error, command: Get configuration 46 
00 00 28 00 00 00 00 10 00
[ 1426.681258] sr: Sense Key : No Sense [current]
[ 1426.681266] sr: Add. Sense: No additional sense information
[ 1426.690214] sr0: CDROM (ioctl) error, command: Get configuration 46 
00 00 20 00 00 00 00 18 00
[ 1426.690241] sr: Sense Key : No Sense [current]
[ 1426.690251] sr: Add. Sense: No additional sense information
[ 1426.729211] sr0: CDROM (ioctl) error, command: Get configuration 46 
00 00 00 00 00 00 00 20 00
[ 1426.729240] sr: Sense Key : No Sense [current]
[ 1426.729249] sr: Add. Sense: No additional sense information
[ 1426.834195] sr0: CDROM (ioctl) error, command: Get configuration 46 
00 00 00 00 00 00 00 20 00
[ 1426.834220] sr: Sense Key : No Sense [current]
[ 1426.834229] sr: Add. Sense: No additional sense information
[ 1426.843235] sr0: CDROM (ioctl) error, command: Get configuration 46 
00 00 28 00 00 00 00 10 00
[ 1426.843259] sr: Sense Key : No Sense [current]
[ 1426.843267] sr: Add. Sense: No additional sense information
[ 1426.852223] sr0: CDROM (ioctl) error, command: Get configuration 46 
00 00 20 00 00 00 00 18 00
[ 1426.852247] sr: Sense Key : No Sense [current]
[ 1426.852255] sr: Add. Sense: No additional sense information
[ 1426.893189] sr0: CDROM (ioctl) error, command: Get configuration 46 
00 00 00 00 00 00 00 20 00
[ 1426.893217] sr: Sense Key : No Sense [current]
[ 1426.893226] sr: Add. Sense: No additional sense information
[ 1426.922201] UDF-fs: No VRS found
[ 1426.922207] UDF-fs: No partition found (1)
[ 1426.952223] sr0: CDROM (ioctl) error, command: Get configuration 46 
00 00 00 00 00 00 00 20 00
[ 1426.952248] sr: Sense Key : No Sense [current]
[ 1426.952256] sr: Add. Sense: No additional sense information
[ 1426.954223] ISO 9660 Extensions: Microsoft Joliet Level 1
[ 1426.959190] ISO 9660 Extensions: IEEE_P1282
[ 1427.040166] sr0: CDROM (ioctl) error, command: Get configuration 46 
00 00 00 00 00 00 00 20 00
[ 1427.040175] sr: Sense Key : No Sense [current]
[ 1427.040178] sr: Add. Sense: No additional sense information
[ 1427.275162] sr0: CDROM (ioctl) error, command: Get configuration 46 
00 00 00 00 00 00 00 20 00
[ 1427.275173] sr: Sense Key : No Sense [current]
[ 1427.275176] sr: Add. Sense: No additional sense information

danke für die hilfe

Autor: faustian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zum Modem: versuch mal "eject sr0".

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.