bq27541-v200电量计 i2c 通信问题
bq27541-v200电量计 i2c方式通信,salve address : 0xaa , register byte发送失败,SCL被拉低,无ack,该电量计是否有特别的初始化动作,才能读取电压之类参数?
你是使用什么工具进行通讯的?一般需要加上拉电阻的。
我的host端是一个arm cpu, i2c 是有加100k 上拉的,我执行了一个读电压的操作,首先写寄存器 0xaa 0x08
然后执行读操作 0xaa vol_byte1 vol_byte2
在执行写寄存器操作的时候,我的arm i2c 状态寄存器 就显示发送数据错误,示波器抓出来的波形 就是电量机无响应,SCL 被拉低未释放,我只有通过强制结束此次通信,scl才会被释放。
同时在这个i2c总线上 我还挂着一个rtc, 同样的i2c函数接口,rtc工作正常,所以我担心是否电量机有特别的init序列,或者有解锁的动作 或者唤醒的命令,才能正常工作,我万用表测量2.5v是存在的 其他的我测量不到 不清楚ic是否正常工作
我用400khz 和 100khz的 scl都试验失败,用gpio模拟i2c一样失败。
首先,你上拉的电压是多少?如果电压比较低,建议更换上拉电阻的阻值.10K或者4.7K.另外请注意是否有检测SCL被释放的机制.其他有类似经历:他解决的办法是,上电之后delay 2S,再去读,问题就解决了.供你参考.如果还是不行,需要你把波形抓一下来分析。
上拉电压为3V, 我尝试用了4.7k电阻来上拉,仍然错误,系统上电后会有rtc的操作,因为slave地址不同,应该不影响电量ic,波形我抓下。
附件为读电量计电压参数的波形,0xaa 0x08 , 0xab, outdata
图示为用gpio 模拟i2c的,所以scl不会被总线拉低。
0xaa 是有ack的,0x08 显然无ack ,不知道到底哪里的问题,下午严格按照bq的时序加一些delay再看,头大啊
建议使用EV2300来通讯抓一下波形,然后用你自己的程序来读,抓下波形做比对。
请问前辈,问题怎么解决的,我现在用GPIO模拟I2C也是这样的问题
建议检查一下MCU那边的IO口是否已经配置为OD,如果是push-pull是可能出现这种波形。谢谢!