Orange Pi Zero2开发板连接RTC时钟模块的使用方法
-
-
行走的小小派
- LV1工程师
-
| 2021-03-10 18:18:17
- 浏览量 316
- 回复:0
Orange Pi Zero2开发板采用全志H616四核 64位处理器,支持安卓10和Linux操作系统,512MB/1GB 内存可选,集成千兆以太网、蓝牙5.0+双频WiFi、USB2.0、HDMI输出等功能端口。板上还有26pin扩展口,丰富了产品的功能端口。本文要介绍的RTC时钟模块连接,就是通过连接板上的26pin扩展板实现。
![](https://cf04.ickimg.com/bbsimages/202103/ffc09475c67aa5dcefabdaae2691e343.jpg)
zero2开发板在Linux下如需开启自动同步时间,目前是通过网络实现的,因为板子默认没有RTC。如果需要不联网实现时间同步,需要外接RTC模块。下面以香橙派DS1307 RTC 时钟模块为例,说明下时钟模块的连接使用方法:
1) 香橙派 DS1307 RTC 时钟模块如下图所示,使用 i2c 接口和开发板通信,i2c 设备 地址为 0x68。RTC 模块默认不配电池,使用前需要准备一块纽扣电池
![](https://cf04.ickimg.com/bbsimages/202103/3e1054523f27f6de858e09f232925a61.png)
2) 首先将 RTC 模块接到开发板的 26pin 上,接线方式如下所示
![](https://cf04.ickimg.com/bbsimages/202103/0d8ea6a5e7491fe91b4abbb2e09e03dc.png)
3) 接好 RTC 模块后,先用 i2cdetect 命令查看下是否能检测到 RTC 模块的设备地址
![](https://cf04.ickimg.com/bbsimages/202103/abf9bc70929c7d07a88ce68302c1a36b.png)
4) RTC 模块使用的 ds1307 型号的芯片,首先需要确认 RTC_DRV_DS1307 内核配 置已经打开
![](https://cf04.ickimg.com/bbsimages/202103/e629e4575d8e24d1fc7fc95eebf1eeea.png)
5) 确认内核配置 OK 口,还需要在 dts 中添加 rtc-ds1307 模块的配置。最新版本的 linux 系统中预装了一个名为 orangepi-add-overlay 的脚本,通过这个脚本我们可以 使用 DT overlay 来动态的添加某些 dts 中没有的功能。首先编写 rtc-ds1307 模块的 dts 文件,内容如下所示
![](https://cf04.ickimg.com/bbsimages/202103/585d8e0934fc50de2738bd2b248b4853.png)
a. 然后使用 orangepi-add-overlay 将 i2c-ds1307.dts 编译成 i2c-ds1307.dtbo,并 且设置好相关的启动变量
![](https://cf04.ickimg.com/bbsimages/202103/0343a150297457d2ee80d79b6e22c01f.png)
b. i2c-ds1307.dtbo 会被复制到/boot/overlay-user 中,运行完 orangepi-add-overlay 后可以查看下/boot/overlay-user 中是否有 i2c-ds1307.dtbo 这个文件
![](https://cf04.ickimg.com/bbsimages/202103/0e781317be2da1a95cf8e9812eb846bd.png)
c. orangepi-add-overlay 还会在/boot/orangepiEnv 中添加 user_overlays 变量, 并设置值为 i2c-ssd1307
![](https://cf04.ickimg.com/bbsimages/202103/daedb956089faa23191acec64fc1fdcc.png)
d. 然后重启 linux 系统,启动时,在 u-boot 的 log 中可以看到 DT overlay 相关的输出
![](https://cf04.ickimg.com/bbsimages/202103/ad3b8cfc3e45cefb0f48bd7a45d0ebb1.png)
6) 重启后,从 dmesg 输出的 log 中可看到 ds1307 模块的加载信息,ds1307 对应的设备节点为 rtc0
![](https://cf04.ickimg.com/bbsimages/202103/3dd05888dbf3ff59846fc18b55c5b811.png)
7) linux 系统启动时,如果开发板连接了网络,linux 系统会通过网络自动同步系统 时间为正确的时间,linux 系统默认时间为世界标准时间 UTC,在中国,需要将时区 修改为 Asia/Shanghai,使用 data 命令获取到的时间才正确,方法如下
a. 执行下面的命令
![](https://cf04.ickimg.com/bbsimages/202103/d8191ff6ba0e19e6308ba9bd9c16acb5.png)
b. 然后选择地理区域为 Asia
![](https://cf04.ickimg.com/bbsimages/202103/d64b9b1236b43253fed3414cdd7a1f3a.png)
c. 再选择时区为 Shanghai
![](https://cf04.ickimg.com/bbsimages/202103/f25deeaf44586d948b1edf221d7bf59b.png)
d. 配置完后再使用 date 命令查看时间就会正常了
![](https://cf04.ickimg.com/bbsimages/202103/00bf8e8d0d56cf7ad032b5383ac92fc5.png)
8) 如果系统当前时间不正确,首先请连接网络,然后使用下面的命令同步时间,这 里之所以先要将系统时间设置正确,是为了后面同步 RTC 模块的时间做准备
![](https://cf04.ickimg.com/bbsimages/202103/28f3e31f4fa3bfacc03cc886915b805e.png)
9) 查看 RTC 模块当前时间的命令如下所示
![](https://cf04.ickimg.com/bbsimages/202103/83aae238161e3c38903055704a64ab9c.png)
10) 第一次使用 RTC 模块读取到的时间肯定是不对的,可以通过下面的命令将系统 当前的时间同步到 RTC 模块,同步前,需要保证系统当前的时间是正确的
![](https://cf04.ickimg.com/bbsimages/202103/3f8d3aabf3b49c4d9216129585bff193.png)
11) 此时就可以断开开发板所有的网络连接,然后等待几分钟,再重启系统,然后 查看系统时间就会发现即使没有网络,系统的时间也是正确的