Listing 1
$ sudo apt install i2c-tools dkms git build-essential
Es gibt mehrere Treiber für das CH341A-Modul. Im Beispiel kam das Exemplar von Gunar Schorcht [5] zum Einsatz, da er für das Modul eine Gerätedatei erzeugt, die Sie mit den üblichen Methoden ansprechen. Mit den Kommandos aus Listing 2 laden Sie den Treiber herunter und installieren ihn.
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.





