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

bq27421通讯问题

在bq27421的配置中,我按照技术文档上的例子顺序去写Data Memory parameter,按照顺序执行的时候,在写0x61寄存器值00的时候,i2c就不再返回了,i2c直接读取当前电量没有问题。代码顺序如下,到61就过不去了

i2ctxbuf[0]=0;
    I2C_BufWriteT(0xAA,0x00, i2ctxbuf, 1);   //0xaa 芯片地址,0x00 寄存器地址
  i2ctxbuf[0]=0x80;
  I2C_BufWriteT(0xAA,0x00, i2ctxbuf, 1);   //0xaa 芯片地址,0x00 寄存器地址
  I2C_BufWriteT(0xAA,0x00, i2ctxbuf, 2);
  i2ctxbuf[0]=0x13;
  i2ctxbuf[1]=0x0;
  I2C_BufWriteT(0xAA,0x00, i2ctxbuf, 2);
  while((EEP.ReadBuf[0]&0x10)!=0x10)
  {
    I2C_BufReadT(0xAA,0x06 , 1);
    OSTimeDly(500);
  }
 // OSTimeDly(1000);
  i2ctxbuf[0]=0;
  I2C_BufWriteT(0xAA,0x61, i2ctxbuf, 1);
  i2ctxbuf[0]=0x52;
  I2C_BufWriteT(0xAA,0x3e, i2ctxbuf, 1);

Cheng.W:

在每个i2C读取指令后面可以增加2ms的延迟试一下,

bo lan2:

回复 Cheng.W:

增加延迟没有效果,我发现在每次读取操作后,再执行写操作就会无应答,而我把配置芯片的步骤取消,直接在任务里读取电量没有问题。应该读取函数没有问题,在读取和写函数中都有信号量等待,在i2c操作完成后才会往后执行。

这是任务中的代码

//Battery_Init();  while(1)  {        I2C_BufReadT(0xAA,0x0c ,4);  //读取0xc 0xd  0xe 0xf寄存器    RemainCapacity=(EEP.ReadBuf[1])<<8|EEP.ReadBuf[0];    FullCapacity=(EEP.ReadBuf[3])<<8|EEP.ReadBuf[2];    OSTimeDly(1000);  }

我在debug的时候单步运行Battery_Init,屏蔽以下代码的时候,可以继续往下执行,在读到OLD_Csum后,再执行下一步时就无应答了

i2ctxbuf[0]=0x13;  i2ctxbuf[1]=0x0;  I2C_BufWriteT(0xAA,0x00, i2ctxbuf, 2);  OSTimeDly(2);//  while((EEP.ReadBuf[0]&0x10)!=0x10)//  {//    I2C_BufReadT(0xAA,0x06 , 1);//    OSTimeDly(500);//  }  OSTimeDly(2000);  i2ctxbuf[0]=0;  I2C_BufWriteT(0xAA,0x61, i2ctxbuf, 1);  OSTimeDly(2);  i2ctxbuf[0]=0x52;  I2C_BufWriteT(0xAA,0x3e, i2ctxbuf, 1);    i2ctxbuf[0]=0x0;  I2C_BufWriteT(0xAA,0x3f, i2ctxbuf, 1);  OSTimeDly(2);  I2C_BufReadT(0xAA,0x60 , 1);

//  OSTimeDly(2);  OLD_Csum=EEP.ReadBuf[0];  I2C_BufReadT(0xAA,0x4a , 1);

赞(0)
未经允许不得转载:TI中文支持网 » bq27421通讯问题
分享到: 更多 (0)