时间乱码五重奏:从VBAT悬空到SCL复用全链路排雷指南
RTC读出时间跳秒、乱码的解决方法
1. Q:为什么我用仿真器单步调试检测不到RTC返回ACK呢?
A:因为RTC的I2C总线有0.5s超时自动复位的功能,在调试时打断点必须打到Stop信号的后面,如果是Stop之前会触发0.5s通信超时功能,从而看不到完整IIC信号。
2. Q:为什么从RTC读出来时间有跳秒的现象。如9秒直接跳到16秒,而且大于89才变成0?
A:RTC采用BCD码计时,BCD码的用0x10表示十进制的10秒,用十进制来看就是会看到从9跳到16(0x10=16)。
3. Q:为什么有时候我读到的时间是乱码?
A:1. RTC已完全掉电,再上电读到的时间是随机数(可能是乱码,随机值范围是0-FF,所以用户显示出来时间就像是乱码一样。)。
2. 使用SD2068或SD2403的时候VBAT脚悬空也可能会读到乱码,因为SD2068与SD2403需要遵循VBAT电压低于VDD电压0.3v以上,不然可能IIC通信进入VBAT模式,导致无法读到正确时间。
3. 总速度太快或通信程序的时序中有不符合规范的地方,也可以尝试把IO口工作模式SCL设置为推挽输出,SDA设置为开漏输出。
4. SCL、SDA的IO口被复用。
5. 芯片的SDA端口没有加上拉电阻。
4. Q:为什么小时会跑到25点、26点……?
A:没有正确设置12/24小时制。在小时寄存器(02H)的最高位为设置12/24小时制。
5. Q:为什么小时显示90点、91点……?
A:读出小时数据后没有把最高位(12/24小时控制位)屏蔽掉。
6. Q:时钟芯片产生中断输出的时候的INT脚是高电平还是低电平?
A:INT端口是一个N沟道开路输出口,使用时通常接一个上拉电阻。没有中断输出的时候是高电平,产生中断后变为低电平。