T113-S3,外部 RTC 问题排查梳理

一、问题现象
-
内核启动时
rtc-pcf8563probe 失败 -
i2cdetect -y 2扫描无任何地址响应 -
系统只有内部 RTC (
/dev/rtc0),没有外部 RTC (/dev/rtc1)
二、软件层面排查
2.1 检查启动日志
[ 2.808614] sunxi:i2c_sunxi@2502800.twi[ERR]: SLA+W has been transmitted; ACK not received [ 2.817833] sunxi:i2c_sunxi@2502800.twi[ERR]: engine mode: TWI BUS error state is 0x20 [ 2.828569] sunxi:i2c_sunxi@2502800.twi[ERR]: engine-mode: xfer failed(dev addr:0x51) [ 2.837338] rtc-pcf8563 2-0051: pcf8563_write_block_data: err=-22 addr=0e, data=03 [ 2.845802] rtc-pcf8563 2-0051: pcf8563_probe: write error [ 2.851990] rtc-pcf8563: probe of 2-0051 failed with error -5
结论:I2C 控制器发送了地址,但 AT8563 没有 ACK 响应。
2.2 检查设备树配置
确认 &twi2 节点:
-
status = "okay"✓ -
pinctrl-0 = <&twi2_pins_a>(PG6/PG7) ✓ -
clock-frequency = <400000>✓ -
pcf8563@51节点正确 ✓
尝试修改:twi_drv_used = <0>(PIO 模式,禁用 DMA)
2.3 检查引脚复用寄存器
起始地址为

偏移量为:0x0120

将范围写入dump文件夹,随后查看寄存器
echo 0x02000120 > /sys/class/sunxi_dump/dump; cat /sys/class/sunxi_dump/dump # 结果:0x33222222

PG6/PG7 = 0x3 (TWI2),寄存器配置正确。
2.4 检查 pinmux 状态
cat /sys/kernel/debug/pinctrl/pio/pinmux-pins | grep -E "PG[67]"# pin 198 (PG6): device 2502800.twi function gpio_in group PG6# pin 199 (PG7): device 2502800.twi function gpio_in group PG7
发现:function 显示为 gpio_in,而非 twi2。怀疑 pinctrl 未正确切换。
2.5 手动修改寄存器验证
echo 0x02000120 0x00332222 > /sys/class/sunxi_dump/write
修改后寄存器正确,但 I2C 仍然无 ACK。
结论:软件配置基本正确,问题可能不在软件。
三、硬件层面排查
3.1 测量上拉电阻
量 R469 (10KΩ 上拉):
-
靠近 VCC-IO 端 = 3.3V ✓
-
靠近 EXT-RTC-SDA 端 = 3.3V ✓
上拉正常。
3.2 测量供电
量 AT8563 (U43) Pin 8 (VDD):
-
电压正常 ✓
供电正常。
3.3 示波器抓波形
表格
| 信号 | 现象 |
| SCL | 无波形 |
| SDA | 无波形 |
关键发现:SCL 没有时钟信号传到 AT8563!
3.4 万用表测通断
重点检查 PG6 → EXTRTC-SCK 路径:
表格
| 测试点 | 结果 |
| R880 (0Ω) 两端 | 不通! |
定位根因:R880 虚焊/开路,导致 SCL 信号断路。
3.5 修复验证
-
重新焊接 R880
-
再测通断 → 正常
-
重启开发板
-
验证结果:
# ls /dev/rtc* /dev/rtc /dev/rtc0 /dev/rtc1 # cat /sys/class/rtc/rtc1/name rtc-pcf8563 2-0051 # hwclock -f /dev/rtc1 -w# hwclock -f /dev/rtc1 Wed Jul 8 15:20:16 2026 0.000000 seconds
外部 RTC 正常工作!
四、根因分析
R880 (0Ω 跳线电阻) 虚焊 ↓ PG6 (TWI2-SCK) 信号断路 ↓ AT8563 收不到 SCL 时钟 ↓ 无法响应 I2C 地址 (无 ACK) ↓ pcf8563 probe 失败 ↓ 无 /dev/rtc1 节点
五、排查流程图
开始 -> 检查启动日志 -> 发现 I2C ACK 错误 -> 检查设备树配置 -> 确认软件配置正确-> 检查引脚寄存器 -> 0x33222222->配置正确 -> 检查 pinmux 状态 -> function 显示 gpio_in(疑点)-> 手动改寄存器验证 ->仍无 ACK,排除纯软件问题-> 测量上拉/供电 -> 正常-> 示波器抓波形 -> SCL 无波形-> 万用表测通断 -> R880 不通->定位根因-> 重新焊接 R880 -> 验证修复结果 -> /dev/rtc1 出现->工作正常
六、经验教训
表格
| 要点 | 说明 |
| 0Ω 电阻容易虚焊 | 量产时需重点检查 |
| 示波器量信号要量两端 | 不能只看芯片侧,要看设备侧 |
| I2C 无 ACK 不一定是地址问题 | 可能是时钟/数据线断路 |
| 软件排查到底后及时转硬件 | 避免在软件层面过度纠结 |
| 通断测试是硬件调试基础 | 比量电压更能定位断路问题 |
七、最终设备树配置
&twi2 {
clock-frequency = <400000>;
pinctrl-0 = <&twi2_pins_a>;
pinctrl-1 = <&twi2_pins_b>;
pinctrl-names = "default", "sleep";
twi_drv_used = <0>;
// 使用 PIO 模式(可尝试恢复为 <1> 以启用 DMA 模式)
no_suspend = <1>; status = "okay";
pcf8563@51 { status = "okay"; compatible = "nxp,pcf8563";
reg = <0x51>;
};
};
更多推荐


所有评论(0)