目的 基于OpenWrt实现RTC实时时钟
背景 硬件设计中将GPIO1,GPIO2作为I2C接口使用,挂了RTC外设,并且该GPIO口被JTAG占用。因此需要先将GPIO1,2引脚设置为GPIO口,通过i2c-gpio组件模拟I2C总线实现RTC驱动。
步骤1 I2C驱动
- https://openwrt.org/docs/guide-user/hardware/turnoff.jtag.to.gpio
参考官网提供的How to turnoff JTAG to free GPIO方法,碰到问题了,
https://forum.openwrt.org/t/dev-mem-problem-when-turn-off-jtag-to-free-gpio/43441
还是理解不够深入,这种注释掉一个宏的方式不可取。 - 调用该脚本并看到打印后,即将引脚配置为GPIO功能;
- Make menuconfig:
Kernel modules —> I2C support —>
文章图片
- Make kernel_menuconfig
Device Drivers —> I2C support —>
文章图片
文章图片
- Make kernel_menuconfig增加内核对RTC模块的支持
–>Device Drivers
–>Real Time Clock
+Set the RTC time based on NTP synchronization
+/sys/class/rtc/rtcN (sysfs)
+/proc/driver/rtc (procfs for rtcN)
+/dev/rtcN (character devices)
+Philips PCF8563/Epson RTC8564
+tips:
-Set system time from RTC on startup and resume
不启用此功能,为了避免以下报错:
[ 2.960000] drivers/rtc/hctosys.c: unable to open rtc device (rtc0) - Make menuconfig增加i2c设备支持
–>kernel modules
–>I2C support
+kmod-i2c-core
+algo-bit,i2c-gpio;
+kmod-i2c-gpio-custom
并且添加测试工具
–>Utilities
+dmesg 查看内核日志
+hwclock 时钟管理
+i2c-tools i2c工具集,检测、读取i2c设备数据 - 执行脚本
insmod i2c-gpio-custom bus0=0,1,2
echo pcf8563 0x51 > /sys/class/i2c-dev/i2c-0/device/new_device - 系统运行后,在dev目录存在文件gpiochip0 gpiochip1 i2c-0