Real Time Clock per Orange Pi Zero
Il modulo Orange Pi Zero (OPI zero) non dispone di un Real Time Clock o RTC o, per essere più precisi, il SoC utilizzato lo fornirebbe solo che non è stato previsto il montaggio del relativo quarzo e della batteria tampone quindi la precisione è nulla e in caso di mancanza di alimentazione si azzera. Quindi direi la sua utilità è nulla. Fortunatamente esistono in commercio numerosi integrati che forniscono questa funzionalità con una connessione I²C. Sono anche facilmente reperibili dei moduli che possono venir collegati direttamente sul connettore di espansione dell'OPI Zero (o del Raspberry o di altri moduli simili).
Requisiti
- un SBC Orange Pi o Raspeberry Pi
- sistema operativo Armbian
- un modulo RTC compatibile
SBC
Al momento ho collaudato questa soluzione solo utilizzando un Orange Pi Zero. Teoricamente dovrebbe funzionare su tutti i moduli similari facendo attenzione a quale bus I²C rendono disponibile e utilizzando l'overlay adatto.
Armbian
Per i miei progetti utilizzo un Sistema operativo derivato da Armbian
RTC
Occorre fare attenzione a quale modulo si intende usare, alcuni richiedono alimentazione e segnali a 5V e potrebbero essere incompatibili con la scheda da voi utilizzata. Nel caso di Orange Pi Zero io utilizzo l'integrato DS3231 direttamente sul circuito o utilizzando uno dei moduli facilmente reperibili in rete.
Configurazione con Orange Pi Zero e DS3231
Dopo aver collegato il modulo prescelto è necessario:
- attivare l'interfaccia I²C usando armbian-config o editando il file /boot/armbianEnv.txt
- installare i tools I2C
- verificare che il modulo venga visto correttamente con il comando i2cdetect -y 0
- compilare ed aggiungere alla configurazione i seguenti overlay:
- per rendere disponibile il modulo collegato a I²C0
/dts-v1/; /plugin/; / { compatible = "allwinner,sun4i-a10", "allwinner,sun7i-a20", "allwinner,sun8i-h3", "allwinner,sun50i-a64", "allwinner,sun50i-h5"; /* * Aliases can be used to set the external RTC as rtc0. * Needs supplying the correct path to the I2C controller RTC is connected to, * this example is for I2C0 on H2+ (TWI0 on PA11/PA12). * NOTE: setting time at boot by the kernel * may not work in some cases if the external RTC module is loaded too late */ fragment@0 { target-path = "/aliases"; __overlay__ { rtc0 = "/soc/i2c@1c2ac00/ds3231@68"; }; }; fragment@1 { target = <&i2c0>; __overlay__ { #address-cells = <1>; #size-cells = <0>; ds3231@68 { compatible = "dallas,ds3232"; reg = <0x68>; status = "okay"; }; }; }; };