模拟IIC驱动BQ76930, 发送地址(0x30)没有收到ACK应答,为何啊。有哪位仁兄驱动成功了,探讨下,996276780(QQ),
Star Xu:
您看一下芯片版本带不带CRC,如果带CRC您可以参考下面的文档。
www.ti.com.cn/…/slva626b.pdf
user5952413:
回复 Star Xu:
您好,一下为我的驱动部分程序,在IIC_Send_Byte(0X30); 后,等待回应值tt = IIC_Wait_Ack(); 始终为1,没有等到应到,麻烦您看下哪里有问题吗?
//开始
void IIC_Start(void)
{SDA_OUT();//SDA¡¢SCLÍÆÃâÊä³ö*IIC_SDA=1;/*·¢ËÍÆðʼÌõ¼þµÄÊý¾ÝÐźÅ*/*IIC_SCL=1;delay_us(20);*IIC_SDA=0;/*·¢ËÍÆðʼÐźÅ*/delay_us(5);*IIC_SCL=0;/*ǯסI2C×ÜÏߣ¬×¼±¸·¢ËÍ»ò½ÓÊÕÊý¾Ý */delay_us(5);
}//等待应答信号
u8 IIC_Wait_Ack(void)
{u16 ucErrTime=0;SDA_IN();//SDAΪÊäÈë *IIC_SDA=1;delay_us(10);*IIC_SCL=1;delay_us(10);while(READ_SDA){ucErrTime++;if(ucErrTime>300){IIC_Stop();return 1;}}*IIC_SCL=0; //ʱÖÓÊä³ö0 delay_us(10); return 0;
}//发送数据
void IIC_Send_Byte(u8 txd)
{u8 t;SDA_OUT();*IIC_SCL=0;//for(t = 0;t < 8;t++){if(txd&0x80) *IIC_SDA=1;else*IIC_SDA=0;txd<<=1;delay_us(10);*IIC_SCL = 1;delay_us(10); *IIC_SCL = 0; delay_us(10); }
}//读数据
u16 ReadOneByte(u8 ReadAddr)
{u8 temp[2];IIC_Start();IIC_Send_Byte(0X30); tt = IIC_Wait_Ack();//在这个地方ACK始终应答为1,应答成功应为零IIC_Send_Byte(ReadAddr);
// IIC_Wait_Ack();
// //IIC_Ack();// IIC_Start();
////
// IIC_Send_Byte(0X31);
// IIC_Wait_Ack();
// //IIC_Ack();
////
// temp[0] = IIC_Read_Byte(1);
// temp[1] = IIC_Read_Byte(0);
////
// IIC_Stop();
////
// return temp[0]<<8|temp[1];
}
TI中文支持网

