Часов реального времени в Raspberry Pi нет. Потому что они увеличивают стоимость компьютера. Но информация о дате и времени нужна. Операционная система Raspbian выдёргивает нужные данные из глобальной сети. При выключении система пишет информацию о времени и дате в специальный файл, чтобы после перезагрузки прочитать её и снова использовать. Если есть подключение к сети, ОС сверится с глобальными серверами точного времени. Если сети нет, то будет использовать данные из файла. Но если вам нужно, чтобы часы были точными и не зависели от сетевого подключения, нужно ставить отдельный модуль часов реального времени. Бывают часы на батарейке-"таблетке", а я выбрал модуль с суперконденсатором.

Впервые с суперконденсатором я столкнулся еще в конце восьмидесятых годов, когда советские конденсаторы ёмкостью 250 мкФ были размером с гранату. Мне привезли из Японии кассетный плеер Sony с AM/FM тюнером. У тюнера была память на 18 радиостанций. Память держалась при полном разряде пальчиковых батареек и даже при полном их изъятии. Но в те годы flash памяти не было. Поэтому настройки частот можно было хранить только в оперативной памяти, но она требует питания. Как-то плеер был разобран для чистки и смазки механики. Из глубин японского чуда техники на меня равнодушно смотрел суперконденсатор диаметром с копеечную монету, высотой около 5 мм и гордой надписью "1F, Made in Japan". Тогда емкость конденсатора такого размера в одну Фараду была шокирующей. А сейчас и десятью Фарадами никого не удивишь.

У суперконденсатора по сравнению с другими источниками тока есть преимущества: он мгновенно заряжается и его не надо менять. Но есть и недостаток: небольшой ток, которым он может питать ваше устройство.

Наш модуль собран на плате площадью чуть больше одного квадратного сантиметра. С одной стороны стоит чип DS3231 производства Maxim Integrated Products. Внутри него кварцевый резонатор, часы реального времени, календарь и два будильника. Есть еще встроенный термометр и цепь термокомпенсации точности хода. Чип хорошо документирован и прост, как молоток. Интерфейс - I2C. Кроме микросхемы, на плате установлены пара резисторов с конденсатором. На обратной стороне платы - разъём и суперконденсатор. Устанавливается модуль на разъём GPIO, использует питание 3,3 V.

Raspberry Pi 2 Real-Time Clock Module

Raspberry Pi 2 Real-Time Clock Module

Raspberry Pi 2 Real-Time Clock Module

Raspberry Pi 2 Real-Time Clock Module

Обратите внимание, что модуль ставится на внутренний ряд пинов GPIO.

Raspberry Pi 2 Real-Time Clock Module

Raspberry Pi 2 Real-Time Clock Module

Ставим модуль, загружаем компьютер и... ничего не происходит. А что, собственно, вообще должно произойти? В списке устройств (/dev/) должно появиться устройство -rtc0. Но его нет.

Смотрим, что на шине I2C.

sudo i2cdetect -y 1
ничего не показывает. Вариант
sudo i2cdetect -y 0
тоже ничего не дает. Система часы не видит.

Пытаемся считать время с наших аппаратных часов.

sudo hwclock


Ничего.

А всё оказалось просто. В файле конфигурации системы нужно включить на шине GPIO интерфейс I2C и сообщить системе, что у неё теперь есть новое устройство.

Для этого в /boot/config.txt прописываем следующие строки:

dtparam=i2c_arm=on
dtparam=i2s=on
dtparam=spi=on
dtoverlay=i2c-rtc,ds3231


Сохраняем конфиг и перезагружаем машину.

После перезагрузки все заработает. Проверяем. В /dev/ появилось устройство -rtc0, а hwclock отдаст такое:

root@raspberrypi:/# hwclock
Mon 04 Jan 2016 23:31:34 MSK  -0.546987 seconds

Автор:  Дмитрий Иванов
Вернуться к блогам

Материалы по теме