Я имею:
- Raspberry Pi с малиной 2015-05-05
- ds1307 подключен (это плата Adafruit, подтягивающие резисторы не установлены).
Как я:
- настроить драйверы
- убедиться, что Pi на самом деле использует время RTC при запуске?
На самом деле, я сделал первую часть, насколько я могу судить, но со второй не повезло. Большая часть информации, включая инструкции Adafruit, устарела из-за этого: https://www.raspberrypi.org/forums/viewtopic.php?t=97314
Итак, первый шаг: вы включаете I2c и драйверы в raspi-config, добавляете dtoverlay=i2c-rtc,ds1307
в конец /boot/config.txt, и у вас есть драйверы, и hwclock
, очевидно , работает на меня (не могу запустить i2cdetect, более об этом позже).
Теперь вам нужно удалить fake-hwclock и настроить его так, чтобы он действительно читал rtc при запуске. Я пытался следовать этому совету - который в значительной степени согласуется с другими вещами, которые я видел, и очень недавно - https://www.raspberrypi.org/forums/viewtopic.php?p=842661#p842661
(это для другого RTC, но я только следую второй части об удалении fake-hwclock и так далее).
Но не повезло, и на моем пи не существует «строк, которые нужно закомментировать». Мой пи приходит с 1 января 1970 г. 00:00 и hwclock -r
говорит, что RTC поврежден. Даже если я не выключил питание после установки RTC и перезагрузки pi, похоже, он был поврежден при запуске.
Я также не смог запустить i2cdetect вообще. Он жалуется, что устройства / dev / i2c (что-то) не существуют - и действительно они не ...
Промежуточное обновление
Хорошо, я установил, что:
- коррупция только из информации о времени / дате. Если я использую i2cset для заполнения nvram шаблоном, эта информация не изменяется при перезагрузке, но год переходит к 0x66
- Если я удалю
,ds1307
из строкиdtoverlay=i2c-rtc,ds1307
в config.txt, то система будет работать без повреждения RTC! Который поддерживает идею, что сам драйвер портит данные. Я посмотрел на код драйвера, и он проходит через время и меняет вещи, которые ему не нравятся (например, он меняет 12-часовой формат на 24-часовой). Итак, возможно, проблема в том, что драйвер установлен в то время, когда порт I2C фактически не готов к работе (возможно, из-за того, что часы не готовы?) - Если я сделаю это после запуска:
sudo sh -c 'echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device'
это приведет к загрузке драйвера rtc_ds1307 и появлению / dev / rtc0. И время все еще в порядке. И так, что может быть использовано в качестве основы для модификации сценариев инициализации - Еще одна забавная деталь: если я использую
hwclock -s
в скрипте сразу после записи в /sys/..../new_device, он не работает. Там должно бытьsleep 0.5
или что-то между.
Так что, похоже, у меня теперь есть система, которую можно выключить и запустить, и у нее будет правильное время - я скоро напишу это правильно.
dtparam=i2c1=on
в config.txt, как работал для micksulley в январе raspberrypi.org/forums/viewtopic.php?f=28&t=97639 - Перезагрузка. Все еще нет / dev / i2c *, все еще нет i2cdetect.
sudo invoke-rc.d hwclock.sh start
ничего не делает, оно выходит, потому что /run/udev
существует. Но sudo invoke-rc.d hwclock.sh show
читает часы и sudo invoke-rc.d hwclock.sh stop
копирует системные часы на аппаратные часы.