Hallo, ich will mehrere Module mit einem cp2104 an einen Raspi betreiben. Im Test funktioniert alles mit 2 Modulen ohne Fehler. Jetzt wurde aber 4 Module an einem zusätzlichen HUB angeschlossen. Sie werden auch fehlerfrei erkannt. Aber nach ein paar Minuten gibt es Fehler beim Öffnen von ttyUSBx can not open /dev/ttyUSB1: Input/output error im Kernellog steht folgendes: cp210x ttyUSB1: cp210x_open - Unable to enable UART Das ganze wurde schon mit 2 verschiedenen USB-HUBs (aktiv und Passiv) getestet und brache keine Verbessrung. Das Modul was direkt am Raspi steck läuft fehlerfrei weiter. Es wurde auch verschiedene Treiber getestet (das vom Kernel und das von Silabs). Dabei kommt es zum gleichen Verhalten. Ein reboot behebt das Problem für ein paar Minuten. Hat jemand eine Idee was das sein könnte? gibt es eine Möglichkeit USB-Geräte von Linux aus einzeln zu resetten? (Modul neu laden reicht nicht aus) Intern kommt es zu fehler -71 bei usb_control_msg. Die 71 steht für #define EPROTO 71 /* Protocol error */ aktuell wird der Port immer geöffnet und geschlossen ( aller 30sek).
USB Spannung hinter dem Hub messen, vielleicht mit Oszi. Viele aktive Hubs speisen "rückwärs", was beim RPi (und auch bei PC/MAC) Probleme bereiten kann. Dann hilft eine Diode am USB Hub Upstream Port. Peter II schrieb: > gibt es eine Möglichkeit USB-Geräte von Linux aus einzeln zu resetten? Bei LibUSB gibt es eine usb_reset() Funktion, allerdings gibts das AFAIK nicht fertig außerhalb von C. Falls es PyUSB auf dem RPi gibt, dann müsste es vom Python Skript aus gehen. Bei TTYUSB Geräten hat das aber häßliche Nebenwirkungen.
Danke für die Rückmeldung. Ich konnte mittlerweile das Problem sogar mit gekauften Modulen die auch einen CP2104 haben nachstellen. (an eine Rapi1 und Rapi2) Sobald 2 davon an den HUB(passiv) hängen geht nach ein paar Minuten nichts mehr. Damit kann ich erst mal ausschließen das es an meinen Modulen liegt. Da an den Modul nur eine LED dran ist, die Strom verbraucht, ist es auch kein Überlast Problem. Es hilft auch nicht das Modul neu aus und wieder einzustecken es muss zwingend der HUB gesettet werden sonst geht nichts mehr. Ein Modul was direkt am Raspi hängt lässt sich nicht aus der Ruhe bringen. Es scheint sich also der HUB aufzuhängen. Ich muss mal sehen ob ich HUBs von verschieden Herstellern finde, eventuell geht es ja mit einem. Mal sehen ob ich ein kleines Testprogramm schreiben kann, damit andere das Problem eventuell nachstellen können.
langsam gehen mir die Ideen aus, wo der Fehler sein könnte. Der Fehler kommt bei 4 verschiedenen HUBs. Am einem "normalen" PC mit den gleichen HUB gibt es keine Fehler. Ich kann den Fehler also nur an einem Raspi(1 oder 2) mit eine HUB nachstellen. Ohne HUB geht es fehlerfrei. Werde jetzt mal testen ob ich BSD auf dem Rapi zum laufen bekomme. sonst noch jemand Ideen? Anbei noch das Testprogramm wenn jemand Lust hat, bei der Analyse zu helfen. Man braucht ein Raspi + USB-Hub + 2 CP2104 USB-Serial converter. gcc UsbTest.c -lpthread ./a.out /dev/ttyUSB0 /dev/ttyUSB1
Peter II schrieb: > Sobald 2 davon an den HUB(passiv) hängen geht nach ein paar Minuten > nichts mehr. Damit kann ich erst mal ausschließen das es an meinen > Modulen liegt. Da an den Modul nur eine LED dran ist, die Strom > verbraucht, ist es auch kein Überlast Problem. Ein RPi kann auf dem USB weniger Strom liefern als ein PC. Bei billigen Wandwarzen könnten auf den 5 Volt auch noch viele Störungen drauf sein -> Oszi. Wenn die CP210x mit denselben Hubs am PC ohne Probleme laufen, würde ich zuerst auf die Spannung tippen.
Jim M. schrieb: > Ein RPi kann auf dem USB weniger Strom liefern als ein PC. Bei billigen > Wandwarzen könnten auf den 5 Volt auch noch viele Störungen drauf sein > -> Oszi. > > Wenn die CP210x mit denselben Hubs am PC ohne Probleme laufen, würde ich > zuerst auf die Spannung tippen. aus dem Grunde wurde schon mit einen Aktiven-HUP getestet - keine Besserung. Die Hubs sind mit 10mA angegeben, ohne den HUB-Läuft es auch.
Nachtrag: Wenn man je HUB nur ein CP2104 verwendet geht es auch fehlerfrei. Funktioniert:
1 | RASPI -> HUB -> CP2104 |
2 | -> HUB -> HUB -> CP 2104 |
Fehler:
1 | RASPI -> HUB -> CP2104 |
2 | -> CP2104 |
Während die Anpassung der USB-Konfigurationsdaten optional ist, ist die Anpassung der VID/PID-Kombination empfohlen. Eine eindeutige VID/PID-Kombination verhindert, dass der Treiber mit anderen USB-Treibern in Konflikt steht. Die Hersteller-ID kann von www.usb.org bezogen werden oder Silicon Labs kann eine kostenlose PID für das OEM-Produkt bereitstellen, das mit dem Silicon Labs VID verwendet werden. Das Anpassen der Seriennummer wird auch empfohlen, wenn die OEM-Anwendung eine, bei der mehrere CP210x-basierte Geräte an denselben PC angeschlossen werden können.
Der Trick für den Workaround ist nicht das Device, sondern den HUB zu resetten: z.B. via cron: if (dmesg | tail -10 | grep -q "cp210x ttyUSB1: cp210x_open - Unable to enable UART") ; then usbreset 05e3:0608 ; fi dabei muss man beim usbreset natürlich das richtige Gerät angeben. Vorher mit usbreset ohne Argumente und ggf. lsusb ermitteln.
Nachtrag: Als 'Rootcause' konnte ich bei mir das Packet rpi.gpio-common identifizieren. Nach dessen Deinstallation sind die Fehler weg.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.