一、硬件及系统信息
首先先说明硬件及系统的信息
- 核心板:周立功 A3352
- 时钟芯片:PHILIPS PCF8563
- Linux: 4.9(使用设备树(DTS)配置)
二、设备树及内核驱动配置
前一篇调试PHY芯片的文章中有提到,设备树的相关介绍文档在Documentation/devicetree 路径下,可以直接搜索PCF8563查看相关说明
搜索到的文档说明如下
可以看出RTC时钟芯片也是通过I2C来与核心板进行通讯的。
查看引脚信息并在设备树中配置RTC。周立功的评估板使用的是EPSON的RTC8025时钟芯片,我们的底板引脚没有变化,因此直接修改I2C中的配置就行了。
设备树相关配置如下。
查看dev/目录,可以看到有rtc0和rtc1
rtc0是3352内置rtc,而rtc1就是我们的pcf8563,可以使用如下指令指定rtc设备
但是报如下错误
按照字面意思,就是电压不够,无法使用
后面检查开机时的内核启动日志,也有这些输出信息
于是对电路进行了检测,也尝试了重新焊接晶振之类的,但是没有什么用。
终于,在对rtc1尝试使用写入命令后
居然生效了,而且关机后重新再使用 -f 参数指定rtc1后,还可以正常读取时间。
原来外部的rtc芯片需要先写入一次才能进行读取,否则报错电压过低日期不可靠。
但是这个错误的误导性太强,导致一开始完全没有找对方向,最后还是通过告科学找到问题所在。
现在启动日志也正常了
目前剩余的问题就是,如何屏蔽掉rtc0,或者将我们的外部rtc芯片配置为rtc0,这样就可以正常使用了。因为后面有一句setting system clock to 2000-01-01 00:00:01 UTC (946684801),很明显还是使用的内部时钟。
把DTS翻烂了都没有找到哪里可以设置,快要绝望的时候,突然想到如果在内核中把自带的rtc关掉就行了。
结果一进入到menu config,原来在这里面可以直接设置使用哪一个rtc,之前都没看到。
按Y进入输入框,改成rtc1就行了。
当然,如果要关掉板载rtc,也可以直接把TI OMAP Real Time Clock关掉。
如果这样改的话,上面的rtc1也要换回rtc0。
最后,由于程序中配置时使用的命令是rtc0,因此最好的解决方案还是关闭板载的内置RTC。如果修改为rtc1,那我们的命令需要每次加上对rtc1的指定。
Comments