微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI电源管理交流 > 单片机与bq34z100评估板 I2C通信,读取无应答

单片机与bq34z100评估板 I2C通信,读取无应答

时间:10-02 整理:3721RD 点击:

bq34z100评估板与EV2300通信正常,

与单片机模拟I2C通信时,发送数据,无读取应答。

*****************************************************************

读取一个字节的SoC,指令是0x02,程序流程如下:

开始I2C;发送(0xaa);读取应答;

发送(0x02);读取应答;

开始I2C;发送(0xab);读取应答;

读取数据;发送应答;

停止I2C;

*****************************************************************************

以下是示波器截图,4张图是连续的,对应上面的程序流程

发送地址就没有ACK,

在发送数据时,最好不要用MCU内部上拉, 用外部上拉,并且,在等待ACK时,将SDA需要 配置成输入高阻,读取ACK应答信号

单片机设置的是输入并且没设置上拉,用的评估板的外部上拉,  就是没应答。 EV2300却一切正常,这个芯片是不是需要什么特别的时序需要注意。

我程序中的I2C驱动,和TI的INA226进行I2C通信是没有问题的。同样的程序和bq34z100就没应答。

问题解决了。是这芯片读内部数据反应迟钝的问题

又研究了一下EV2300的波形,发现:写CMD指令后,bq34z100要延时90us才能给出ACK;写0xab后,要延时140us以上再读数据才可以。

可否把I2C通讯的代码放上来,共享一下。

如果要读电压 ,对应的Command code为0x08/0x09,这怎么还有两个command啊?怎么怎么去读电压呢?(STAR->AA->08->09->RESTAR-AB-DATA1-DATA2)是这样吗?可否分享一下EV2300读BQ34Z100电压时的波形呢?

0x08,0x09类似数据存放的地址,电压的低字节在0x08,高字节在0x09。

读电压:

START/

写0xaa/ 读ACK/*********************每次写数据后,读ACK也要等待,不断检测SDA 直到被拉低,再跳出ACK

写0x08/ 读ACK/****************

RESTART/ 

写0xab/ 读ACK/****************

延时(约140us)********************读数据前的这个延时很重要

读(0x08)数据/ 发ACK/

延时(约140us)*******

读(0x09)数据/

STOP 

是的,直接拉取下一个clk就可以得到下个地址的寄存器

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top