基于BQ40Z50芯片的寄存器读写

     前两天项目需要实现以下功能:使用单片机读取电池电量信息,电池管理芯片为TI的BQ40Z50,当时lian连续调试了3天才完成,各种原因无法一一诉说,今天闲来无事总结下,供自己以后查阅。

    单片机使用的STM32F207,使用模拟I2C读取BQ40Z50芯片寄存器。

    单独使用此模拟I2C时序读取AT24C02,光模块均可正常工作,但是读取BQ40Z50就不可以。

   (1)查芯片手册如下

尝试对0x16寄存器的0x44写入0x21 0x00,使用示波器观察发现0x44无应答,然后更改为0x00等均无应答,不知道什么原因;

(2)查SMB时序与I2C时序的不同,发现其速率为10K-100K,不可过低或者过高,更改模拟I2C代码,固定时序为40K左右,发现寄存器地址有应答,但是读取的数值不对一直为0xff;

(3)尝试读取操作0x16 0x0D,得到电池电量,一直没有进展;

(4)使用开发板飞线,用单片机自身i2c CORE生成的时序访问BQ40Z50,发现竟然可以成功读取;

(5)确认为模拟I2C问题,使用示波器抓取波形分析,发现单片机自身I2C波形和模拟I2C波形在写完读时序后的状态不一致,更改模拟I2C波形与自身I2C波形一致后问题解决。

总结:不要随便造时序,因为你不知道其通用性到底如何。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值