我使用phytec的开发工具包phycore i.MX6 som换成了自己的主板。som和devkit的用户手册都可以在phytec's page上找到。现在,我想配置rtc来保存重启和断电时的时间。
电池(在我的例子中是超级电池)连接到phycore i.MX6 som (page 10)的VDD_BAT引脚上。internal PMIC是通过i2c总线连接的da9062,在som dtsi文件中配置为rtc1。
imx6qdl-phytec-phycore-som.dtsi:
...
aliases {
rtc1 = &da9062_rtc;
};
...
&i2c3 {
pmic@58 {
da9062_rtc: rtc {
compatible = "dlg,da9062-rtc";
};
};
};这个文件我根本没碰过。
接下来,我告诉内核从rtc1而不是rtc0获取他的hwclock和systime时间:
CONFIG_RTC_HCTOSYS_DEVICE="rtc1"
CONFIG_RTC_SYSTOHC_DEVICE="rtc1"据我所知,驱动程序正在正确加载:
dmesg | grep rtc
[ 2.489836] da9063-rtc da9062-rtc: rtc core: registered da9063-rtc as rtc1
[ 2.499713] snvs_rtc 20cc000.snvs:snvs-rtc-lp: rtc core: registered 20cc000.snvs:snvs-rtc-lp as rtc2
[ 3.260348] da9063-rtc da9062-rtc: setting system clock to 2000-01-01 02:37:55 UTC (946694275)和
cat /sys/class/rtc/rtc1/name
da9063-rtc da9062-rtc现在,我可以通过date设置时间,并通过
hwclock --systohc。
在重新引导系统和hwclock之后,将其设置为先前设置的日期,这样就可以了。切断电源后,时钟重置。
我已经测量了超级电容的电压,大约是220毫伏。da9062的datasheet告诉我,芯片有一个需要配置的电池调节器(表127: BBAT_CONT (0x0C5))。
就我对内核/ rtc子系统的理解而言,rtc的驱动程序应该负责电池的充电,或者提供一个用户空间接口,这样我就可以自己做了。但我在这个话题上找不到任何东西。
我正在使用yocto为我的主板构建内核/镜像。
我是不是遗漏了什么,或者我需要自己给司机补上补丁才能给超级跑车充电?也许在设备树中有一个选项来设置充电器的充电电压和电流?
非常感谢您的意见和建议,谢谢。
发布于 2020-02-14 01:25:17
显然,驱动程序不支持对电池/超级电容进行开箱即用的充电,并且它具有对i2c设备地址的独占访问权,这阻止了用户空间应用程序访问该设备。
我对这个问题的解决方案是在驱动程序接管之前设置这些值:因为这个i2c总线已经在我的barebox设备树中配置了,所以我可以在引导内核之前访问它(前提是在menuconfig中启用了i2c子系统的情况下编译barebox )。在这里,我可以运行一个脚本来设置BBAT和PD寄存器,以启用对超级大写进行充电。
不过,更干净的解决方案是扩展驱动程序并为此功能提供用户空间接口。
我没有研究的另一种可能的解决方案是检查驱动程序是否可以编译为模块,这样我就可以卸载模块,设置寄存器,然后再次加载它。
https://stackoverflow.com/questions/60111324
复制相似问题