Kennt jemand ein Programm, mit dem man per USB-VCP (FT232) IIC-ICs
programmieren kann? Hintergrund:
Ich habe ein IC in einem Testaufbau, das per IIC konfiguriert werden
muss. Es genügt, wenn ein einziges Byte an eine einzige Stelle
geschrieben wird, nicht einmal das ACK muss geprüft werden. Nur die
Schreibadresse und das Datenbyte senden, das reicht für's Erste. Gerne
auch mehr, aber wenn mit der UART-Schnittstelle das bidirektionale
SDA-Signal gelesen werden können soll, würde es natürlich etwas mehr
Hardware-Aufwand erfordern. Das wäre auch kein Problem, aber zunächst
brauche ich es nicht.
Ich bin kurz davor, so etwas selber zu schreiben, aber als
Amateur-Programmierer muss ich nicht auch noch das Rad neu erfinden, und
schon gar nicht so ein primitives.
DZDZ
Der Zahn der Zeit schrieb:> Kennt jemand ein Programm, mit dem man per USB-VCP (FT232) IIC-ICs> programmieren kann? Hintergrund:>> Ich habe ein IC in einem Testaufbau, das per IIC konfiguriert werden> muss. Es genügt, wenn ein einziges Byte an eine einzige Stelle> geschrieben wird, nicht einmal das ACK muss geprüft werden. Nur die
Was nun ?
USB oder IIC ?
Die beiden haben nix gemeinsames, wie stellst du dir das vor ?
> Ich bin kurz davor, so etwas selber zu schreiben, aber als> Amateur-Programmierer muss ich nicht auch noch das Rad neu erfinden, und> schon gar nicht so ein primitives.
Tja, dann versuche erst einmal dein Problem genauer zu beschreiben und
vor allem nicht so abschätzend darüber zu schreiben - wenn es so
primitiv ist, warum schreibst du es nicht selber in ein paar Minuten ?
Der FT232 kann kein I2C. Anders sieht es beim FT2232 aus, dessen MPSSE
kann dazu gebracht werden -- dann aber nicht über eine serielle
Schnittstellenemulation, sondern durch die zur Ansteuerung der MPSSE
angebotenen "ft2xx"-DLL.
https://www.ftdichip.com/Support/SoftwareExamples/MPSSE/LibMPSSE-I2C.htm
I2C lässt sich auch gar nicht auf das Protokoll einer seriellen
Schnittstelle umsetzen, da eine serielle Schnittstelle keine
Adressierung von Geräten und auch kein Ack/Nack-Handshake etc. kennt,
insofern ist der MPSSE/DLL-Ansatz nicht so abwegig.
Auf den ersten Blick könnte man meinen, daß der FT201X das Problem löst,
aber das ist nicht der Fall, der verbindet zwar I2C und USB, ist aber
auf der I2C-Seite ein Slave, d.h. muss von einem I2C-Master angesprochen
werden.
Möchte man einen µC o.ä., der keine (freie) serielle Schnittstelle, aber
eine I2C-Schnittstelle hat, über USB mit einem PC verbinden, ist der
FT201X eine praktische Lösung, aber um mit einem anderen I2C-Baustein zu
reden, wie es der Threadstarter wünscht, ist das Ding komplett
ungeeignet.
Es bleibt also bei der MPSSE des FT2232.
Kennst du keine USB-VCPs? Oder FT232? Oder IIC? Was fehlt dir?
Also: Ein USB-VCP ist ein USB Virtual COM Port. Der wird häufig mit
einem IC der Fa. FTDI realisiert, hier ein FT232, das stellt auf der
anderen Seite ein UART-Anschluss zur Verfügung. (UART und COM-Port
unterscheiden sich dadurch, dass ein Treiber von TTL-Schnittstelle und
höherer, bipolarer Spannung dazwischen ist.)
Wenn ich also von einem FT232 rede, habe ich einen UART mit
TTL-Schnittstelle. Davon sollen zwei Leitungen den IIC-Bus, zumindest
zum Schreiben, emulieren, damit das PC-Programm über einen an USB
angeschlossenen COM-Port (so steht es jedenfalls im Geräte-Manager, bei
mir ist es nur eine UART-Schnittstelle) an die IIC-Schnittstelle des ICs
kommt.
So, nach diesem kleinen Grundlagenkurs - wo war jetzt dein
Unverständnis?
Und ich schreibe es nicht in ein paar Minuten, weil, ich in einer
anderen Welt als du lebe, wo das nicht ein paar Minuten dauert. Solche
Leute gibt es auch. Genauso wie die, die weniger von USB, VCP, UART und
IIC verstehen.
Der Zahn der Zeit schrieb:> Wenn ich also von einem FT232 rede, habe ich einen UART mit> TTL-Schnittstelle. Davon sollen zwei Leitungen den IIC-Bus, zumindest> zum Schreiben, emulieren, damit das PC-Programm über einen an USB> angeschlossenen COM-Port (so steht es jedenfalls im Geräte-Manager, bei> mir ist es nur eine UART-Schnittstelle) an die IIC-Schnittstelle des ICs> kommt.
Das funktioniert nicht. Warum, habe ich Dir gerade schon geschrieben.
Du kannst einen I2C-Bus nicht wie eine serielle Schnittstelle ansteuern.
Rufus Τ. F. schrieb:> Du kannst einen I2C-Bus nicht wie eine serielle Schnittstelle ansteuern.
Doch ... wenn ich ein bisschen nachdenke ... mit Bitbanging
der RS232-Steuerleitungen müsste es funktionieren.
Rufus Τ. F. schrieb:> Der FT232 kann kein I2C. Anders sieht es beim FT2232 aus, dessen MPSSE> kann dazu gebracht werden ...
Vor weit über 10 Jahren hätte ich auch gerne mit dem FT2232 ein I2C Bus
angesteuert. Ich meine, ich hätte gerade einen PCF8574 ansteuern können
und das war es. Der Support verstand mich wohl nicht so recht.
Also nahm ich ein FT232RL und ein MSP430F2013 und ein P82B96, das war im
April 2015. Das läuft heute noch.
Inzwischen gibt es einfachere Lösungen.
mfg klaus
Progra Mierer schrieb:> Doch ... wenn ich ein bisschen nachdenke ... mit Bitbanging> der RS232-Steuerleitungen müsste es funktionieren.
Mit Bitbanging. Na gut.
Das ist dann halt sehr, sehr langsam, und ein ziemlicher Aufriss.
Progra Mierer schrieb:> Doch ... wenn ich ein bisschen nachdenke ... mit Bitbanging> der RS232-Steuerleitungen müsste es funktionieren.
Ich hatte anfangs noch einfacher mit I2C angefangen. Da wurden gewisse
Signalpins der seriellen Schnittstelle direkt aus Windows angesprochen
und abgefragt. Das lief auch mit dem PCF8574 manchmal recht gut. Aber
der I2C Bus benötigt auch ein gewisses Timing. Das bietet Dir nur ein
MSP430F2013 und seine weitläufigen Kollegen. Ohne Interups und
entsprechende interupfähige Ports läuft da nicht viel.
mfg KLaus
Rufus Τ. F. schrieb:> Das funktioniert nicht. Warum, habe ich Dir gerade schon geschrieben.
Meine Antwort galt nicht dir. Und Progra Mierer hat recht: Man kann zwei
Ausgabe-Steuerleitungen des UARTs, z. B. RTS und DTR, direkt
kontrollieren und so die IIC-Leitungen einzeln ansteuern. Da wird kein
UART-Protokoll genutzt, sondern nur die Steuerleitungen geschaltet. Dass
das geht, weiß ich, denn das habe ich anderswo schon erlebt. Langsam
natürlich, aber das ist mir hier vollkommen egal, denn ich brauche nur
hin und wieder mal ein einziges Byte zu verändern.
Es ist auch bei mir ein FT232RL.
Der Zahn der Zeit schrieb:> Und Progra Mierer hat recht: Man kann zwei> Ausgabe-Steuerleitungen des UARTs, z. B. RTS und DTR, direkt> kontrollieren und so die IIC-Leitungen einzeln ansteuern.
Naja, drei Leitungen genau genommen, um nicht ganz blind dazustehen.
Eine Clock-Leitung, eine Daten-Output-Leitung und eine Daten-
Input-Leitung. Beide Daten-Leitungen mit einer Schottky-Diode
Wired-Or verknüpft. Sonst kann man nichts lesen und auch kein
ACK bekommen. Open Drain bekommt man ja bei RS232 nicht ....
Der Zahn der Zeit schrieb:> Kennt jemand ein Programm, mit dem man per USB-VCP (FT232) IIC-ICs> programmieren kann?
Früher habe ich das unter Borland-C mit dem Druckerport gesteuert.
Wenn man noch einen Druckerport hat funktioniert das auch heute
noch, zumindest unter 32-Bit Windows.
Der Zahn der Zeit schrieb:> Man kann zwei> Ausgabe-Steuerleitungen des UARTs, z. B. RTS und DTR, direkt> kontrollieren und so die IIC-Leitungen einzeln ansteuern. Da wird kein> UART-Protokoll genutzt, sondern nur die Steuerleitungen geschaltet. Dass> das geht, weiß ich, denn das habe ich anderswo schon erlebt. Langsam> natürlich, aber das ist mir hier vollkommen egal, denn ich brauche nur> hin und wieder mal ein einziges Byte zu verändern.Klaus R. schrieb:> Ich hatte anfangs noch einfacher mit I2C angefangen. Da wurden gewisse> Signalpins der seriellen Schnittstelle direkt aus Windows angesprochen> und abgefragt. Das lief auch mit dem PCF8574 manchmal recht gut. Aber> der I2C Bus benötigt auch ein gewisses Timing.
Wie gesagt, damals gab es viele dieser Lösungen. Nur sind sie leider
nicht zuverlässig. Aber mach ruhig. Jeder soll auch seine eigenen
Erfahrungen sammeln dürfen.
Inzwischen ist FTDI auch etwas weiter. Hier mein erster Treffer.
https://www.ftdichip.com/Support/Documents/AppNotes/AN_255_USB%20to%20I2C%20Example%20using%20the%20FT232H%20and%20FT201X%20devices.pdf
mfg klaus
Progra Mierer schrieb:> Naja, drei Leitungen genau genommen, um nicht ganz blind dazustehen.
Der Zahn der Zeit (also ich)
> Es genügt, wenn ein einziges Byte an eine einzige Stelle> geschrieben wird, nicht einmal das ACK muss geprüft werden. Nur die> Schreibadresse und das Datenbyte senden, das reicht für's Erste.
Leute, es ist ein Versuch. Es ist kein Produkt, was auf dieser Basis
entsteht. Das darf auch unzuverlässig und langsam sein. Ob's klappt,
sehe ich sofort, ohne Zurücklesen. Die Hardware ist da, sogar schon
anschlussfertig, die letzte Zutat ist nur ein simples Programm. Wenn's
das nicht gibt, dann wird's halt aufwändiger.
Der Zahn der Zeit schrieb:> die letzte Zutat ist nur ein simples Programm. Wenn's> das nicht gibt, dann wird's halt aufwändiger.
Ja, Du hast Glück. Ich habe mal in meinen ganz, ganz alten Ecken gesucht
und tatsächlich noch etwas gefunden, daß auf eine serielle Schnittelle
arbeitet. Solche Zugriffe sind unter Windows nur noch unter 32-Bit
möglich und vielleicht noch unter Windows 7.
Es ist damals unter Visual Basic 2005 geschrieben worden.
mfg klaus
Klaus R. schrieb:> Solche Zugriffe sind unter Windows nur noch unter 32-Bit möglich und> vielleicht noch unter Windows 7.
Nö, das nutzt die normale Win32-API (bzw. das, was VB.net als SerialPort
anbietet), um mit der seriellen Schnittstelle zu "reden", das
funktioniert auch unter x64 und Windows 10 - und auch mit
USB-Seriell-Bridges.
Anders sähe es aus, wenn mit direkten I/O-Befehlen auf den
Hardware-I/O-Registern der UART herumgefrickelt würde, wie man es unter
DOS-Zeiten gemeinhin gemacht hat.
Rufus Τ. F. schrieb:> Klaus R. schrieb:>> Solche Zugriffe sind unter Windows nur noch unter 32-Bit möglich und>> vielleicht noch unter Windows 7.>> Nö,
Gut zu wissen. Dann hat Der Zahn der Zeit noch gewisse Chancen. Es
DS1631 wird damit aber nicht laufen.
mfg Klaus
Der Zahn der Zeit schrieb:> Wenn ich also von einem FT232 rede, habe ich einen UART mit> TTL-Schnittstelle. Davon sollen zwei Leitungen den IIC-Bus, zumindest> zum Schreiben, emulieren, damit das PC-Programm über einen an USB> angeschlossenen COM-Port (so steht es jedenfalls im Geräte-Manager, bei> mir ist es nur eine UART-Schnittstelle) an die IIC-Schnittstelle des ICs> kommt.
USB ist nur D+ und D- was bedeutet, dass man damit am FT232 keine Pins
direkt schalten kann.
Dazu muss man zuerst EEPROM reprogrammieren.
Dann kommt noch FT*.DLL dazu und ein Programm, welches das alles von
Windows aus steuert.
> So, nach diesem kleinen Grundlagenkurs - wo war jetzt dein> Unverständnis?
Wie man so blöd sein kann, um anzugeben und irgend etwas über
Grundlagenkurse schreibt, aber Null Ahnung davon hat.
> sehe ich sofort, ohne Zurücklesen. Die Hardware ist da, sogar schon> anschlussfertig, die letzte Zutat ist nur ein simples Programm.
Aber dieses simples Programm übersteigt deine Fähigkeiten bei
weitem ?
Marc V. schrieb:> USB ist nur D+ und D- was bedeutet, dass man damit am FT232 keine Pins> direkt schalten kann.
Du hast die Aufgabenstellung nicht so ganz verstanden.
> Dazu muss man zuerst EEPROM reprogrammieren.
Nein, muss man nicht.
Über den Rest Deines Kommentares decken wir mal besser den Mantel des
Schweigens.
Ach, armer Marc. Lese und staune: Nicht nur ich behaupte, dass das geht.
Andere, die hier (sinnvoll) geantwortet haben und denen ich dankbar bin,
haben das schon längst gemacht. Ohne das Theater, das du für
erforderlich hältst. Dir fehlt wohl doch noch etwas Wissen...
Der Zahn der Zeit schrieb:> haben das schon längst gemacht. Ohne das Theater, das du für> erforderlich hältst. Dir fehlt wohl doch noch etwas Wissen...
Hast du simples Programm schon geschrieben ?
> bei ELV gibt es ein einfaches USB-I2C Interface,
will ich mir merken, aber es kommt extrem selten vor, das ich so was
brauche.
Marc V. schrieb:> Hast du simples Programm schon geschrieben ?
Hatte ich nicht geschrieben, dass ich das vermeiden wollte? Könnte ich
wetten...
Manchmal gibt's hier einen Shitstorm, wenn man etwas selber machen will,
was es schon gibt, manchmal, wenn man etwas nicht selber machen will,
was es schon gibt. Das kommt von den notorischen Nörglern, die keine
konstruktiven Antworten für das Forum haben.
Marc V. schrieb:> Sure.
Nein. Die Hardwarehandshakeleitungen der seriellen Schnittstelle, die
das zwischenzeitlich gepostete VB.net-Programm ansteuert, lassen sich
selbstverständlich auch beim über VCP angesteuerten FT232 nutzen, ohne
daß an dessen EEPROM irgendwas gemacht werden muss.
Daß das Programm bei USB-Seriell-Adaptern deutlich langsamer sein dürfte
als bei "echten" seriellen Schnittstellen, ist dem USB-Protokoll
geschuldet, das bei Full-Speed-Devices halt maximal eine Transaktion pro
Millisekunde zulässt, was beim Erzeugen eines Rechtecksignals eine
maximal erzeugbare Frequenz von 500 Hz zur Folge hat.
Rufus Τ. F. schrieb:> Marc V. schrieb:>> Sure.>> Nein. Die Hardwarehandshakeleitungen der seriellen Schnittstelle, die> das zwischenzeitlich gepostete VB.net-Programm ansteuert, lassen sich> selbstverständlich auch beim über VCP angesteuerten FT232 nutzen, ohne> daß an dessen EEPROM irgendwas gemacht werden muss.
Das zwischenzeitlich gepostete VB.net-Programm funktioniert natürlich
ohne zusätzliche Hardware nicht.
SDA ist bidirektional, FT232 kann so etwas nur am CBUS und dazu muss
EEPROM reprogrammiert werden.
Aber ich habe (wie fast immer) folgendes übersehen:
Der Zahn der Zeit schrieb:> muss. Es genügt, wenn ein einziges Byte an eine einzige Stelle> geschrieben wird, nicht einmal das ACK muss geprüft werden.
Ohne Empfang wird das Ganze natürlich funktionieren, wenn auch
Kurzschlüsse nicht ausgeschlossen sind.
Jetzt braucht der TO nur jemanden zu finden, der ein simples Programm
für ihn schreibt...
Marc V. schrieb:> SDA ist bidirektional, FT232 kann so etwas nur am CBUS und dazu muss> EEPROM reprogrammiert werden.
Lies mal das hier:
Progra Mierer schrieb:> Eine Clock-Leitung, eine Daten-Output-Leitung und eine Daten-> Input-Leitung. Beide Daten-Leitungen mit einer Schottky-Diode> Wired-Or verknüpft. Sonst kann man nichts lesen und auch kein> ACK bekommen.
Ja, zusätzliche Hardware in Form der Diode. Aber kein CBUS, und also
auch kein Umprogrammieren des EEPROM nötig.
Rufus Τ. F. schrieb:> Ja, zusätzliche Hardware in Form der Diode. Aber kein CBUS, und also> auch kein Umprogrammieren des EEPROM nötig.
Ja, danke sehr für die Bestätigung.
Marc V. schrieb:> Jetzt braucht der TO nur jemanden zu finden, der ein simples Programm> für ihn schreibt...
Nee, nee, es soll(te) niemand für mich schreiben. Ich wollte nur wissen,
ob jemand so etwas hat oder weiß, wo es das gibt(!). Danach käme
selber schreiben, siehe meine Ausgangsfrage. Und tatsächlich habe ich
so eine fertige Lösung bekommen. Sie arbeitet mit den
UART-Handshake-Signalen DTR und RtS und spielt einwandfrei mit meinem
USB/UART-Interface (also nicht USB/RS232) zusammen. Es klappt.
Jetzt steckt mehr Zeit in den Beiträgen des Threads als für das
Schreiben so eines Programms erforderlich gewesen wäre...
Mein lieber Mann,
ich amüsiere mich auch gerade damit, mittels PC auf verschiedene I2C
Bausteine zuzugreifen, das Internet ist voll von Lösungen.. die oft
unvollständig sind.. oder verkehrt.... es scheint ein heikles Thema zu
sein, via USB oder sonstige, gängige Scnittstelle dann "irgendwie" auf
8574 oder 23017 zuzugreifen.... wenn ich mir die Posts oben so
ansehe.... hat da jetzt eigentlich einer mal was konstruktives
geschrieben? Wie man es machen kann? Oder habe ich das nur nicht
gesehen? Die meisten Antworten waren offensichtlich getrieben davon, den
Frager alt aussehen zu lassen. Warum macht man das? Es gibt ja das
Vorurteil, dass "Bastler", "Nerds", usw. oftmals Probleme mit ihrem
Sozialverhalten haben..... Lest mal den Verlauf des Chats durch und
fragt euch dann mal, ob das wohl zutreffen könnte....
Ich habe auf jeden Fall erst gar keine Lust, hier irgendwas zu fragen
;-)
MartinH schrieb:> Mein lieber Mann,>> ich amüsiere mich auch gerade damit, mittels PC auf verschiedene I2C> Bausteine zuzugreifen,
Schön das Du Dich gut unterhältst.
> das Internet ist voll von Lösungen.. die oft> unvollständig sind.. oder verkehrt.... es scheint ein heikles Thema zu> sein, via USB oder sonstige, gängige Scnittstelle dann "irgendwie" auf> 8574 oder 23017 zuzugreifen.... wenn ich mir die Posts oben so> ansehe.... hat da jetzt eigentlich einer mal was konstruktives> geschrieben?
Ja.
> Wie man es machen kann?
Der Weg den der TO gehen wollte ist leider eine Sackgasse. Ich glaube,
ich war 2005 schon so weit. Auf diese Weise läßt sich bestenfalls ein
gutmütiger PCF8574 ansteuern. Der braucht nicht unbedingt ein exaktes
Timing.
>> Klaus R. schrieb:>> Aber>> der I2C Bus benötigt auch ein gewisses Timing. Das bietet Dir nur ein>> MSP430F2013 und seine weitläufigen Kollegen. Ohne Interups und>> entsprechende interupfähige Ports läuft da nicht viel.>> Klaus R. schrieb:>> Also nahm ich ein FT232RL und ein MSP430F2013 und ein P82B96, das war im>> April 2015. Das läuft heute noch.
Da hatte ich mich wohl vertan. Es war nicht 2015 sondern eher 2005.
> Oder habe ich das nur nicht> gesehen?
Vermutlich hast Du etwas überlesen.
> Die meisten Antworten waren offensichtlich getrieben davon, den> Frager alt aussehen zu lassen.
Kann ich in meinem Fall nicht sagen. Ich hatte nur von meinen
langjährigen Erfahrungen gesprochen.
> Warum macht man das? Es gibt ja das> Vorurteil, dass "Bastler", "Nerds", usw. oftmals Probleme mit ihrem> Sozialverhalten haben..... Lest mal den Verlauf des Chats durch und> fragt euch dann mal, ob das wohl zutreffen könnte....
Hast Du heute wieder schlechte Laune? Aber irgendein Anlass gibt es ja.
Wie kann Dir das Forum denn helfen?
Übrigens ....
Klaus R. schrieb:> Inzwischen ist FTDI auch etwas weiter. Hier mein erster Treffer.>> https://www.ftdichip.com/Support/Documents/AppNotes/AN_255_USB%20to%20I2C%20Example%20using%20the%20FT232H%20and%20FT201X%20devices.pdf
Das wäre die FTDI - Lösung, die ich vermutlich heute bevorzugen würden.
mfg Klaus