Toradex Colibri i.MX7D平台PCF85063A RTC挂起恢复后异常求助
PCF85063A RTC挂起恢复后失效及禁用snvs_rtc启动失败问题
硬件与软件环境
- 处理器:Toradex Colibri i.MX7D 1 GB V1.1A
- 内核版本:5.4.161-5.6.0-devel+git.0f0011824921
- 外接RTC:PCF85063A(通过I2C4连接)
当前配置
DTS配置
&i2c4 { status = "okay"; /* PCF85063A real time clock on carrier board */ pcf_rtc: pcf85063a@51 { compatible = "nxp,pcf85063a"; reg = <0x51>; interrupt-parent = <&gpio1>; interrupts = <1 IRQ_TYPE_EDGE_FALLING>; wakeup-source; }; };
内核配置
CONFIG_RTC_DRV_PCF85063=y
异常现象
系统启动后:
- PCF85063A注册为
rtc0,snvs_rtc注册为rtc1,时钟设置功能正常 - dmesg存在警告:唤醒IRQ已初始化,且有
rtc rtc0: failed to enable irq wake提示
- PCF85063A注册为
挂起唤醒后:
- 无法设置新闹钟,提示
Permission denied - 用
i2cdump读取PCF85063A寄存器全为XX - dmesg显示
irq 66无人处理,最终被禁用
- 无法设置新闹钟,提示
尝试禁用snvs_rtc:
- 在DTS中设置snvs_rtc的
status="disabled"后,系统启动卡壳,无法正常进入系统
- 在DTS中设置snvs_rtc的
问题诉求
- 解决PCF85063A RTC挂起恢复后无法正常工作的问题
- 实现正确禁用内部snvs_rtc的方法
解决建议
针对PCF85063A挂起唤醒失效问题
排查IRQ唤醒配置
启动时的failed to enable irq wake提示说明GPIO1_1的唤醒功能未正确生效。需确认:- 该GPIO未被其他设备占用,且硬件上INT脚已正确上拉(PCF85063A的INT为开漏输出)
- 在DTS中为该GPIO添加明确的唤醒属性验证,比如补充
gpio-active-low(若硬件为低电平触发)
修复I2C总线异常
挂起后寄存器全为XX说明I2C总线可能在挂起过程中进入死锁状态:- 在
&i2c4节点添加pm-no-runtime-suspend属性,禁止I2C控制器的运行时挂起,避免总线在休眠时断电 - 检查PCF85063A的硬件供电,确保休眠阶段有备用电源维持工作
- 在
修复中断注册问题
irq 66无人处理说明驱动恢复时未重新注册中断:- 查看PCF85063A驱动的
resume函数实现,确认是否遗漏了中断重新初始化逻辑 - 尝试升级到Toradex官方更新的同分支内核,修复已知的驱动休眠恢复bug
- 查看PCF85063A驱动的
针对禁用snvs_rtc启动失败问题
替代方案:优先使用外接RTC
直接禁用snvs_rtc会破坏启动依赖(系统早期启动可能需要它提供时间基准),可通过内核参数规避:- 添加内核参数
rtc_hctosys_dev=rtc0,让系统启动时优先读取PCF85063A的时间作为系统时钟 - 保留snvs_rtc的启用状态,但通过
hwclock命令将PCF85063A设为默认时钟源
- 添加内核参数
强制禁用的正确步骤
若必须禁用snvs_rtc:- 先修改U-Boot配置,确保启动阶段不依赖snvs_rtc获取时间
- 在DTS中禁用snvs_rtc的同时,修改系统启动脚本,移除所有涉及snvs_rtc的初始化步骤
- 参考Toradex官方BSP文档,确认该内核版本下是否有官方支持的禁用流程
内容的提问来源于stack exchange,提问作者Rob123
相关产品推荐
相关产品推荐

