Skip to content

ROCKPro64 - i2c Bus

Hardware
  • Mal beim Kaffee schnell was Basteln 😉

    Nachmachen auf eigene Gefahr!

    IMG_20190310_103859_ergebnis.jpg

    Auch der ROCKPro64 hat mehrere i2c Bussysteme. Erst mal eine Grafik dazu.

    Bild Text

    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 🙂

  • RockPro64 - Mainline Kernel 5.9.x vom Kamil

    Images
    5
    0 Stimmen
    5 Beiträge
    435 Aufrufe
    FrankMF

    Hoppla, nach langer Zeit mal was Neues vom Kamil.

    5.9.0-1146-ayufan released

    WIP: cdn_dp hdmi audio switch
  • ROCKPro64 - Debian Bullseye Teil 1

    ROCKPro64
    17
    0 Stimmen
    17 Beiträge
    2k Aufrufe
    FrankMF

    Durch diesen Beitrag ist mir mal wieder eingefallen, das wir das erneut testen könnten 😉

    Also die aktuellen Daten von Debian gezogen. Das Image gebaut, könnt ihr alles hier im ersten Beitrag nachlesen. Da die eingebaute Netzwerkschnittstelle nicht erkannt wurde, habe ich mal wieder den USB-to-LAN Adapter eingesetzt.

    Bus 005 Device 002: ID 0b95:1790 ASIX Electronics Corp. AX88179 Gigabit Ethernet

    Die Installation wollte ich auf einem NVMe Riegel installieren.

    Die Debian Installation durchgezogen und nach erfolgreicher Installation neugestartet. Und siehe da, ohne das man alles möglich ändern musste, bootete die NVMe SSD 🤓

    Eingesetzter uboot -> 2020.01-ayufan-2013......

    Die nicht erkannte LAN-Schnittstelle müsste an nicht freien Treibern liegen, hatte ich da irgendwo kurz gelesen. Beim Schreiben dieses Satzes kam die Nacht und ich konnte noch mal drüber schlafen. Heute Morgen, beim ersten Kaffee, dann noch mal logischer an die Sache ran gegangen.

    Wir schauen uns mal die wichtigsten Dinge an.

    root@debian:~# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 62:03:b0:d6:dc:b3 brd ff:ff:ff:ff:ff:ff 3: enx000acd26e2c8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0a:cd:26:e2:c8 brd ff:ff:ff:ff:ff:ff inet 192.168.3.208/24 brd 192.168.3.255 scope global dynamic enx000acd26e2c8 valid_lft 42567sec preferred_lft 42567sec inet6 fd8a:6ff:2880:0:20a:cdff:fe26:e2c8/64 scope global dynamic mngtmpaddr valid_lft forever preferred_lft forever inet6 2a02:908:1260:13bc:20a:xxxx:xxxx:xxxx/64 scope global dynamic mngtmpaddr valid_lft 5426sec preferred_lft 1826sec inet6 fe80::20a:cdff:fe26:e2c8/64 scope link valid_lft forever preferred_lft forever

    Ok, er zeigt mir die Schnittstelle eth0 ja an, dann kann es an fehlenden Treibern ja nicht liegen. Lässt dann auf eine fehlerhafte Konfiguration schließen. Nächster Halt wäre dann /etc/network/interfaces

    Das trägt Debian ein

    # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug enx000acd26e2c8 iface enx000acd26e2c8 inet dhcp # This is an autoconfigured IPv6 interface iface enx000acd26e2c8 inet6 auto

    Gut, bei der Installation hat Debian ja nur die zusätzliche Netzwerkschnittstelle erkannt, folgerichtig ist die auch als primäre Schnittstelle eingetragen. Dann ändern wir das mal...

    # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface #allow-hotplug enx000acd26e2c8 allow-hotplug eth0 #iface enx000acd26e2c8 inet dhcp iface eth0 inet dhcp # This is an autoconfigured IPv6 interface #iface enx000acd26e2c8 inet6 auto iface eth0 inet6 auto

    Danach einmal alles neu starten bitte 😉

    systemctl status networking

    Da fehlte mir aber jetzt die IPv4 Adresse, so das ich einmal komplett neugestartet habe. Der Ordnung halber, so hätte man die IPv4 Adresse bekommen.

    dhclient eth0

    Nachdem Neustart kam dann das

    root@debian:/etc/network# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 62:03:b0:d6:dc:b3 brd ff:ff:ff:ff:ff:ff inet 192.168.3.172/24 brd 192.168.3.255 scope global dynamic eth0 valid_lft 42452sec preferred_lft 42452sec inet6 fd8a:6ff:2880:0:6003:b0ff:fed6:dcb3/64 scope global dynamic mngtmpaddr valid_lft forever preferred_lft forever inet6 2a02:908:1260:13bc:6003:xxxx:xxxx:xxxx/64 scope global dynamic mngtmpaddr valid_lft 5667sec preferred_lft 2067sec inet6 fe80::6003:b0ff:fed6:dcb3/64 scope link valid_lft forever preferred_lft forever 3: enx000acd26e2c8: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 00:0a:cd:26:e2:c8 brd ff:ff:ff:ff:ff:ff

    Fertig, eth0 läuft. Nun kann man den zusätzlichen Adapter entfernen oder halt konfigurieren, wenn man ihn braucht.

    Warum der Debian Installer die eth0 nicht erkennt verstehe ich nicht, aber vielleicht wird das irgendwann auch noch gefixt. Jetzt habe ich erst mal einen Workaround um eine Installation auf den ROCKPro64 zu bekommen.

  • ROCKPro64 - PCIe Probleme

    Hardware
    3
    0 Stimmen
    3 Beiträge
    330 Aufrufe
    FrankMF

    Danke für dein Feedback.

  • ROCKPro64 - PCIe NVMe SSD installieren

    Hardware
    1
    0 Stimmen
    1 Beiträge
    318 Aufrufe
    Niemand hat geantwortet
  • ROCKPro64 - Anpassen resize_rootfs.sh

    Angeheftet ROCKPro64
    3
    0 Stimmen
    3 Beiträge
    457 Aufrufe
    FrankMF

    Seit Release 0.10.10 ist das automatische Vergrößern der Root Partition mit drin 🙂

    0.10.10: Support automated resize when booting from nvme

    Einfach das Image auf die NVMe SSD schreiben, ab in den ROCKPro64 und fertig! Nach dem Booten wird die Partition dann automatisch auf die maximal mögliche Größe erweitert.

    Kamil hat das Script auch ein wenig angepasst.

    case $dev in /dev/mmcblk?p?) DISK=${dev:0:12} PART=${dev:13} NAME="sd/emmc" ;; /dev/sd??) DISK=${dev:0:8} PART=${dev:8} NAME="hdd/ssd" ;; /dev/nvme?n?p?) DISK=${dev:0:12} PART=${dev:13} NAME="pcie/nvme" ;;

    Das Resultat bei einer Samsung 979 EVO mit 500GB Speicher

    rock64@rockpro64:~$ df -h Filesystem Size Used Avail Use% Mounted on udev 918M 0 918M 0% /dev tmpfs 192M 5.2M 187M 3% /run /dev/nvme0n1p4 459G 1.2G 439G 1% / tmpfs 957M 0 957M 0% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 957M 0 957M 0% /sys/fs/cgroup /dev/nvme0n1p3 229M 44M 169M 21% /boot /dev/nvme0n1p2 12M 0 12M 0% /boot/efi tmpfs 192M 0 192M 0% /run/user/1000

    Perfekt. Danke Kamil!

  • Images 0.9.x

    Images
    13
    0 Stimmen
    13 Beiträge
    798 Aufrufe
    FrankMF

    0.9.16: gitlab-ci-linux-build-163 released

    0.9.x 0.9.16: Bump kernel to 4.4.197, 0.9.15: Bump kernel to 4.4.193, 0.9.14: Bump kernel to 4.4.190, 0.9.14: Fix Firefox video playback, 0.9.13: Bump sound volume for Pinebook Pro, 0.9.12: Fix LXDE for Rock64, 0.9.10: Fix support for power/standby LEDs for all boards,
  • ROCKPro64 (4GB) - Probleme mit der PCIe SATA-Karte??

    ROCKPro64
    8
    0 Stimmen
    8 Beiträge
    1k Aufrufe
    FrankMF

    Die Verlinkung hatte ich überlesen, sorry.

    Es gibt nur eine Handvoll Karten, die im PCIe Port funktionieren. Warum, kann ich dir leider nicht beantworten. Es liegt aber mit Sicherheit an falschen Einstellungen im Kernel und an fehlenden Treibern. Ich habe hier auch eine andere Karte rumliegen, die erzeugt immer nur eine Kernel Panic 😞

    In diesem Thread steht einiges was geht und was nicht.
    https://forum.pine64.org/showthread.php?tid=6459

  • Shop-Bestellung

    ROCKPro64
    10
    0 Stimmen
    10 Beiträge
    2k Aufrufe
    V

    @FrankM besten Dank für die ausführliche Infos.