You are on page 1of 9

Đồng bộ thời gian

cho RTC qua SNTP


AirSense Idf

Nguyễn Đoàn Khánh


SPARC Lab –SET- HUST
I, Vấn đề hiện tại

2
I, Vấn đề hiện tại
Hệ thống hiện tại từ khi khởi tạo đến khi chạy chỉ đọc DS3231 mà
chưa đặt thời gian cho RTC.
Hoàn toàn có thể đọc sai thời gian vì RTC có thể đang lưu thời gian
không đúng
=> Giải pháp là lúc khởi tạo sẽ lấy thời gian từ SNTP và lưu vào
DS3231.

3
II, Giải pháp

4
II, Giải pháp với SNTP
1. SNTP là gì ?
SNTP là viết tắt của Simple Network Time Protocol, là một giao thức mạng đơn giản được sử dụng để
đồng bộ thời gian trên các mạng máy tính. SNTP được phát triển dựa trên giao thức Network Time
Protocol (NTP) và thường được sử dụng trong các hệ thống mà độ chính xác về thời gian không quan
trọng lắm.
Giao thức SNTP cho phép các máy tính trong mạng lấy thời gian từ một nguồn thời gian chính xác
như máy chủ thời gian (time server) và đồng bộ hóa thời gian của chúng. Điều này rất hữu ích trong
việc đảm bảo rằng các thiết bị trong mạng hoạt động đồng bộ và thực hiện các công việc theo đúng
thời gian.
Giao thức SNTP có thể hoạt động trên các mạng IP và được thiết kế để đơn giản hóa so với NTP,
giảm bớt các tính năng phức tạp mà không cần thiết trong các môi trường không đòi hỏi độ chính xác
cao về thời gian.

5
II, Giải pháp với SNTP
Tạo task stnpGetTime_task chạy khi hệ thống khởi tạo và bắt được kết nối Wifi lần đầu tiên.
Task chạy 1 lần duy nhất. Hàm sntp_setTime() lấy thời gian trên NTP và lưu vào timeInfo. timeInfo là 1
struct tm chứa nhiều biến như tm_year, tm_mon, … chỉ các thông số của thời gian.
Sau khi đã lấy được thời gian, ds3231_setTime được gọi để lưu thời gian từ timeInfo vào RTC.

6
II, Giải pháp với SNTP
Tuy nhiên, hàm sntp_setTime() lưu thời gian vào timeInfo với 1 số đặc điểm như sau:
- Tháng bị trừ 1 (VD tháng 6, nhưng timeInfo.tm_mon sẽ có giá trị là 5).
- Năm được tính từ 1900 (VD năm 2023 thì timeInfo.tm_year = 123).
Vì vậy, các hàm set và get time trong DS3231Time.c nên được sửa lại 1 chút:

7
II, Giải pháp với SNTP

Khi sử dụng đồng bộ thời gian từ SNTP:


- Khi đọc (ds3231_get_time()) thì số tháng được +1
- Khi đặt (ds3231_set_time()) thì số năm +1900

8
Thank you for watching

You might also like