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

bq25892 i2c 通讯不能收到应答信号

void Drv_I2C_Config( void )

{

        GPIO_InitTypeDef GPIO_InitStruct;

 

/* GPIO Ports Clock Enable */

I2C1_SCL_GPIO_CLK_ENABLE();

        I2C1_SDA_GPIO_CLK_ENABLE();

 

/*Configure GPIO pin : BAT_INT_Pin */

GPIO_InitStruct.Pin = BAT_I2C1_SCL_Pin;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

HAL_GPIO_Init(BAT_I2C1_SCL_GPIO_Port, &GPIO_InitStruct);

 

GPIO_InitStruct.Pin = BAT_I2C1_SDA_Pin;

HAL_GPIO_Init(BAT_I2C1_SDA_GPIO_Port, &GPIO_InitStruct);

       

        I2C_SCL_H;    

        I2C_SDA_H;

}

 

void Drv_I2C_Start( void )

{

        I2C_SCL_H;

       

        I2C_SDA_H;

        i2c_Delay();

              

        I2C_SDA_L;

        i2c_Delay();

       

        I2C_SCL_L;

        i2c_Delay();  

}

 

/***************************************************************

Name: Drv_I2C_Stop

Params: void

Return: void

Description: CPU·¢ÆðI2C×ÜÏßÍ£Ö¹ÐźÅ

***************************************************************/

void Drv_I2C_Stop( void )

{

        I2C_SDA_L;

       

        I2C_SCL_H;

        i2c_Delay();

       

        I2C_SDA_H;

       

}

 

void Drv_I2C_SendByte( uint8_t dat )

{

        uint8_t i;

        for (i = 0; i < 8; i++)

        {

               I2C_SCL_L;

               i2c_Delay();

              

               if(dat & 0x80)

               {

                       I2C_SDA_H;

               }

               else

               {

                       I2C_SDA_L;

               }

               dat <<= 1;    

               i2c_Delay();

              

               I2C_SCL_H;

               i2c_Delay();

        }

        I2C_SCL_L;

        i2c_Delay();

}

 

uint8_t Drv_I2C_WaitAck(void)

{

        uint8_t re;

        SDA_Input();

        I2C_SCL_L;

        i2c_Delay();

       

        I2C_SDA_H;    

        i2c_Delay();

       

        I2C_SCL_H;    

        i2c_Delay();

       

        if(I2C_SDA_GET)

        {

               re = 1;

        }

        else

        {

               re = 0;

        }

        I2C_SCL_L;

        i2c_Delay();

       

        SDA_Output();

        return re;

}

 

我使用的是stm32l8的芯片,i2c周期大概是10us,写地址0x6B,无应答信号,我使用这个程序写eeprom的地址0xA0,是有应答。

原理图如下,VCC_USB使用5V电压输入,VBAT和VBAT_SYS_OUT都有有4.2V电压。

Wu JW:

请抓一下,通信时,I2C口的SCL和SDA的波形。

user3473265:

回复 Wu JW:

难道写地址不是0x6B吗?

Wu JW:

回复 user3473265:

请将SCL和SDA放在同一个时间窗口内,不然没办法判断。

user3473265:

回复 Wu JW:

Wu JW:

回复 user3473265:

目前I2C地址有问题,请仔细按照我们的Datasheet来配置。目前的设置为地址为35h。
前7位是I2C地址,第8位是读写位,第9位为ACK。

user3473265:

回复 Wu JW:

我是发送的0x6Bh,第一个时钟周期是发送的0,第二个周期是1,第三个周期是1,第四个周期是0,依次往后。

赞(0)
未经允许不得转载:TI中文支持网 » bq25892 i2c 通讯不能收到应答信号
分享到: 更多 (0)