Рубрики
device \ устройства \ железо

orangepi cm4 / i2c / rtc / ds1338 / ds1307 / hwclock

Проверяем а если часы:
dmesg | grep rtc


Проверяем какие модули загружены:
lsmod 

Проверяем что у нас на шине i2c (у нас часы имеют адрес 68)
i2cdetect -y 1

Пробуем прочитать регистры:
i2cget -y 1 0x68 0x00
for reg in {0..6}; do      echo "Регистр 0x0$reg: $(i2cget -y 1 0x68 0x0$reg)";  done

Пробуем изменить вывод на 24 часа:
i2cset -y 1 0x68 0x02 0x12

Добавляем часы в систему что бы можно было с ними взаимодействовать
modprobe rtc-ds1307
echo "ds1307 0x68" > /sys/class/i2c-adapter/i2c-1/new_device
dmesg | grep rtc
hwclock -s -f /dev/rtc1

# Запись системного времени в RTC
hwclock --systohc
hwclock --systohc -f /dev/rtc1

# Чтение времени из RTC
hwclock -v 
hwclock -v -f /dev/rtc1

Для автоматического включения модуля ядра rtc-ds1307:
echo "rtc-ds1307" >> /etc/modules


python script:

apt install python3-smbus2 


cat > clock.py << "EOF"
from smbus2 import SMBus
import time

I2C_BUS = 1      # номер шины (0 или 1)
DEV_ADDR = 0x68  # адрес DES3338 на шине

with SMBus(I2C_BUS) as bus:
    # Чтение 7 байт (секунды, минуты, часы...)
    data = bus.read_i2c_block_data(DEV_ADDR, 0x00, 7)
    print(f"Время: {data[2]}:{data[1]}:{data[0]}")
EOF


python clock.py