This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

BQ7693000使用问题

Other Parts Discussed in Thread: BQ76930, BQ76930EVM, BQ76940

你好,我使用的芯片是BQ76930003ATG4C5ZC,使用了一块BQ76930EVM板和EV300,在上位机上显示的地址是0X08,电压数据正常,现在我自己写了一个IIC程序(是使用MCU的IIC接口,不是模拟IIC程序),硬件环境是使用一块8位的飞思卡尔DZ60芯片和BQ76930EVM,将EVM的IIC接口与MCU的IIC接口接上,两块板共地,拔掉了EVM板上J14上的所有跳帽,这个程序测试读写支持IIC协议的AT24C02的EEPROM芯片正常,但是现在不能读取到BQ76930的电压数据,我写的地址是0x10,读的地址是11,急待解决。初始化BQ769芯片的寄存器写入的地址BQ769_INITAdd[11] ={0x00,0x01,0x02,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b}; 在初始化寄存器中写入的配置数据BQ769_INITdata[11]={0x08,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0xAC,0x97,0x19};现在没有数据出来,SDA和SCL都是5V(读取AT24C02时SDA和SCL也是5V),REGOUT是4.5V,使用上位机时EVM这几个电压为2.5V
写入和读取的程序模块:
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

byte BQ769_INITAdd[11] ={0x00,0x01,0x02,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b}; //要初始化的寄存器
byte BQ769_INITdata[11]={0x08,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0xAC,0x97,0x19};//向初始化寄存器中写入的数据
byte BQ769_RegAdd[12]={0x0c,0x0d,0x0e,0x0f,0x51};//读取电压的地址

Init_IIC( );

for(i=0;i<11;i++)
{

WRITE_IIC(BQ769_INITAdd[i],BQ769_INITdata[i]);//初始化,写入配置数据,该数据为上位机上的配置信息数据,写命令地址为0X10,先发写命令地址0X10再发读命令地址为0X11(AT24C02读写是这样操作的,这个我也是这样操作)
delayms(5);
}

delayms(1000);

for(i=0;i<4;i++){

readbuf[i]=IIC_read_one_byte(BQ769_RegAdd[i]);//读取电压
cansendbuf[i]=readbuf[i];
delayms(5);
}


(void)CAN1_SendFrameExt(0x002a,0x00,8,cansendbuf);//CAN返回电压数据
////////////////////////////////////////////IIC写函数////////////////////////////////////////////////////////////////////////
IICD=0x10; //发送芯片地址,写命令
while(!IICS_IICIF );
temp = IICS;
IICS_IICIF=1;

IICD=addres; //发送寄存器地址
while(!IICS_IICIF);
temp = IICS;
IICS_IICIF=1;

IICD=date;//写第1个字节
while(!IICS_IICIF);
temp = IICS;
IICS_IICIF=1;

//////////////////////////////////////IIC读函数//////////////////////////////////////////////////////////////////////////////

IICD=0x10; //发送芯片地址,写命令
while(!IICS_IICIF);
temp = IICS;
IICS_IICIF=1;

IICD=address; //发送寄存器地址
while(!IICS_IICIF);
temp = IICS;
IICS_IICIF=1;

IICC1_TXAK=1;
IICC1_RSTA=1; //重新启动

IICD=0x11; //读命令
while(!IICS_IICIF);
temp = IICS;
IICS_IICIF=1;

IICC_TX=0; //读使能
temp=IICD;

while(!IICS_IICIF);
temp = IICS;
IICS_IICIF=1;
temp=IICD; //读一个字节