这个问题困扰很久了,CAP1,CAP2,CAP3,REGOUT上都有电压
我现在想读寄存器0x50里的数据,用如下程序
IIC_Start(); IIC_Send_Byte((0X08<<1 | 0)); IIC_Wait_Ack(); IIC_Send_Byte(0x50); IIC_Wait_Ack();
。
。
。
BQ76940对第一个IIC_Wait_Ack();有ACK,但第二个没ACK,这是什么问题?
Hugo Zhang:
建议把实测的波形附上。
user3927583:
回复 Zhengxing Li:
确实是软件语句的问题,IIC_Wait_Ack()这个函数的问题,第6行开始,SDA输出模式延时了5us,应该是时间太长了
u8 IIC_Wait_Ack(void)
{
u8 ucErrTime=0;
SDA_OUT();
IIC_SDA=1;
delay_us(5);
IIC_SCL=1;
delay_us(5);
SDA_IN(); //SDAÉèÖÃΪÊäÈë
while(READ_SDA)
{
ucErrTime++;
if(ucErrTime>250)
{
IIC_Stop();
return 1;
}
}
IIC_SCL=0;
return 0;
}
user6144994:
回复 user3927583:
这个问题解决了吗? 我也出现这个问题了
user6234485:
回复 user3927583:
请问你的问题解决了吗,我也出现这个问题了,我发送写地址0x10,然后寄存器地址,例如03,然后数据,然后CRC所有这些时序都OK,有CRC响应,但是我发送读指令0x11,这个时候还是有ACK响应,下一个寄存器地址的时候就没有ACK了,甚至我发03寄存器地址,会被BQ拉成0x00
user6234485:
回复 user6144994:
请问你的问题解决了吗,我也出现这个问题了,我发送写地址0x10,然后寄存器地址,例如03,然后数据,然后CRC所有这些时序都OK,有CRC响应,但是我发送读指令0x11,这个时候还是有ACK响应,下一个寄存器地址的时候就没有ACK了,甚至我发03寄存器地址,会被BQ拉成0x00