Rocktech ISG 502 HW-Clock unter Debian Bookworm

Bei eBay war ich auf der Suche nach einem Raspberry Pi für verschiedenste Projekte. Dabei bin ich auf einen ISG-502 von Rocktech gestoßen. Es handelt sich dabei um einen Raspberry Pi 4 mit einem Erweiterungsboard, auf dem neben einer Real-Time-Clock auch verschiedene I/Os ausgeführt sind, und es gibt die Möglichkeit, mehrere Schnittstellen zu nutzen. Durch das Erweiterungsboard kann der Raspberry mit einer Spannung von 9–12 Volt Gleichspannung betrieben werden, was ihn auch für andere Einsatzzwecke, z. B. in Fahrzeugen, nutzbar macht. Dabei sitzt der Raspberry in einem formschönen Metallgehäuse und erlaubt auch eine vernünftige Befestigung.

Allgemeines

Auch wenn ich anfangs nur den Pi 4 nutzen wollte, stellte ich recht bald fest, dass die Erweiterungsplatine doch den ein oder anderen Vorteil bietet. Informationen dazu fand ich letztendlich bei HackADay.io11. Dort wird das sogenannte Internet Smart Gateway genauer beschrieben.

Letztendlich gelang es mir doch, neben den herausgeführten GPIOs auch die über I2C verbundene RTC mit dem Raspberry zu verbinden.

GPIO PinFunktionVerwendung
GPIO4grüne LED am Gehäuse
GPIO5Auf HIGH setzen um den RS485 (A0/B0) via UART0 zu verwendenRS485 Kommunikation
GPIO17IO0IOs an der Anschlussklemme
GPIO18IO1IOs an der Anschlussklemme
GPIO27IO2IOs an der Anschlussklemme
GPIO22IO3IOs an der Anschlussklemme
GPIO2Serial Data Line (SDA) für I2CVerbindung I2C
GPIO3Serial Clock Line (SCL) für I2CVerbindung I2C
GPIO6RTX für Interrupt 1 (IRQ1)Interrupt für TRC

Da die I/Os von Haus aus funktionieren, war es das Ziel, die RTC für den Raspberry nutzen zu können.

I2C Aktivieren und Kernel Module vorbereiten

Dafür war es zuerst notwendig, die I2C-Schnittstelle über den folgenden Befehl zu aktivieren:

david@isg502-4:~ $ sudo raspi-config
# 3 Interface Options
# I5 I2C
# YES
# Exit
david@isg502-4:~ $ sudo reboot

Nach dem Reboot sollten als Nächstes die I2C-Tools installiert werden, um zu prüfen, ob die RTC vom I2C-Bus erkannt wird.

david@isg502-4:~ $ sudo apt install i2c-tools -y

Danach sollte die RTC auf dem I2C-Bus mit der Adresse 0x32 gefunden werden.

david@isg502-4:~ $ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- UU -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
david@isg502-4:~ $ 

Hier kann es auch sein, dass statt ‚UU‘ die Adresse ’32‘ angezeigt wird.

Als nächster Schritt ist es nötig, den Kernel um den Treiber für den RX8010 von Epson zu erweitern. Hierzu habe ich mich an die Anleitung von Raspberry Pi Geek2 gehalten, in der erklärt wird, wie man den Kernel um den RX8010 erweitert.

Kurzum: Der entsprechende Code für die Kernel-Erweiterung wird aus den offiziellen Kernelquellen geladen, kompiliert und dem Kernel zur Verfügung gestellt.

Durch dieses Verfahren wird der Kernel als verschmutzt (engl. tainted) angezeigt, weil wir dort Module manuell eingebunden haben.

Zuerst suchen wir uns aus den offiziellen Kernelquellen3 die entsprechende Quelldatei rtc-rx8010.c, zu finden unter /drivers/rtc/rtc-rx8010.c, heraus und laden sie herunter.

Wichtig hierbei auf die Richtige Kernel Version zu achten.

david@isg502-4:~ $ mkdir epson-rtc
david@isg502-4:~ $ cd epson-rtc
david@isg502-4:~/epson-rtc $ wget https://raw.githubusercontent.com/raspberrypi/linux/refs/heads/rpi-6.12.y/drivers/rtc/rtc-rx8010.c

Danach ist es notwendig, für den Bau des Kernelmoduls eine Build-Datei zu erstellen. Diese Datei heißt einfach nur Kbuild.

david@isg502-4:~/epson-rtc $ echo "obj-m := rtc-rx8010.o" >> Kbuild

Damit sind die Vorbereitungen zum Bau des Kernelmoduls abgeschlossen. Nun geht es an den eigentlichen Bau.

david@isg502-4:~/epson-rtc $ make -C /lib/modules/$(uname -r)/build M=$PWD
david@isg502-4:~/epson-rtc $ sudo make -C /lib/modules/$(uname -r)/build M=$PWD modules_install
david@isg502-4:~/epson-rtc $ sudo depmod -a
david@isg502-4:~/epson-rtc $ sudo modprobe rtc-rx8010

Soll dabei der erster Befehl fehlschlagen und ein „No such file or directory“ quitiert werden, dann fehlt aller wahrscheinlichkeit nach der Kernel-Header. Dieser kann einfach nachinstalliert werden.

sudo apt install raspberrypi-kernel-headers

Damit das neu gebaute Kernelmodul auch sauber auf dem Pi seinen Dienst tut, sind noch ein paar kleine Änderungen beim Boot des Pis notwendig.

Kernel-Overlay erstellen

Als Erstes erstellen wir ein DTS-Overlay, damit der Pi-Kernel mit dem Ganzen auch etwas anfangen kann. Dazu erstellen wir in unserem Ordner eine Datei mit dem Namen rx8010-overlay.dts.

david@isg502-4:~/epson-rtc $ touch rx8010-overlay.dts

Der Inhalt der Datei sieht wie folgt aus:

/dts-v1/;
/plugin/;

/ {
    compatible = "brcm,bcm2835";

    fragment@0 {
        target = <&i2c1>;
        __overlay__ {
            #address-cells = <1>;
            #size-cells = <0>;

            rx8010: rtc@32 {
                compatible = "epson,rx8010";
                reg = <0x32>;
            };
        };
    };
};

Um das Overlay zu bauen und an den richtigen Ort zu kopieren, reichen zwei Zeilen.


david@isg502-4:~/epson-rtc $ dtc -@ -I dts -O dtb -o rx8010.dtbo rx8010-overlay.dts
david@isg502-4:~/epson-rtc $ sudo cp rx8010.dtbo /boot/firmware/overlays/

Damit der Kernel beim Booten auch sauber lädt, geben wir ihm diese Informationen noch beim Start mit. Dazu wird die Datei /etc/modules um drei Zeilen erweitert:

i2c-dev
rtc_rx8010
rtc-rx8010

Zusätzlich wird in der Datei /boot/firmware/config.txt noch das Overlay und weitere Informationen zum Modul übergeben. Diese beiden Zeilen habe ich bei mir direkt im oberen Block eingetragen.

dtoverlay=i2c-rtc,rx8010,i2c_bus=1,i2c_addr=0x32
dtoverlay=rx8010

Nun sollte nach einem Neustart des Pis die Hardware-Uhr zur Verfügung stehen.

Test

Ob alles geklappt hat, erkennt man an der erfolgreichen Ausgabe des Befehls hwclock -r.

david@isg502-4:~ $ sudo hwclock -r
2025-11-21 12:46:17.413036+01:00

Sollte die Ausgabe so aussehen, hat alles funktioniert.

  1. https://hackaday.io/project/195148-reverse-engineering-rocktech-isg-502 ↩︎
  2. https://www.raspberry-pi-geek.de/ausgaben/rpg/2021/06/treiber-als-kernel-module-kompilieren/ ↩︎
  3. https://github.com/raspberrypi/linux ↩︎