udooneo:~# i2cdetect 3
which should return the DS3231 at address 0x68.
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-3.
I will probe address range 0x03-0x77.
Continue? [Y/n] Y
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- UU --
20: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Next step is to enable kernel support by enabling the Dallas/Maxim DS1307 driver as below.
Build the kernel and modules (this is important). Lastly we need add the DS3231 to the device tree to I2C4, below is an example,
diff --git a/arch/arm/boot/dts/imx6sx-udoo-neo.dtsi b/arch/arm/boot/dts/imx6sx-udoo-neo.dtsi
index abbf0d8..2ffa6cb 100644
--- a/arch/arm/boot/dts/imx6sx-udoo-neo.dtsi
+++ b/arch/arm/boot/dts/imx6sx-udoo-neo.dtsi
@@ -298,6 +298,11 @@
compatible = "fsl,fxas2100x";
reg = <0x20>;
};
+
+ rtc@68 {
+ compatible = "dallas,ds1307";
+ reg = <0x68>;
+ };
};
Rebuild the relevant dtb file depending on your set-up. Deploy the newly generated kernel, modules and dtb to the NEO.
On power up the kernel output should include the following lines ( try dmesg | grep ds1307)
[ 8.095963] rtc-ds1307 3-0068: rtc core: registered ds1307 as rtc0
[ 8.095989] rtc-ds1307 3-0068: 56 bytes nvram
If all is ok we can query the clock for it current time by using the hwclock utility:
udooneo:~# hwclock -r
Tue 24 Jan 2017 12:32:25 PM UTC -0.858087 seconds
We can sync with the ntp time:
udooneo:~# hwclock -s
On reboots the RTC time may become corrupt with the udooubuntu release to overcome this ntp service needs to be disabled with the following commands:
echo manual | sudo tee /etc/init/ntp.override
timedatectl set-ntp false
The timedatectl command is extremely useful as it provides a complete picture of the system and rtc times. For example to sync RTC with system time:
udooneo:~# timedatectl
Local time: Fri 2016-01-01 01:18:06 UTC
Universal time: Fri 2016-01-01 01:18:06 UTC
RTC time: Tue 2017-01-24 12:40:36
Timezone: Etc/UTC (UTC, +0000)
NTP enabled: no
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
udooneo:~# hwclock -s
udooneo:~# timedatectl
Local time: Tue 2017-01-24 12:42:03 UTC
Universal time: Tue 2017-01-24 12:42:03 UTC
RTC time: Tue 2017-01-24 12:42:03
Timezone: Etc/UTC (UTC, +0000)
NTP enabled: no
NTP synchronized: no
RTC in local TZ: no
DST active: n/a