微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI电源管理交流 > bq27421通讯问题

bq27421通讯问题

时间:10-02 整理:3721RD 点击:

在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);

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

增加延迟没有效果,我发现在每次读取操作后,再执行写操作就会无应答,而我把配置芯片的步骤取消,直接在任务里读取电量没有问题。应该读取函数没有问题,在读取和写函数中都有信号量等待,在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);

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top