RTC读值总为0xFF?可能是这些硬件设计疏漏!

RTC走时误差大、不返回ACK的解决方法

1、 QRTC走时误差大是什么原因?

1.1 看参时间是不是准。如果使用电脑本地时间作为走时参考时间,用网络校时工About TimeChronograph对电脑进行校时后再比较

1.2 后备电池电量过低导致时钟走时变慢,如果使用频率计或者时钟测试仪测试输出频率计算走时还不够完善,可以查1分钟中断,或者直接不断电走时测试实际误差

1.3 SD24系列SD2068SD2058还可以12H寄存器是否已清零此寄存器为数字精度调整寄存器,调整范围达±189ppm±16.3s/d)。

1.4 如果使用的SD24系列SD22系列SD2058SD2068SD8568等不带温补芯片,环境温度很高或者很低时对走时精度的影响会比较大,一天10秒都是有可能的。

 

2、 Q:为什RTC一直都不返ACK,读出来的数值都0xFF

2.1 对于带内置电池RTC,检VDD是否小3.3VSD2405系列3.3v版本5v版本,检查是否型号选择错误;无内置电池的SD2068请对RTC芯片手册中的应用参考电路3.3V5V应用电路是不一样的)。

2.2 SDA端口没有加上拉电阻(一般2-10K或者设置为了推挽输出,建议使用开漏输出

2.3 SCLSDA端口定义反了此问题需要用户仔细核对规格书引脚定义与原理图及代码中引脚引用是否正确对应。

2.4 IO口被复用SCL端口IIC整个操作过程中只有一个方向始终为输入状态,推荐SCL使用推挽输出即可SDAMCU在作为输出作用时设置为开漏输出,作为输入作用时设置为上拉输入。

2.5 器件地址没有设置正确,比如我SD20XX/SD30XX系列器件地址0110 010X51单片机或STM32中一般写0x64Linux驱动中器件地址写0x32SD8568器件地址1010 001X51单片机或STM32中一般写0xA2Linux驱动中器件地址写0x51。)。我SD8939器件地址1101 000X51单片机或STM32中一般写0xD0Linux驱动中器件地址写0x68。)。

2.6 I2C总线上有其它的器件RTC的器件地址冲突。

2.7 RTC已经损坏,可以多测试几颗芯片,或者交叉验证一下,以此判断出现此问题是个例零星问题还是全部都是一样现象,然后再依据不同结果分析可能原因。

2.8 I2C的通信程序的问题可能涉及到单片机时序不规范、总线过快、等。一般解决此类问题需要示波器或者逻辑分析仪抓IIC通信波形辅助分析,建议可以直接与我司技术人员联系。

2025年1月18日 15:14