i.MX6 PMIC 中 RTC 备用电池的稳压器配置

Regulator configuration for RTC backup battery in i.MX6 PMIC

我正在将 phycore i.MX6 som 从 phytec 的开发套件切换到自己的开发板。可以在 phytec's page 上找到 som 和 devkit 的用户手册。现在我想配置 rtc 以在重启和关机期间保持时间。

电池(在我的例子中是超级电容)作为 rtc1 连接到 phycore i.MX6 som (page 10). The internal PMIC is the da9062 connected via the i2c bus which is configured in the som dtsi 文件的 VDD_BAT 引脚。

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

现在,我可以通过日期设置时间并通过

将其传输到hwclock
hwclock --systohc

.

重新启动系统后,hwclock 设置为之前设置的日期,这很好。切断电源后,时钟会重置。

我测量了超级电容的电压,大约是220mV。 da9062 的 datasheet 告诉我该芯片确实有一个需要配置的电池调节器 (Table 127: BBAT_CONT (0x0C5)).

据我了解 kernel/rtc 子系统,rtc 的驱动程序应该负责电池充电或提供用户空间接口以便我自己完成。但是我找不到关于这个主题的任何内容。

我正在使用 yocto 为我的开发板构建 kernel/image。

我是否遗漏了什么或者我是否需要自己修补驱动程序才能为超级电容充电?也许设备树中有一个选项可以设置充电帽的充电电压和电流?

感谢任何想法和建议,谢谢。

显然,驱动程序不支持开箱即用的 battery/supercap 充电,并且它对 i2c 设备地址具有独占访问权限,这会阻止用户空间应用程序访问设备。

我对这个问题的解决方案是在驱动程序接管之前设置这些值: 由于这个 i2c 总线已经在我的 barebox devicetree 中配置,我可以在启动内核之前访问它(前提是 barebox 是在 menuconfig 中启用 i2c 子系统的情况下编译的)。在这里,我可以 运行 设置 BBAT 和 PD 寄存器以启用超级电容充电的脚本。

不过,更简洁的解决方案是扩展驱动程序并为此功能提供用户空间界面。

另一种我没有调查的可能解决方案是检查驱动程序是否可以编译为模块,这样我就可以卸载模块,设置寄存器并再次加载它。