微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI电源管理交流 > STM32 与bq78350通过SMBus通信异常求助

STM32 与bq78350通过SMBus通信异常求助

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

STM32 MCU与SMBus通信,有如下问题求助:

1)MCU发送了0x16地址之后,能够发现有两个ACK。

2)接着MCU发送Command "0x44 0x35 0x00"之后一直都没有收到ACK。

具体参见附件图片。(因只示波器只有一条线,只能提供数据线的波形)。请帮忙看下是什么原因导致78350一直没有回复ACK。

先要确认一下BQ78350是否正常工作。可以用EV2400和bqStudio跟它通讯,看能不能正常通讯。

多谢回复。 

我们检测了78350输入的电压,是满足高于3.2V的。发送第一个0x16命令能看到响应。

如果没有使用EV2400和bqStudio如何判断78350的工作状态?

因为你读的0x44是一个特殊的command(ManufacturerBlockAccess())。你可以试一下读0x09 Voltage()。

我们尝试过多个命令了,包括09这个,情况一样。master端发送了字节之后没有收到ack,是否和78350端的stretch有关系?

下面是单节电量计的I2C读取方式,BQ78350的SMBus也是类似的,可以参考一下。

发送命令后要注意延时。第一次地址位立即接受应答。后面命令位延时80us再延时。接受数据每一组间隔50us。有EV2400就可以用示波器抓时序来看

给你个程序参考

/**********************************
读取剩余电量
**********************************/

unsigned char RelativeState[3]={0x16,0x0D,0x17};
unsigned char CRC_Buff[5];


void RelativeStateOfCharge(void)
{
unsigned char CRC_Val;
SMbus_Start();//开始
SMBUS_Send_Byte(RelativeState[0]);
SMBUS_Wait_Ack();
SMBUS_Send_Byte(RelativeState[1]);
SMBD_Init(1);
SMBC=0;
SMBD=1;
Delay80us();
SMBUS_Wait_Ack();

SMbus_Start();//开始
SMBUS_Send_Byte(RelativeState[2]);
SMBUS_Wait_Ack();
SMBD_Init(1);
SMBC=0;
SMBD=1;
Delay45us();



Read_Data[0]=SMBUS_Read_Byte();//接受低位数据
SMBUS_Ack(); //发送ACK
SMBD_Init(1);
SMBC=0;
SMBD=1;
Delay50us();


Read_Data[1]=SMBUS_Read_Byte();//接受高位数据
SMBUS_Ack(); //发送ACK
SMBD_Init(1);
SMBC=0;
SMBD=1;
Delay50us();


Read_Data[2]=SMBUS_Read_Byte();//接受CRC
SMBUS_Ack();
SMBD_Init(1);
SMBC=0;
SMBD=0;
Delay50us();
SMbus_Stop();//停止


CRC_Buff[0]=RelativeState[0];
CRC_Buff[1]=RelativeState[1];
CRC_Buff[2]=RelativeState[2];
CRC_Buff[3]=Read_Data[0];
CRC_Buff[4]=Read_Data[1];
CRC_Val=CRC8(CRC_Buff,5);//CRC校验
if(CRC_Val==Read_Data[2])//校验成功
{
CRC_OK=1;
}
else
{

}//校验失败舍弃数据
}

非常感谢再次回复。

今天通过EV2300对接调测78350,正常。

切换到STM32F407之后问题依然是发帖携带图片的情况。不知道为何在发送0x16之后会出现两个ACK。不知道之前是否有人出现过类似问题。

你看看这个页面里的链接有没有帮助吧

http://www.ti.com/tool/bq27xxxsw-linux

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

网站地图

Top