新唐MCU技术
直播中

郝埃连

8年用户 1427经验值
私信 关注
[问答]

M452LG6AE通过I2C去读取电池管理芯片OZ9313,读取超时获取不到信息如何解决?

使用芯片:M452LG6AE
环境:通过I2C去读取电池管理芯片OZ9313,OZ9313支持SMBus。上拉电阻原为4.7K,因clock波形不好(tr时间长),后面改到1.2K。
故障现象:
M452芯片启动后能够正常通信获取电池信息,但是过一段时间(几小时)后就读取不到芯片上的信息,调试代码发现I2C读取超时,示波器抓取波形为SDA一直为高电平,SCL一直有正常的clock波形(波形还挺好~),


更改代码尝试在通信失败后调用I2C_STOP(I2C0)(代码如下),会卡死在while循环中,
static __INLINE void I2C_STOP(I2C_T *i2c)
{


    (i2c)->CTL |= (I2C_CTL_SI_Msk | I2C_CTL_STO_Msk);
    while(i2c->CTL   I2C_CTL_STO_Msk);
}

更改代码在通信失败后定时重新初始化I2C中断,结果还是读取超时,获取不到信息。

更多回帖

发帖
×
20
完善资料,
赚取积分