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一直没变低电平!