'Nabend!
Ich bin gerade dabei für meinen 2232D von FTDI (Dual USB UART/FIFO IC)
ein Steuerprogramm zu schreiben.
Zur Zeit ist es noch so, dass ich für jedes "instructionset"
(=Befehlssatz) das jeweilige Device (neu) verbinde und anschließend
wieder trenne.
Das ist zwar nicht so das große Problem, nur kostet es Zeit und birgt
eine Fehlerquelle.
Nun stelle ich mir seit einigen Tagen die Frage was wäre, wenn ich jedes
am PC angesteckt Device verbinde und nie wieder trenne, es sei denn, ich
trenne es manuell.
Jetzt stellt sich mir aber die Frage, ob der USB-Bus des PC's das
Device/die Devices selbst in einen Stromsparmodus versetzt oder je nach
angehängter Last der Bus voll powern muss.
Und wie ist das, wenn ich das USB-Modul vom PC trenne ohne die Devices
vorher zu trennen, nimmt das Modul dadurch ggf. Schaden?
Ich hoffe, ihr könnt mir auf meine Fragen Antworten liefern!
Gruss
CK1
> Zur Zeit ist es noch so, dass ich für jedes "instructionset"> (=Befehlssatz) das jeweilige Device (neu) verbinde und anschließend> wieder trenne.> Nun stelle ich mir seit einigen Tagen die Frage was wäre, wenn ich jedes> am PC angesteckt Device verbinde und nie wieder trenne, es sei denn, ich> trenne es manuell.
Was heisst bei dir verbinden? Physikalisch-Kabel-in-die-Buchse oder
Software-öffnet-virtuellen-COM-Port oder
Software-greift-über-D2xx.DLL-auf-die-Devices-zu?
> Jetzt stellt sich mir aber die Frage, ob der USB-Bus des PC's das> Device/die Devices selbst in einen Stromsparmodus versetzt oder je nach> angehängter Last der Bus voll powern muss.
Der Bus kann immer die 500mA (eigentlich min. 600mA) liefern. Das
angeschlossene Gerät muss im Bus-Powered-Betrieb dafür sorgen, dass es
erstens nicht mehr zieht als vom Host zugewiesen, und zweitens kann der
Host die Leitung nicht abschalten (ausser bei Überlast -> ist aber eher
eine Funktion der Hardware mit Nachricht ans OS).
Somit ist das Gerät für die Stromaufnahme verantwortlich. Ob der Host
das Gerät abschalten kann, wird unter Windows im Gerätemanager
eingestellt.
> Und wie ist das, wenn ich das USB-Modul vom PC trenne ohne die Devices> vorher zu trennen, nimmt das Modul dadurch ggf. Schaden?
Wenn du das Abmelden am OS meinst, das sorgt beispielsweise bei USB
Flashspeichern dafür, dass keine Daten mehr gelesen/geschrieben werden
und somit auch keine Daten kaputt gehen können (speziell beim
Schreiben).
Elektrisch gesehen dürfte auch keine Kommunikation mehr auf den
USB-Datenleitungen stattfinden, also kannst du abziehen (was aber auch
bei Kommunikation für gewöhnlich kein Problem darstellt).
Für die Spannungsversorgung dürfte ebenfalls nix passieren.
Ralf
>Was heisst bei dir verbinden? Physikalisch-Kabel-in-die-Buchse oder>Software-öffnet-virtuellen-COM-Port oder>Software-greift-über-D2xx.DLL-auf-die-Devices-zu?
Software-greift-über-D2xx.DLL-auf-die-Devices-zu
>Wenn du das Abmelden am OS meinst, das sorgt beispielsweise bei USB>Flashspeichern dafür, dass keine Daten mehr gelesen/geschrieben werden>und somit auch keine Daten kaputt gehen können (speziell beim>Schreiben).
Ich meine damit, dass ich das Kabel ziehe bevor die Verbindung meiner
Software mit dem Gerät über den Treiber trenne. Trennen über die
Funktion des Betriebsystems wie bei USB-Datenträgern geht hierbei nicht.
Mir ging es eigentlich darum ob der Chip Schaden nimmt wenn ich die
Verbindung des Programmes (über den Treiber) nicht trenne, die
Verbindung nicht schliesse.
Trotzdem erst einmal danke für deine Hilfe!
Gruss
>Ich meine damit, dass ich das Kabel ziehe bevor die Verbindung meiner>Software mit dem Gerät über den Treiber trenne.
Blöde Idee. Von einfacher Fehlermeldung über kompletten
Hänger kann da alles passieren.
>Mir ging es eigentlich darum ob der Chip Schaden nimmt wenn ich die>Verbindung des Programmes (über den Treiber) nicht trenne, die>Verbindung nicht schliesse.
Dem Chip passiert da nix.
> Ich meine damit, dass ich das Kabel ziehe bevor die Verbindung meiner> Software mit dem Gerät über den Treiber trenne. Trennen über die> Funktion des Betriebsystems wie bei USB-Datenträgern geht hierbei nicht.> Mir ging es eigentlich darum ob der Chip Schaden nimmt wenn ich die> Verbindung des Programmes (über den Treiber) nicht trenne, die> Verbindung nicht schliesse.
Ah, okay. Siehste, kaum gibt man mehr Infos schon kommen auch bessere
Antworten ;)
Also, bei wirklich gut geschriebenen Treibern (vom Hersteller) darf
eigentlich nix schiefgehen. Ausschließen kannst du das aber aufgrund der
Vielfalt an Kombinationen mit anderen Treibern etc. NIE (du weisst
schon, hunderttausend andere Rechner machens mit, aber deiner war der
einzige, bei dem das Abziehen das OS, die Festplatte, die Batterie und
den Fussball vom Nachbarsjungen geplättet hat). Ich hab auch schon von
Effekten gehört, dass das Abziehen eines USB-Gerätes unmittelbar keine
Auswirkungen hatte, wohl aber der nächste Systemstart in die Hose ging).
Konkret bezogen auf FTDI würd ich aber sagen, dass die Dinger so oft im
Einsatz sind, dass die Treiber ausgereift sind und die Chance einen GAU
damit zu haben, nahezu null ist.
Du kannst es schon mal in deiner Software über TimeOuts etc. abfangen,
ob das Device noch angeschlossen ist. Ansonsten würde deine Software
hängenbleiben. Wäre aber eher ein Bedienungskomfort als wirklich eine
Fehlervermeidung.
Ich selbst verwende ebenfalls den Zugriff über die DLL in mehreren
Projekten und habe bei keinem der Rechner negative Effekte festgestellt
(und ich habe eben jenen Fall ausgiebig getestet).
Ralf
>Blöde Idee. Von einfacher Fehlermeldung über kompletten>Hänger kann da alles passieren.
Also sollte ich besser wie jetzt auch jedes mal neu eine Verbindung
herstellen und wieder trennen.
Aber was genau kann den passieren? Einzig der Treiber kann schlapp
machen weil das Device nicht mehr vorhanden ist. Fehler werden in der
Software direkt abgefangen, wenn ein Device nicht mehr gefunden wird
werden alle Devices sofort abgefragt bzw. die Liste der gültigen Devices
wird zurückgesetzt, weitere Code kann erst wieder ausgeführt werden,
wenn neu nach Devices gesucht wird.
Gruss
>Du kannst es schon mal in deiner Software über TimeOuts etc. abfangen,>ob das Device noch angeschlossen ist
Geht ja prinzipiell in die Richtung von dem, was ich bereits
implementiert habe.
> Also sollte ich besser wie jetzt auch jedes mal neu eine Verbindung> herstellen und wieder trennen.
Wäre zumindest ein besser definierter Zustand als der bestimmt
undefinierte Zustand beim "harten" Abziehen. Wie gesagt, ganz verhindern
kannst es eh nicht. Frag dich andersrum ob's dir etwas ausmacht, es so
zu machen? Wenn die Antwort nein lautet, hast du a) ein "saubereres"
Programm und b) nichts dabei verloren :)
Ralf
>Wäre zumindest ein besser definierter Zustand als der bestimmt>undefinierte Zustand beim "harten" Abziehen. Wie gesagt, ganz verhindern>kannst es eh nicht. Frag dich andersrum ob's dir etwas ausmacht, es so>zu machen? Wenn die Antwort nein lautet, hast du a) ein "saubereres">Programm und b) nichts dabei verloren :)
Ein saubere Programm ist so eine Sache. Ich würde sagen, dass mein
Programm sauber ist weil ich alle Fehler die auftreten können abfange
bevor sie überhaupt auftreten können - nun ja, halt den Teil der in
meiner Macht liegt. Alle Exceptions die beim Übertragen der Befehle zum
Chip auftreten können werden vom Treiber selber abgefangen.
Gruss
> Ich würde sagen, dass mein Programm sauber...
Ich hab ja nicht gesagt, dass es nicht sauber ist, nur dass es dadurch
noch sauber*er* wird :)
> ...ist weil ich alle Fehler die auftreten können abfange bevor sie> überhaupt auftreten können - nun ja, halt den Teil der in *meiner*> Macht liegt
Wunderbar, dann hast du's kapiert. Denn du kannst nicht verhindern,
dass jemand den Stöpsel zieht. Selbst wenn du den Stecker an der
Buchse verklebst, verleimst, versonstwast, kann die Katze am Kabel
knabbern (oder an der Maus, die am Kabel knabbert), oder jemand übers
Kabel fliegen, oder... oder... oder... Höchstens du vergießt das Gerät
komplett mit dem PC :)
Ralf
>Ich hab ja nicht gesagt, dass es nicht sauber ist, nur dass es dadurch>noch sauber*er* wird :)
Ich mich ja auch nicht angegriffen gefühlt ;-)
Naja, ich werde trotzdem versuchen, den Code immer weiter zu verbessern.
Danke für euren Rat!
Gruss