A20-Olinuxino-MICRO RTC

image
Sunxi : RTC

Module I2C RTC DS1307

Liaisons entre le connecteur UEXT1 de la carte A20-Olinuxino-MICRO et le module RTC DS1307 (5v) ou DS1338 (3.3v)

UEXT1 Couleur Module RTC
1 : +3.3v Rouge -> Vcc
2 : GND Noir -> GND
5 : SCK Jaune -> SCL
6 : SDA Blanc -> SDA

ATTENTION : Utilisation du bus i2c-2

Les i2c sur le système
ls /dev/i2c*
/dev/i2c-0 /dev/i2c-1 /dev/i2c-2

i2c-tools

Installation outil de test et vérification bus i2c
sudo apt install i2c-tools

Les bus détectés sudo i2cdetect -l

i2c-0	i2c       	mv64xxx_i2c adapter             	I2C adapter
i2c-1	i2c       	mv64xxx_i2c adapter             	I2C adapter
i2c-2	i2c       	mv64xxx_i2c adapter             	I2C adapter

Le module est connecté sur le bus 2
sudo i2cdetect 2

WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-2.
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: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

L’adresse de l’esclave 68 répond , RTC est accessible mais il faut un élément logiciel pour le contrôler (pilote).

Pilote du module DS1307

Il faut que le bus i2c et le pilote ds1307 soient actifs dans la configuration kernel

#
# I2C support
#
CONFIG_I2C=y

#
# I2C RTC drivers
#
CONFIG_RTC_DRV_DS1307=y

Chargement du module DS1307

Charger le module
sudo modprobe rtc_ds1307
Préciser l’adresse du composant 0x68
sudo -s
echo "ds1307 0x68" > /sys/class/i2c-adapter/i2c-2/new_device
On vient d’associer l’adresse 0x68 au pilote rtc_ds1307
Vérification
dmesg | tail

[ 1239.241878] rtc-ds1307 2-0068: rtc core: registered ds1307 as rtc1
[ 1239.242001] rtc-ds1307 2-0068: 56 bytes nvram
[ 1239.242183] i2c i2c-2: new_device: Instantiated device ds1307 at 0x68

Le circuit est pris en charge et est utilisé par le système pour servir de première horloge temps réel sous la forme du fichier /dev/rtc1

Mise à l’heure

On va mettre à l’heure le module avec celle du système (à jour si connecté sur le réseau via ntp)
hwclock -f /dev/rtc1 -w
Lecture de l’heure sur le module
hwclock -f /dev/rtc1 -r

Fri 13 May 2016 03:36:15 PM UTC  -0.322894 seconds

Chargement automatique

  • Au démarrage on associe l’adresse 0x68 au pilote rtc_ds1307 par le biais du fichier /etc/rc.local
  • Puis on ajuste l’heure système à celle de l’horloge matérielle
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

I2CDIR=/sys/class/i2c-adapter/i2c-2
if [ -d "$I2CDIR" ]; then
 echo "ds1307 0x68" > $I2CDIR/new_device
 hwclock -f /dev/rtc1 -s
fi

exit 0

Le chemin est stocké dans une variable I2CDIR et est utilisée pour tester si le répertoire existe :

  • Dans le cas où il n’existe pas ,cela signifie que le pilote pour le support i2c ne s’est pas chargé .
  • Si le répertoire existe ,la commande est exécuter pour déclarer le composant sur le bus et mettre à jour l’heure système