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.

bq27541的dataflash写数据的时候,为什么有时候回出现些2次呢?



  我用单片机按照iic的时序往bq27541的ccgain和ccdelta写数据的时候,为什么会有时候写2次呢,我单片机明明只写了一次!

  • 两次都是完全相同的数据么?bq27541是属于从设备。

    MCU程序如何执行?

  • @wang cheng

    我是按照ti给的规格书来操作的,我只要把   对应的数据写到这几个dataflash的位置即可实现温度和电流,电压校准,

    按照ti给的读写Dataflash时序去 写对应的程序即可!

    但是现在遇到了点问题,就是校准电压的时候,我明明是校准的5mv,偏偏我自己用单片机校准10mv,说明执行了2次校准,但是我不知道这2次是怎么来的!

  • 你用的是什么型号单片机呢?能提供你的IIC程序么?

  •  怎么提供,我自己琢磨好久才弄出来的,你无条件的向我索要,我自己用上位机做的协议,发命令,然后做校准

  • 您是用模拟IIC吗?延时多少才可以呢?

  •  跟延迟没关系吧,我最快能做到80khz,保证稳定,还有读写dataflash跟读寄存器是一样的。

  • void IIC27541_Start1(void)
    {
     SDA_OUT();     

     IIC_SDA=1;     
     IIC_SCL=1;
     delay_us(56);
      IIC_SDA=0;//START:when CLK is high,DATA change form high to low
     delay_us(56);
     IIC_SCL=0;// 

    delay_us(56);
    }

    void IIC27541_Send_Byte1(u8 txd)
    {                       
        u8 t;  
     SDA_OUT();     
        IIC_SCL=0;//À­µÍʱÖÓ¿ªÊ¼Êý¾Ý´«Êä
        for(t=0;t<8;t++)
        {             
            IIC_SDA=(txd&0x80)>>7;
            txd<<=1;   
      delay_us(56);  
      IIC_SCL=1;
      delay_us(56);
      IIC_SCL=0; 
    //  delay_us(40);
        } 
    }

    u8 IIC27541_Wait_Ack1(void)
    {
     u16 ucErrTime=0;
     SDA_IN();      //SDAÉèÖÃΪÊäÈë 
     IIC_SDA=1;delay_us(1);   
     IIC_SCL=1;delay_us(1); 
     while(READ_SDA)
     {
      ucErrTime++;
      if(ucErrTime>2500)
      {
       IIC_Stop();
       return 1;
      }
     }
     IIC_SCL=0;//ʱÖÓÊä³ö0    
     return 0; 
    }

    先开始 IIC27541_Start1();

    再发送 IIC27541_Send_Byte1(0xaa);

    等应答 IIC27541_Wait_Ack1(void);

    结果是一直没应答 READ_SDA一直没变低电平!