TI中文支持网
TI专业的中文技术问题搜集分享网站

使用stm32模拟IIC读取BQ20Z95的相对电量, 可以写进去0x16无应答,写0xA0有应答, 但使用命令后,感觉读取的数据有问题,转化后73,但是我测量电压还有13.9 ,总共电量14.4

void IIC_Start(void)
{

SDA_OUT(); //sdaÏßÊä³ö

IIC_SDA=1;

IIC_SCL=1;

delay_us(5);

IIC_SDA=0;//START:when CLK is high,DATA change form high to low

delay_us(5);

IIC_SCL=0;

}
void IIC_Stop(void)
{

SDA_OUT();

IIC_SCL=0;

IIC_SDA=0;//STOP:when CLK is high DATA change form low to high

delay_us(5);

IIC_SCL=1;

IIC_SDA=1;

delay_us(5);

}

u8 IIC_Wait_Ack(void)
{

u16 ucErrTime=0;

SDA_IN(); //SDAÉèÖÃΪÊäÈë

IIC_SDA=1;

delay_us(2);

IIC_SCL=1;

delay_us(2);

while(READ_SDA)

{

ucErrTime++;

if(ucErrTime>200)

{

IIC_Stop();

return 1;

}

}

IIC_SCL=0;

return 0;}

void IIC_Ack(void)
{

IIC_SCL=0;

SDA_OUT();

IIC_SDA=0;

delay_us(2);

IIC_SCL=1;

delay_us(2);

IIC_SCL=0;

}

void IIC_NAck(void)
{

IIC_SCL=0;

SDA_OUT();

IIC_SDA=1;

delay_us(2);

IIC_SCL=1;

delay_us(2);

IIC_SCL=0;

}

void IIC_Send_Byte(u8 txd)
{

u8 t;

SDA_OUT();

IIC_SCL=0;

for(t=0;t<8;t++)

{

if((((txd&0x80)>>7)&0x01)==0x01)

IIC_SDA=1;

else

IIC_SDA=0;

txd<<=1;

delay_us(5);

IIC_SCL=1;

delay_us(5);

IIC_SCL=0;

delay_us(5);

}

}
u8 IIC_Read_Byte()
{

unsigned char i,receive=0;

SDA_IN();//SDAÉèÖÃΪÊäÈë

for(i=0;i<8;i++ )

{

IIC_SCL=0;

delay_us(5);

IIC_SCL=1;

receive<<=1;

if(READ_SDA)receive++;

delay_us(5);

}
return receive;
}

u8 IIC_read_data()
{
uint8_t receive_data;

IIC_Start();
IIC_Send_Byte(0xa0);

IIC_Wai_Ack();
IIC_Send_Byte(0x0d);
IIC_Wait_Ack();
delay_us(50);
IIC_Start();
IIC_Send_Byte(0xa1);
IIC_Wait_Ack();
delay_us(40);
receive_data= IIC_Read_Byte();
IIC_Ack();
delay_us(40);
return receive_data;
}

频谱分析仪分析的图片

https://app.yinxiang.com/fx/cc23f442-d129-49fb-8642-528bbd552dba

Star Xu:

建议您可以用EV2300/EV2400只读取一个数,如电池电压,然后用示波器把i2c的波形抓取下来。再抓一下自己软件编写的的i2c波形,同样读取这个电压,看看两者有什么区别,很快就能定位到问题。比如ACK信号有没有?发送地址对不对?发送命令时序对不对等。

fei Li:

回复 Star Xu:

找到问题了。地线没有接。但读取的数据不对,请教是不是时序可能有问题

Star Xu:

回复 fei Li:

关于I2C通讯您可以参考下面的文档
www.ti.com/…/slua801.pdf

赞(0)
未经允许不得转载:TI中文支持网 » 使用stm32模拟IIC读取BQ20Z95的相对电量, 可以写进去0x16无应答,写0xA0有应答, 但使用命令后,感觉读取的数据有问题,转化后73,但是我测量电压还有13.9 ,总共电量14.4
分享到: 更多 (0)