Edit online

RTC 配置

4 Dec 2024
Read time: 3 minute(s)

本节介绍 RTC 的参数配置。

内核配置

在 Luban 根目录下执行 make kernel-menuconfig,进入 kernel 的功能配置,按如下选择打开 RTC 驱动:

Linux
    Device Drivers
        [*] Real Time Clock
            [*] ArtInChip Soc RTC

配置 DTS 参数

RTC 驱动支持从 DTS 中配置的自定义参数如下表所示:
注: aic,alarm-io-outputaic,32k-io-output 共用一个 IO 输出,只能二选一。
1. RTC 自定义参数
参数名称 适用版本 类型 取值范围 功能说明
aic,alarm-io-output V0.1/V1.0 Boolean 有 - 1,无 - 0 是否使能 alarm 的 IO 输出功能
aic,32k-io-output V1.0 Boolean 有 - 1,无 - 0 是否使能 32K 时钟输出功能
clock-rate V1.0 Integer 3276800±3196 时钟源的实测频率值*100,用于时钟校准。

这种取值方式可提高校准的精度,使得校准可以精确到 0.03 Hz。

aic,clock-driver V1.0 Integer [0, 15] Clock 驱动能力,数值越小越省功耗

需要通过一个 Sysfs 节点 驱动能力扫描 来获得取值。

D211 配置
  • common/d211.dtsi 中的参数配置:
    rtc: rtc@19030000 {
        compatible = "artinchip,aic-rtc-v1.0";
        reg = <0x0 0x19030000 0x0 0x1000>;
        interrupts-extended = <&plic0 50 IRQ_TYPE_LEVEL_HIGH>;
        clocks = <&cmu CLK_RTC>;
        resets = <&rst RESET_RTC>;
    };
  • xxx/board.dts 中的参数配置:
    &rtc {
        aic,alarm-io-output;
        clock-rate = <3276851>;
        aic,clock-driver = <13>;
        status = "okay";
    };

配置时区

Luban SDK 提供了时区管理功能,默认配置时区为 Asia/Shanghai,即中国的 +8 时区。 按照下列流程,可以配置和管理时钟:
  1. 在 Luban 根目录下执行 make menuconfig,进入功能配置:
    System configuration
        (Asia/Shanghai) default local time
  2. 执行 Shell 命令 date,查看输出信息,判断是否有时区配置。
    • 有 “UTC” 字样表示未配置时区:
      # date
      Tue Jan  601:41:27 UTC 1970 - 未配置时区

      此时,RTC 时间和系统时间(date 命令的输出)一致。

    • 有 “CST” 字样表示已经配置了 +8 时区:
      # date
      Tue Jan  601:41:27 CST 1970 - 已配置 +8 时区
      
      配置时区后,RTC 时间和系统时间会出现一个时区差:
      系统时间=RTC 时间+时区
      以 +8 时区为例,通过 hwclock 命令 看到这个差别:
      # date  - 系统时间
      Tue Jan  601:49:53 CST 1970# hwclock  - 原始的 RTC 时间
      Mon Jan  517:49:17 19700.000000 seconds
      # hwclock  -u    - RTC 时间 + 时区,和系统时间一致
      Tue Jan  601:49:20 19700.000000 seconds
      
  3. 在打开时区的情况下,使用 hwclock -wu命令可以从系统时间同步到 RTC 时间的设置 。

    查看 RTC 时间的方式也应该加参数 -u,指示 hwclock 工具 RTC 中保存的是 UTC 时间。