
라즈베리파이4 까지는 하드웨어 시계가 없기 때문에,
전원이 꺼진 뒤에도 시간을 유지하려면 별도의 RTC 모듈을 연결해야 합니다.
저는 쿠팡에서 DS3231M + AT24C32 모듈을 구입했습니다.
여기서 조금 헷갈리는게... DS3231M과 DS3231SN은 서로 다른 제품입니다.
DS3231SN은 수정발진기를 사용하지만 DS3231M은 MEMs 공진기로 작동한다고 합니다.
둘 다 핀 배열이 동일하고 HW-084 보드에 올라갈 수 있어서 외관만으로는 구분하기 어렵습니다.
정밀한 시간 보정이 필요하다면 칩셋 모델을 정확히 확인하는게 좋을듯 합니다.
AT24C32는 32Kbit EEPROM입니다.
별도로 설정하면 쓸 수 있을것 같지만 저는 필요없으니 무시하겠습니다.
제가 산 모듈에서 주의할 점은 DS3231M 칩셋 옆에 VCC에서 BAT로 가는 저항과 다이오드 부분입니다.
아마 LIR2032 충전식 배터리를 위해 설계되었을 가능성이 있습니다.
저는 일반 CR2032 배터리를 사용할거라 조금 찾아보니 3.3V VCC에서는 문제가 없다는 말도 있더군요.
그래도 가능하다면 해당 부품은 제거하고 사용하는 편이 조금 더 안?전할듯 합니다.

모듈이 준비되었다면 핀맵을 참고하여 듀폰 점퍼케이블로 라즈베리파이와 모듈을 연결합니다.
라즈베리파이 보드간 핀맵은 모두 동일하니 이 이미지를 참고하면 됩니다.
| DS3231M | Raspberry Pi |
| VCC | 3.3V (Pin 1) |
| GND | GND (Pin 6) |
| SDA | GPIO2 (Pin 3) |
| SCL | GPIO3 (Pin 5) |
핀은 각각 이렇게 연결하면 됩니다.
32K는 32.768kHz 클럭 출력, SQW는 인터럽트 출력인데 일반 용도에서는 필요하지 않으니 넘어가겠습니다.
sudo dietpi-config
일반 라즈비안 OS라면 raspi-config를 입력합니다.



4: Advanced Options -> I2C State [Off] 순으로 찾아갑니다.
I2C State [On]으로 변경한 뒤 리부트합니다.
보통 이 과정에서 i2c-tools 패키지가 자동 설치됩니다.

sudo i2cdetect -y 1
I2C 버스를 스캔하여 RTC 모듈의 주소가 잡혔는지 확인합니다.
보통 위 사진처럼 0x68로 나옵니다.
제 경우처럼 EEPROM이 있다면 0x57도 잡히긴 하지만 이건 필요없으니 무시합니다.

sudo nano /boot/firmware/config.txt
dtoverlay=i2c-rtc,ds3231
/boot/firmware/config.txt 파일을 편집하여 제일 마지막에 dtoverlay=i2c-rtc,ds3231을 추가해줍니다.
Device Tree Overlay로 DS3231 드라이버를 잡아주는 작업입니다.
reboot
이후 한번 더 리부트합니다.

ls -alh /dev/rtc*
드라이버가 정상적으로 잡혔다면 이렇게 /dev/rtc0이 나타납니다.

sudo apt install util-linux util-linux-extra
hwclock을 사용하기 위해 util-linux와 util-linux-extra 패키지를 설치합니다.
참고: hwclock(8) - Linux Manual Page

sudo hwclock -f /dev/rtc0
hwclock으로 /dev/rtc0을 통해 RTC 모듈의 하드웨어 시간을 확인해봅니다.
제 경우는 이미 사용하던 모듈이라 시간이 정상 출력되지만,
한번도 사용하지 않은 모듈이라면 시간이 나오지 않을 수도 있습니다.

sudo apt install ntpsec-ntpdate
RTC 모듈에 정확한 시간을 저장하기 위해서 딱 한번 소프트웨어 시간을 동기화하겠습니다.
저는 시간을 동기화할 때 ntpdate를 즐겨 사용하기 때문에 ntpsec-ntpdate 패키지를 설치하겠습니다.

sudo ntpdate kr.pool.ntp.org
한국 NTP 서버에서 시간을 동기화합니다.

sudo hwclock --systohc
sudo hwclock --show
hwclock --systohc 명령으로 소프트웨어 시간을 RTC 모듈에 기록합니다.
hwclock --show으로 시간이 잘 저장되었는지 확인합니다.
RTC 모듈의 시간을 시스템으로 가져오려면 hwclock --hctosys 명령을 사용할 수 있습니다.
sudo dietpi-config
다시 dietpi-config에 진입합니다.


4: Advanced Options -> RTC mode [Emulated] 순으로 찾아갑니다.
지금까지 정상적으로 진행되었다면 RTC mode가 새롭게 추가되어 있을 것입니다.
Emulated는 하드웨어 RTC가 없는 환경에서 주로 사용합니다. 하지만 우리는 RTC 모듈이 있으니 Hardware로 변경합니다.