RTC的调试-1

设计了一款基于国产CPU的板子,它的RTC采用国产的RTC芯片(与DS1339一样),接口为I2C,系统为某国产操作系统,上电后RTC一直不工作,从软硬件一起排查原因,硬件方面排查I2C总线的波形,在操作系统上安装了I2CTooLs这个工具(网站搜索有,国产系统跟供应商要),通过命令发出,i2cdetect -l能看到i2c总线数,可以和设备树对比(/sys/bus/devices/i2c/),通过i2cdetect -r -y  0这个命令查看0总线上的从设备,当有设备时会出现UU/地址(UU代表被系统驱动调用)。

本次RTC芯片地址为D0,放在I2C总线为0x68.测试过程中i2cdetect -r -y 一直显示XX,找不到设备,用示波器查看I2C总线,看到SDA波形为01101000010,去掉起始,第八位的读写位,第九位为1,即从设备not ack,不明原因,查看原理图是否没有上拉并测量,符合要求。查看国产芯片资料,并将国产器件更换成DS1339,一样不成功,更换晶体32.768K,查看芯片CL为6pf,ESR不高于70k,(如果是单片机,需要考虑计算公式),更换补偿电容,无效果,更换RTC电池(确定比启动电压高),困惑好长时间,不经意突然发现SCL和SDA在原理图上画反了,再i2cdetect -r -y地址0X68中显示UU,安装驱动,date -s设置,hwclock -w同步硬件,提示超时,i2cdump -f -y 0 0x68查看寄存器,寄存器有数据,部分数据有错,联系厂家更换驱动以及从linux上单独提出DS1307.c(insmod)各种方法,发现写寄存器的数据对了,但是hwclock -w仍提示超时,hwclock -r提示时间超出范围,多次敲打竟然成功,搞定。

后续开机,date时间恢复初始值,电池降到1.8V,更换晶体和DS1339,补焊,上面过程再来一遍。与某宝购买DS1307模块对比,秒针寄存器值不动,最终判断晶体不起振,各种晶体都试了一遍依然没有效果,无意中用酒精清洗晶体和X1X2之间的一堆助焊接松香剂,发现hwclock -w操作成功,再查看DS1339资料,发现有理论支持,芯片引脚上的助焊剂影响CL值,导致晶体不能准确的起振。

所以焊接完要一定要清理!!!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值