Ich habe gelesen, das der MCP2221 von Windows als comX und unter Linux als /dev/ttyxxx erkannt wird. Wie spreche ich den Baustein von einem PC-Programm an ? Für den URx/UTx könnte ich mit vorstellen, das die wie eine normale Serielle Schnittstelle ist- Wie aber habe ich Zugriff auf den I²C-Teil ? Wie sieht es mit den 4 GPx-Ports aus ? Ich würde den Baustein gerne für Linux und Win nutzen.
:
Bearbeitet durch User
Hast Du Dir schon die Beispiele angesehen, die Microchip zur Verfügung stellt?
Die Treiber konnte ich gemäss der Anleitung bei "MCP2221 Linux Kernel I2C Bus Driver" kompilieren und installieren.
1 | make modules |
2 | make install |
3 | ./driver_load.sh |
liefen ohne Fehler durch. So wie es scheint, hat es auf meiner NVidia auch einen I²C-Bus.
1 | # i2cdetect -l |
2 | i2c-0 i2c NVIDIA i2c adapter 0 at 1:00.0 I2C adapter |
3 | i2c-1 i2c NVIDIA i2c adapter 1 at 1:00.0 I2C adapter |
4 | i2c-2 i2c NVIDIA i2c adapter 6 at 1:00.0 I2C adapter |
Der IC kann natürlich noch nicht erscheinen, da ich den erst kaufen und verlöten muss. ;) Ich habe mir noch "MCP2221 Java Native Interface (v1.0)" angeguckt, aber hier scheint es nur Beispiele für Windows zu haben, das dort lauter DLLs vorhanden sind. Gibt es auch ein minimal Beispiel für C/C++ mit Linux ?
Mathias B. schrieb: > gibt es auch ein minimal Beispiel für C/C++ mit Linux ? Prinzipiell sollte so was wie ein HID Terminal ausreichen um alles mal zu testen. Die Befehlsstruktur steht ja im Datasheet vom MCP2221. zB. 3.1.5 I2C™ WRITE DATA Das hackt man dann da rein und schaut einfach mal was raus kommt (Oszi?) So ein Terminal findest du z.B. hier -> http://www.hs-ulm.de/nocache/wir/Personal/PersonalSaSchr/vschilli/QtProjekte/ Das "sollte" auch unter Linux laufen...
Mathias B. schrieb: > Die Treiber konnte ich gemäss der Anleitung bei "MCP2221 Linux Kernel > I2C Bus Driver" kompilieren und installieren. > >
1 | make modules |
2 | > make install |
3 | > ./driver_load.sh |
> > liefen ohne Fehler durch. Gut. > Gibt es auch ein minimal Beispiel für C/C++ mit Linux ? Speziell für den MCP2221 nicht. Mit dem Treiber, den Du kompiliert hast, ist es ein Standard Linux I2C Device, das wie jedes andere I2C Device unter Linux angesteuert wird. Kennst Du eines, kennst Du alle. Damit Du nicht dumm sterben musst: http://elinux.org/Interfacing_with_I2C_Devices https://www.kernel.org/doc/Documentation/i2c/dev-interface fchk
Frank K. schrieb: > Mit dem Treiber, den Du kompiliert hast, > ist es ein Standard Linux I2C Device, das wie jedes andere I2C Device > unter Linux angesteuert wird. Cool, hab ich ja noch gar nie von gehört ;-) Mathias B. schrieb: > Ich würde den Baustein gerne für Linux und Win nutzen. Geht vermutlich völlig ohne spezielle Treiber und dlls mit hidapi (win UND linux)
>Damit Du nicht dumm sterben musst: >http://elinux.org/Interfacing_with_I2C_Devices >https://www.kernel.org/doc/Documentation/i2c/dev-interface Das sieht ja recht einfach aus, Device öffnen, anschliessend schreiben und lesen, etwa so wie es bei dem COM-Ports der Fall ist. Wie kann man aber die Parameter des I²C ändern, zB. der Takt von 100KB auf 400KB, oder die Adressen der einzelnen Geräte ? Kann man auf diese Methode auch auf einem Rasberry auf den I²C zugreifen ? Was mir aber immer noch ein Rätsel ist, was sind das für Devicen auf der NVidia-Karte ?
:
Bearbeitet durch User
Mathias B. schrieb: > Wie kann man aber die Parameter des I²C ändern, zB. der Takt von 100KB > auf 400KB 3.1 USB HID Commands/Responses 3.1.1 STATUS/SET PARAMETERS...
Mathias B. schrieb: > Was mir aber immer noch ein Rätsel ist, was sind das für Devicen auf der > NVidia-Karte ? Des Rätsels Lösung: jeder Videoport (VGA/DVI/HDMI/DisplayPort/...) enthält eine I2C-Schnittstelle; darüber liest der PC ein EEPROM im Monitor aus welches die unterstützten Auflösungen usw. beschreibt (EDID-Standard). Netterweise stellen (fast?) alle Grafiktreiber unter Linux dieses I2C-Interface auch als /dev/i2c-* zur Verfügung. So kann man freie Videoports auch als I2C-Master nutzen falls man gerade keinen MCP2221 zur Hand hat ;-)
Mathias B. schrieb: > Das sieht ja recht einfach aus, Device öffnen, anschliessend schreiben > und lesen, etwa so wie es bei dem COM-Ports der Fall ist. Ja. Fast alles ist Datei in Unix. > Wie kann man aber die Parameter des I²C ändern, zB. der Takt von 100KB > auf 400KB Dafür gibts keinen allgemeingültigen Weg. Ist meist fest im jeweiligen Bustreiber eincodiert. > , oder die Adressen der einzelnen Geräte ? Die sind meistens fix (Adress-Pins auf high oder low gelegt) und nicht per Software änderbar. > Kann man auf diese Methode auch auf einem Rasberry auf den I²C zugreifen > ? Ich hatte noch keinen vor mir, aber ja, das sollte auf jedem Linux so funktionieren, egal welche Hardware. Ich habe hier kleine 1GHz MIPS-Prozessoren, und da funktioniert das genau so. fchk
Das mit dem VGA-Port habe ich vorhin ausprobiert und es scheint zu funktionieren. Aber der MCP2221 wäre mir trotzdem sympatischer, das mit dem VGA, ist eher eine Notlösung. >3.1 USB HID Commands/Responses >3.1.1 STATUS/SET PARAMETERS... Das mit dem HIS muss ich wohl mal genauer angucken.
Ich betreibe unterdessen den MCP2221. Nur scheint mir, mit diesem ist die I²C-Übertragung über 10x langsamer, als über den VGA-Port. Wen es am Bus-Takt liegen würde, könnte der Speed nur max 4x abweichen, da dort die Werte 100-400KHz zugelassen sind. Kann man evtl. etwas über IOCtl einstellen ? Mit Google habe ich bis jetzt nichts schlaues finden können. Ich verwende Linux Mint.
Mathias schrieb: > Ich betreibe unterdessen den MCP2221. > > Nur scheint mir, mit diesem ist die I²C-Übertragung über 10x langsamer, > als über den VGA-Port. > Wen es am Bus-Takt liegen würde, könnte der Speed nur max 4x abweichen, > da dort die Werte 100-400KHz zugelassen sind. Das liegt an dem USB dazwischen. Jede Busaktion wird in einem USB-Paket verschickt, und in dem USB-Zeitscheibenmodell kommt jedes Full-Speed Device nur alle 10 ms dran. Das kannst Du nur ändern, indem Du das USB-Device intelligenter machst, damit es pro USB-Befehl mehr macht. Dein MCP2221 ist ein vorprogrammierter PIC16F1455. Für den musst Du dann also eigene Software schreiben, die möglichst wenig USB-Transaktionen benötigt.
>Das liegt an dem USB dazwischen. Jede Busaktion wird in einem USB-Paket >verschickt, und in dem USB-Zeitscheibenmodell kommt jedes Full-Speed >Device nur alle 10 ms dran. Aber wieso habe ich das Problem nicht, wen ich eine Arduino als Ersatz für den MCP2221 nehme ? Der Arduino hängt am gleichen USB-Port, wie den MCP2221. Ich hätte eher gedacht, das es mit dem Arduino langsamer, das dies Overhead mit dem Wandeln von I²C auf COMx hat.
es sieht so aus als hätte microchip die i2c-dev treiber nicht mehr auf der website :( der rest ist unter linux müll... selbst unter debian 10 lassen sich die treiber auch immer noch problemlos kompilieren und funktionieren ich häng sie deswegen hier an falls sie jeman sucht...
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.