mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MCP2221 ansprechen


Autor: Mathias B. (mathias_b103)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du Dir schon die Beispiele angesehen, die Microchip zur Verfügung 
stellt?

Autor: Mathias B. (mathias_b103)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beispiele wo ?

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Mathias B. (mathias_b103)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Treiber konnte ich gemäss der Anleitung bei "MCP2221 Linux Kernel 
I2C Bus Driver" kompilieren und installieren.
make modules
make install
./driver_load.sh

liefen ohne Fehler durch.

So wie es scheint, hat es auf meiner NVidia auch einen I²C-Bus.
# i2cdetect -l
i2c-0  i2c         NVIDIA i2c adapter 0 at 1:00.0    I2C adapter
i2c-1  i2c         NVIDIA i2c adapter 1 at 1:00.0    I2C adapter
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 ?

Autor: Volker S. (vloki)
Datum:

Bewertung
0 lesenswert
nicht 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/Personal...
Das "sollte" auch unter Linux laufen...

Autor: Frank K. (fchk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mathias B. schrieb:
> Die Treiber konnte ich gemäss der Anleitung bei "MCP2221 Linux Kernel
> I2C Bus Driver" kompilieren und installieren.
>
>
make modules
> make install
> ./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

Autor: Volker S. (vloki)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Mathias B. (mathias_b103)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Volker S. (vloki)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Mathias A. (mrdelphi)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: Frank K. (fchk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mathias B. (mathias_b103)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mathias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Frank K. (fchk)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mathias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.