Startseite>I2C Teil 31: USB-I2C-Modul MCP23017
Aus Raspberry Pi Geek 06/2020

I2C Teil 31: USB-I2C-Modul MCP23017 (Seite 2)

Listing 2

$ git clone https://github.com/gschorcht/i2c-ch341-usb.git
$ cd i2c-ch341-usb
$ make
$ sudo make install

Der Treiber erzeugt ein zusätzliches I2C-Gerät im System. Am einfachsten finden Sie dessen Namen heraus, indem Sie direkt nach der Installation des Treibers das Kommando dmesg ausführen (Listing 3). So sehen Sie, welches Device der Treiber im System erzeugt hat (Zeile 10). Im Beispiel heißt es /dev/i2c-16, auf Ihrem System lautet der Name unter Umständen anders.

Listing 3

$ dmesg | grep i2c-ch341-usb
[28421.628692] i2c-ch341-usb 3-4.4:1.0: ch341_cfg_probe: output gpio0 gpio=0 irq=0
[28421.628695] i2c-ch341-usb 3-4.4:1.0: ch341_cfg_probe: output gpio1 gpio=1 irq=1
[28421.628696] i2c-ch341-usb 3-4.4:1.0: ch341_cfg_probe: output gpio2 gpio=2 irq=2
[28421.628697] i2c-ch341-usb 3-4.4:1.0: ch341_cfg_probe: output gpio3 gpio=3 irq=3
[28421.628698] i2c-ch341-usb 3-4.4:1.0: ch341_cfg_probe: input  gpio4 gpio=4 irq=4 (hwirq)
[28421.628700] i2c-ch341-usb 3-4.4:1.0: ch341_cfg_probe: input  gpio5 gpio=5 irq=5
[28421.628701] i2c-ch341-usb 3-4.4:1.0: ch341_cfg_probe: input  gpio6 gpio=6 irq=6
[28421.628702] i2c-ch341-usb 3-4.4:1.0: ch341_cfg_probe: input  gpio7 gpio=7 irq=7
[28421.628815] i2c-ch341-usb 3-4.4:1.0: ch341_i2c_probe: created i2c device /dev/i2c-16
[28421.628817] i2c-ch341-usb 3-4.4:1.0: ch341_i2c_set_speed: Change i2c bus speed to 100 kbps
[28421.629139] i2c-ch341-usb 3-4.4:1.0: ch341_usb_probe: connected
[28421.629166] usbcore: registered new interface driver i2c-ch341-usb

Standardmäßig dürfen in Linux-Systemen nur root und Benutzer der Gruppe i2c auf entsprechende Geräte zugreifen. Wollen Sie nicht immer mit Sudo arbeiten, fügen Sie dieser Gruppe Ihren Benutzernamen hinzu (Listing 4). Mit dem Kommando newgrp aktivieren Sie die Änderung direkt; andernfalls müsste sich der Benutzer neu anmelden.

Listing 4

$ sudo addgroup Benutzer i2c
$ newgrp - i2c

Nun ist es an der Zeit, den Aufbau das erste Mal zu testen. Dazu dient wie üblich das Tool I2cdetect (Listing 5). Überraschenderweise sieht es so aus, als wären alle Adressen mit Geräten belegt. Sie erfahren mit I2cdetect also lediglich, ob das CH341A-Modul angeschlossen ist.

Listing 5

$ i2cdetect -y 16
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
10: 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
20: 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f
30: 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f
40: 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f
50: 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f
60: 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f
70: 70 71 72 73 74 75 76 77

Für den Zugriff auf die Bausteine am I2C-Bus verwenden Sie die Tools I2cget und I2cset. Im ersten Versuch kommt die Platine aus dem vorigen Teil dieser Reihe zum Einsatz. Die Kommandos aus Listing 6 schalten alle LEDs an. Auf Ihrem System ersetzen Sie die 16 im Beispiel durch die Gerätenummer aus der Ausgabe von Dmesg.

Listing 6

$ i2cset -y 16 0x20 0x00 0x00 # IODIR PORTA alle out
$ i2cset -y 16 0x20 0x01 0x00 # IODIR PORTB alle out
$ i2cset -y 16 0x20 0x12 0xFF # IODIR PORTA alle anschalten
$ i2cset -y 16 0x20 0x13 0xFF # IODIR PORTB alle anschalten

Haben Sie die Kommandos abgesetzt, sollten alle LEDs leuchten. Um den Input-Modus zu testen, verwenden Sie die Kommandos aus Listing 7. Hier tauschen Sie ebenfalls die 16 gegen die zuvor ermittelte Gerätenummer aus.

Listing 7

$ i2cset -y 1 0x20 0x00 0xFF # IODIR PORTA alle in
$ i2cset -y 1 0x20 0x01 0xFF # IODIR PORTB alle in
$ watch 'i2cget -y 16 0x20 0x12; i2cget -y 16 0x20 0x13'

Achten Sie darauf, die Eingabeplatine nicht mit dem Modul zu verbinden, solange die Ports noch auf Ausgabe stehen: Das beschädigt unter Umständen das MCP23017-Modul.

Fazit

Mit dem CH341A-Modul steht Ihnen an jedem PC via USB eine I2C-Schnittstelle zur Verfügung. Das ist hilfreich, wenn Sie ein neues Projekt beginnen. Das robuste Modul arbeitet über den hier verwendeten Treiber ausgezeichnet mit den I2C-Tools zusammen.

Der einzige Wermutstropfen: I2cdetect arbeitet nicht sauber. Das ist allerdings nicht weiter tragisch, da Sie ja die Möglichkeit haben, auf anderem Wege zu ermitteln, welche Adressen die Bausteine am Bus haben.

Bleibt mir nur, Ihnen viel Spaß bei eigenen Experimenten mit dem CH341A-Modul zu wünschen. Falls Sie Anregungen zu neuen Modulen haben, schreiben Sie einfach eine E-Mail an die Redaktion.

Der Autor

Im Zeitalter der Magnetringkernspeicher geboren, studierte Martin Mohr nach einer Ausbildung zum Elektroniker Informatik und entwickelte beruflich überwiegend Java-Applikationen. Mit dem RasPi erwachte die Liebe zur Elektronik wieder.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland