DESK-MX8M-AN-0003: Add an external RTC to SBC ORCA

From DAVE Developer's Wiki
Revision as of 15:45, 6 March 2024 by U0007 (talk | contribs) (Created page with "{{InfoBoxTop}} {{AppliesTo ORCA AN}} {{AppliesTo ORCA SBC AN}} {{InfoBoxBottom}} {{ImportantMessage|text=This application note has been validated using the '''kit version'''...")

(diff) ← Older revision | Approved revision (diff) | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
Info Box


200px-Emblem-important.svg.png

This application note has been validated using the kit version in the History table.

History[edit | edit source]

Version Date Development Kit version
4.0.0 Mar 2024 DESK-MX8M-L 4.0.0

Introduction[edit | edit source]

An external RTC device can be connected to ORCA SBC to keep date & time and synchronizing the system clock at boot time.

As an example, an easy - just ready - RTC small board can be bought from Amazon with the DS3231 RTC device.

DS3231 small board with CR2032 battery

Linux driver[edit | edit source]

DESK-MX8M-L 4.0.0 kernel has already the related rtc-ds1307 driver module built and available in the root file system image.

It is enough to connect the RTC board to an I2C and probe the kernel module.

For the purposes of this AN, it is possible to use the GROOVE connector which has the four required signals available: SCL, SDA, VDD, GND (see the SBC schematics page).

Then, the driver has to be enabled in the device tree using the i2c6 interface available in the GROOVE connector:

/* groove connector */
&i2c6 {
        clock-frequency = <100000>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2c6>;
        status = "okay";

        rtc: ds3231@68 {
                compatible = "maxim,ds3231";
                reg = <0x68>;
                status = "okay";
        };
};


Accessing the rtc device[edit | edit source]

The RTC device is available as /dev/rtc1 device and the related time can be read using the hwclock command:

root@desk-mx8mp:~# dmesg | grep rtc1
[    5.794607] rtc-ds1307 5-0068: registered as rtc1
root@desk-mx8mp:~# hwclock -f /dev/rtc1
2024-03-06 16:18:28.182912+01:00
root@desk-mx8mp:~#

A proper systemd script can be used for sysnchronizing the system clock from the hardware rtc device:

[Unit]
Description=Synchronise System clock to hardware RTC
DefaultDependencies=no
After=systemd-modules-load.service
Before=systemd-journald.service time-sync.target sysinit.target shutdown.target
Conflicts=shutdown.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/etc/hwrtc.sh
RestrictRealtime=yes

[Install]
WantedBy=sysinit.target

where the startup script is /etc/hwrtc.sh used for probing the rtc-ds1307 kernel module:

#!/bin/sh

modprobe rtc-ds1307
sleep 1
hwclock -f /dev/rtc1 --hctosys

exit 0

Now the date command shows the system clock synchronized at any reboot.

root@desk-mx8mp:~# date
Wed Mar  6 16:40:44 CET 2024
root@desk-mx8mp:~#