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)
Line 29: Line 29:
 
[[DESK-MX8M-L/General/Release_Notes#DESK-MX8M-L_4.0.0|DESK-MX8M-L 4.0.0]] kernel has the related <code>rtc-ds1307</code> driver module already built and available in the root file system image.
 
[[DESK-MX8M-L/General/Release_Notes#DESK-MX8M-L_4.0.0|DESK-MX8M-L 4.0.0]] kernel has the related <code>rtc-ds1307</code> 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.
+
It is enough to connect the RTC board to an I2C: 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 [[ORCA_SOM/ORCA_Evaluation_Kit/Electrical_and_Mechanical_Documents/Schematics | schematics]] page).
 
 
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 [[ORCA_SOM/ORCA_Evaluation_Kit/Electrical_and_Mechanical_Documents/Schematics | schematics]] page).
 
  
 
Then, the driver has to be enabled in the device tree using the <code>i2c6</code> interface available in the GROOVE connector:
 
Then, the driver has to be enabled in the device tree using the <code>i2c6</code> interface available in the GROOVE connector:

Revision as of 16:39, 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: 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 service /lib/systemd/system/hwrtc.service 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

and the service has to be enabled:

systemctl enable hwrtc.service

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