Forum: Mikrocontroller und Digitale Elektronik MCP2221 ansprechen


von Mathias B. (mathias_b103)


Lesenswert?

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
von Jürgen (Gast)


Lesenswert?

Hast Du Dir schon die Beispiele angesehen, die Microchip zur Verfügung 
stellt?

von Mathias B. (mathias_b103)


Lesenswert?

Beispiele wo ?

von Paul (Gast)


Lesenswert?


von Mathias B. (mathias_b103)


Lesenswert?

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 ?

von Volker S. (vloki)


Lesenswert?

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...

von Frank K. (fchk)


Lesenswert?

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

von Volker S. (vloki)


Lesenswert?

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)

von Mathias B. (mathias_b103)


Lesenswert?

>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
von Volker S. (vloki)


Lesenswert?

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...

von Mathias A. (mrdelphi)


Lesenswert?

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 ;-)

von Frank K. (fchk)


Lesenswert?

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

von Mathias B. (mathias_b103)


Lesenswert?

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.

von Mathias (Gast)


Lesenswert?

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.

von Frank K. (fchk)


Lesenswert?

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.

von Mathias (Gast)


Lesenswert?

>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.

von rejuce (Gast)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.