Difference between revisions of "DESK-MX8M-AN-0003: Add an external RTC to SBC ORCA"

From DAVE Developer's Wiki
Jump to: navigation, search
(Linux driver)
(Accessing the rtc device)
Line 62: Line 62:
 
</pre>
 
</pre>
  
A proper ''systemd'' script can be used for sysnchronizing the system clock from the hardware rtc device:
+
A proper ''systemd'' script can be used for synchronizing the system clock from the hardware rtc device:
  
 
<pre>
 
<pre>
Line 68: Line 68:
 
Description=Synchronise System clock to hardware RTC
 
Description=Synchronise System clock to hardware RTC
 
DefaultDependencies=no
 
DefaultDependencies=no
After=systemd-modules-load.service
+
After=ntpdate.service
Before=systemd-journald.service time-sync.target sysinit.target shutdown.target
 
 
Conflicts=shutdown.target
 
Conflicts=shutdown.target
  
Line 75: Line 74:
 
Type=oneshot
 
Type=oneshot
 
RemainAfterExit=yes
 
RemainAfterExit=yes
ExecStart=/etc/hwrtc.sh
+
ExecStart=/sbin/hwclock -f /dev/rtc1 --hctosys
 
RestrictRealtime=yes
 
RestrictRealtime=yes
  
 
[Install]
 
[Install]
WantedBy=sysinit.target
+
WantedBy=multi-user.target
</pre>
 
 
 
where the startup script is <code>/etc/hwrtc.sh</code> used for probing the <code>rtc-ds1307</code> kernel module:
 
 
 
<pre>
 
#!/bin/sh
 
 
 
modprobe rtc-ds1307
 
sleep 1
 
hwclock -f /dev/rtc1 --hctosys
 
 
 
exit 0
 
 
</pre>
 
</pre>
  

Revision as of 16:33, 6 March 2024

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 the related rtc-ds1307 driver module already 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 synchronizing the system clock from the hardware rtc device:

[Unit]
Description=Synchronise System clock to hardware RTC
DefaultDependencies=no
After=ntpdate.service
Conflicts=shutdown.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/sbin/hwclock -f /dev/rtc1 --hctosys
RestrictRealtime=yes

[Install]
WantedBy=multi-user.target

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:~#