Ich habe zwei Geräte, die kontinuierlich Daten über ttyUSB0 und ttyUSB1 einspeisen. Ich habe PHP-Skripte, die diese Daten verwenden. Das Problem, auf das ich stoße, ist, dass der Feed manchmal einfach einfriert. Das Problem lässt sich am besten beheben, indem Sie die BUB-Platine vom Computer trennen und wieder anschließen. Ich suche jedoch nach einer Möglichkeit, diese Aktion zu automatisieren. Gibt es eine Möglichkeit, Linux anzuweisen, das BUB-Board im Wesentlichen auszuwerfen und es dann irgendwie wieder aufzunehmen?
12
Antworten:
Ich habe das gleiche Problem wie Sie, aber in einem anderen Kontext (ich öffne eine serielle Konsole auf einer Linux-Box). Die serielle Verbindung reagiert manchmal nicht mehr und ich muss den USB-Seriell-Konverter physisch trennen.
Das Folgende scheint mein Problem zu lösen, aber nicht immer.
Suchen Sie den Treiber für Ihr ttyUSBx-Gerät.
Sie können sehen, dass
/dev/ttyUSB
verwendetusbserial
. Jetzt noch etwas weiter graben:In meinem Fall ist mein USB-Seriell-Wandler ein Prolific PL2303. Wenn Sie einen FTDI-Adapter haben, denke ich, sollten Sie
ftdi_sio
statt sehenpl2303
.Entladen Sie den Treiber
Laden Sie den Treiber neu
Starten Sie Ihre serielle Kommunikation neu
quelle
Mit der Antwort von sdive bekam ich immer wieder "FATAL: Module usbserial is in use".
Ich habe das Problem schließlich mit Hilfe der Antwort von LiLo hier gelöst: https://askubuntu.com/a/661/379851
Aber anstatt einen C-Code zu verwenden, habe ich ein Python-Äquivalent geschrieben, das auch den betreffenden Bus und das betreffende Gerät findet:
Speichern Sie dies einfach als reset_usb.py oder so und führen Sie es dann so aus:
Wobei driver_name die Ausgabe von ist
In meinem Fall war es cp210x, also führe ich es so aus:
quelle
Hier ist meine Antwort für das Modul
ftdi_sio
. Schritte werden von der obigen Antwort und dem Link von einem Kommentar in der ursprünglichen Frage angepasst.Ich konnte das Modul nicht entfernen:
Also benutze ich den folgenden Trick:
Was in der Tat bestätigt wurde durch:
Dann war es einfach, das Modul zu entfernen:
Und dann einfach:
Dies ist nicht klar, warum ftdi_sio in einen so schlechten Zustand gerät, vielleicht immer noch Fehler wie in:
Aber es scheint, dass Kernel 4.9.20 immer noch ein fehlerhaftes
ftdi_sio
Modul enthält .quelle