4.5.19. RTC 测试
4.5.19.1. 测试原理
RTC(Real-Time Clock,实时
时间
掉电
期间:RTC 由 PMIC VRTC 独立 供电,持续 维护 硬件 时间(年月日 时分秒),与 主 系统 电源 状态 无关 系统启动
时:内核 RTC 驱动 读取 RTC 硬件 寄存器,将 硬件 时间 作为 初始值 写入 Linux 系统 时钟(CLOCK_REALTIME),完成 RTC → 系统 时钟 的 首次 同步
闹钟
软件
通过 /sys/class/rtc/rtc0/wakealarm设置闹钟(相对 时间 如 +10,或绝对 epoch) 到期
后 PMIC 内部 置位 ALARM_F,并 通过 ALARM_N 引脚 发出 中断 通知 CPU 内核
驱动 收到 中断 后 清除 wakealarm,用户 态可 通过 /proc/interrupts查看 IRQ 计数变化
4.5.19.2. 准备工作
驱动确认
确保
# dmesg | grep rtc
[ 0.589787] hpu3501 2-001c: Found hpu3501-rtc node, register rtc
[ 0.593254] hpu3501-rtc hpu3501-rtc.1.auto: registered as rtc0
[ 0.594082] hpu3501-rtc hpu3501-rtc.1.auto: setting system clock to 2026-06-10T11:34:32 UTC (1749555272)
确认
# ls /dev/rtc0
/dev/rtc0
脚本路径
测试
/app/platform_samples/chip_base_test/15_rtc_test/rtc_test.sh
脚本使用说明
rtc_test.sh 支持-h 参数
# ./rtc_test.sh --help
usage: ./rtc_test.sh <command>
commands:
info show RTC hardware information
read read hardware RTC time
setsys <datetime> set system time
example: ./rtc_test.sh setsys "2025-06-09 14:30:00"
setrtc <datetime> set RTC time (system time also updated)
example: ./rtc_test.sh setrtc "2025-06-09 14:30:00"
alarm [-s seconds] set RTC alarm and verify by interrupt count
default: 10s
examples:
./rtc_test.sh info
./rtc_test.sh read
./rtc_test.sh setsys "2025-06-09 14:30:00"
./rtc_test.sh setrtc "2025-06-09 14:30:00"
./rtc_test.sh alarm -s 10
各
| 命令 | 说明 |
|---|---|
info |
查看 RTC 硬件 |
read |
读取 |
setsys <datetime> |
仅date -s),格式"2025-06-09 14:30:00" |
setrtc <datetime> |
设置 RTC 时间(date -s + hwclock -w,系统 |
alarm [-s seconds] |
设置 RTC 闹钟 |
-h / --help |
显示 |
4.5.19.3. 测试方法
查看 RTC 信息
# ./rtc_test.sh info
========================================
RTC Hardware Info
========================================
Device node : /dev/rtc0 # RTC 设备节点
Sysfs path : /sys/class/rtc/rtc0 # sysfs 接口路径
Name : hpu3501-rtc hpu3501-rtc.1.auto # 设备名称
Date : 2025-06-09 # RTC 日期(sysfs)
Time : 14:30:00 # RTC 时间(sysfs)
Since epoch : 1749479400 sec # 自 Unix 纪元起的秒数
Wakealarm : # 闹钟设置;空表示未设置
Driver : hpu3501-rtc # 内核驱动名
Hwclock : Mon Jun 9 14:30:00 2025 0.000000 seconds # hwclock 读取的硬件 RTC 时间
System date : Mon Jun 9 14:30:00 UTC 2025 # 当前系统时间
Alarm IRQ : 46: 0 0 0 0 0 0 0 0 gpio-dwapb 1 Edge hpu3501_alarm_irq # 闹钟中断行及计数
========================================
读取 RTC 时间
# ./rtc_test.sh read
Hardware RTC: Mon Jun 9 14:30:05 2025 0.000000 seconds
设置系统时间
仅
# ./rtc_test.sh setsys "2025-06-09 14:30:00"
Set datetime : 2025-06-09 14:30:00
System time : Mon Jun 9 14:30:00 UTC 2025
PASS: system time set
设置 RTC 时间
同时
# ./rtc_test.sh setrtc "2025-06-09 14:30:00"
Set datetime : 2025-06-09 14:30:00
Hardware RTC : Mon Jun 9 14:30:00 2025 0.000000 seconds
System time : Mon Jun 9 14:30:00 UTC 2025
PASS: RTC time set
RTC 闹钟测试
设置-s 10,可
# ./rtc_test.sh alarm -s 10
========================================
RTC Alarm Test
========================================
Alarm delay : 10s
IRQ line : 46: 0 0 0 0 0 0 0 0 gpio-dwapb 1 Edge hpu3501_alarm_irq
IRQ before : 0
Set at : 2025-06-09 14:29:50
Waiting for alarm (delay 10s, max wait 15s) ...
countdown: 1s left | IRQ +1
Trigger at : 2025-06-09 14:30:00
Latency : 10.052s (set -> trigger)
Error : +0.052s
IRQ after : 1
========================================
PASS: RTC alarm interrupt detected (+1), latency 10.052s
输出
| 字 |
说明 |
|---|---|
| Alarm delay | 设置-s) |
| Waiting for alarm | delay:预计 |
| IRQ line | /proc/interrupts 中 RTC 闹钟 |
| IRQ before / after | 测试 |
| Set at | 闹钟 |
| Trigger at | 闹钟 |
| Latency | 设置 |
| Error | 耗时 |
| countdown | 距 Alarm delay 的 |
4.5.19.4. 测试指标
| 测试 |
命令 | 合格 |
|---|---|---|
| 设备 |
info |
/dev/rtc0 存在,驱动 probe 成功,IRQ 行 |
| 读 |
read |
返回 |
| 设 |
setsys |
系统 |
| 设 RTC 时间 | setrtc |
RTC 与 |
| 闹钟 | alarm |
IRQ 计数 +1,wakealarm 清空,Latency ≈ Alarm delay(Error 建议 ≤ ±1 s) |
通过