Mal beim Kaffee schnell was Basteln
Nachmachen auf eigene Gefahr!
Auch der ROCKPro64 hat mehrere i2c Bussysteme. Erst mal eine Grafik dazu.
Hardware
Als allererstes eine Warnung! Viele I2C-Module sind für 5 Volt gebaut, der ROCKPro64 kann aber nur 3 Volt Signale verarbeiten. Für den Betrieb der 5V-Module an 3V-Geräten gibt es preiswerte Wandler. Eine Nichtbeachtung kann zur Zerstörung des ROCKPro64 führen!
Der Adapter ist bestellt, aber ich hatte von der Fa. Wenzel Systems die I2C-Switch-Bar hier liegen und man will das ja ausprobieren. Da bin ich über einen Tipp im Netz gestolpert. Auf dem Board sind zwei Abschlusswiderstände auf den Bus geschaltet. Diese kann man entfernen, dafür sind auf dem Board zwei Lötbrücken SJ1 und SJ2. Das Lötzinn entfernt, nachgemessen das die Verbindung nicht mehr besteht und angeschlossen.
Schaltplan der Fa. Wenzel Systems
Schaltplan ROCKPro64 v2.1
Der Anschluss an einen ROCKPro64 sieht dann wie folgt aus:
Switch-Bar| RP64v2.1
-------- | -------- | -------- | ------|-----
+3,3V | P01
GND | P09
SDA | P27 / I2C4 SDA
SCL | P28 / I2C4 SCL
Wenn ich das alles richtig verstanden habe, dient die Leitung SCL für die Zeitsignale (Clock) und SDA für die Daten (Data). Die beiden Leitungen bilden den I2C-Bus, die anderen beiden dienen der Stromversorgung der Switch-Bar.
In der Grafik sind die I2C Busse mit Nummern versehen, hier im Beispiel I2C4, das entspricht dem Bus Nr.4
Dann weiter...
Software
System
rock64@rockpro64:~/temp$ uname -a
Linux rockpro64 5.0.0-1101-ayufan-g41eeb7cd789e #ayufan SMP PREEMPT Fri Mar 8 22:14:59 UTC 2019 aarch64 aarch64 aarch64 GNU/Linux
Tools installieren
sudo apt install i2c-tools
Den Bus absuchen
rock64@rockpro64:~$ sudo i2cdetect -y 4
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- 22 -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Oben ist der Originalzustand, ohne das was angeschlossen ist. Jetzt mit angeschlossener Switch-Bar.
rock64@rockpro64:~/temp$ sudo i2cdetect -y 4
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- 22 -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Switchbar gefunden
Ok, ein paar Erläuterungen. Den Befehl mal zerlegen.
sudo i2cdetect -y 4
- sudo - Der Befehl muss mit Rootrechten ausgeführt werden.
- -y - Wir stimmen der Ausführung zu
- 4 - Nummer des i2c Busses, hier die Nummer 4
Ohne das -y würde das so aussehen.
rock64@rockpro64:~/temp$ sudo i2cdetect 4
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-4.
I will probe address range 0x03-0x77.
Continue? [Y/n] n
Wert der Switchbar auslesen
rock64@rockpro64:~/temp$ sudo i2cget -y 4 0x3e
0x00
Auch hier wieder die Zustimmung gesetzt -y, Busnummer 4 und die Adresse der Switch-Bar 0x3e.
Danach die Rückgabe des Wertes 0x00 Das ist auch korrekt, alle DIP-Schalter sind auf OFF.
Schalter Nr.1 auf ON
rock64@rockpro64:~/temp$ sudo i2cget -y 4 0x3e
0x01
Schalter Nr.2 auf ON
rock64@rockpro64:~/temp$ sudo i2cget -y 4 0x3e
0x02
Schalter Nr.3 auf ON
rock64@rockpro64:~/temp$ sudo i2cget -y 4 0x3e
0x04
Schalter Nr.4 auf ON
rock64@rockpro64:~/temp$ sudo i2cget -y 4 0x3e
0x08
Schalter Nr.5 auf ON
rock64@rockpro64:~/temp$ sudo i2cget -y 4 0x3e
0x10
Schalter Nr.6 auf ON
rock64@rockpro64:~/temp$ sudo i2cget -y 4 0x3e
0x20
usw. Man sieht also, das die Zustände Hexadezimal angezeigt werden.
Hex |
Dual |
Dez |
0 |
0 0 0 0 |
00 |
1 |
0 0 0 1 |
01 |
2 |
0 0 1 0 |
02 |
3 |
0 0 1 1 |
03 |
4 |
0 1 0 0 |
04 |
5 |
0 1 0 1 |
05 |
6 |
0 1 1 0 |
06 |
7 |
0 1 1 1 |
07 |
8 |
1 0 0 0 |
08 |
9 |
1 0 0 1 |
09 |
A |
1 0 1 0 |
10 |
B |
1 0 1 1 |
11 |
C |
1 1 0 0 |
12 |
D |
1 1 0 1 |
13 |
E |
1 1 1 0 |
14 |
F |
1 1 1 1 |
15 |
Viel Spaß beim Ausprobieren, aber schön vorsichtig