Changes

Jump to: navigation, search
Created page with "{{InfoBoxTop}} {{AppliesTo ORCA AN}} {{AppliesTo ORCA SBC AN}} {{InfoBoxBottom}} {{ImportantMessage|text=This application note has been validated using the '''kit version'''..."
{{InfoBoxTop}}
{{AppliesTo ORCA AN}}
{{AppliesTo ORCA SBC AN}}
{{InfoBoxBottom}}

{{ImportantMessage|text=This application note has been validated using the '''kit version''' in the History table.}}
==History==

{| class="wikitable" border="1"
!Version
!Date
!Development Kit version
|-
| 4.0.0
| Mar 2024
|[[DESK-MX8M-L/General/Release_Notes#DESK-MX8M-L_4.0.0|DESK-MX8M-L 4.0.0]]
|-
|}

==Introduction==
An external RTC device can be connected to [[ORCA SBC|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 [https://www.amazon.com/HiLetgo-AT24C32-Arduino-Without-Battery/dp/B00LX3V7F0 Amazon] with the DS3231 RTC device.

[[File:DS3231-RTC.png | thumb | center | DS3231 small board with CR2032 battery]]

== Linux driver ==

[[DESK-MX8M-L/General/Release_Notes#DESK-MX8M-L_4.0.0|DESK-MX8M-L 4.0.0]] kernel has already the related <code>rtc-ds1307</code> 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 [[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:

<pre class="board-terminal">
/* 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";
};
};
</pre>



== Accessing the rtc device ==
The RTC device is available as <code>/dev/rtc1</code> device and the related time can be read using the <code>hwclock</code> command:

<pre class="workstation-terminal">
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:~#
</pre>

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

<pre>
[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
</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>

Now the <code>date</code> command shows the system clock synchronized at any reboot.

<pre class="workstation-terminal">
root@desk-mx8mp:~# date
Wed Mar 6 16:40:44 CET 2024
root@desk-mx8mp:~#
</pre>

[[Category: ORCA]] [[Category: ORCA SBC]]
8,154
edits

Navigation menu