模拟IIc通讯失败解决办法&&通讯线长度问题

本文讲述了在调试SQ52205模块的模拟IIC通信过程中遇到的问题,发现IIC通讯失败,从机未回应ACK。通过排查确定问题在于IIC通讯线过长,解决办法是缩短线缆。文章详细介绍了如何使用GPIO进行模拟调试和KEIL代码分析,以及使用示波器进行波形分析的过程。

调试SQ52205的模拟IIC通信记录

——————————————————————————————————————————

先说结论:

问题:IIC通讯失败,IIC从机未有ACK回应

问题点:IIC通讯线过长

解决办法:剪短IIC从通讯线

——————————————————————————————————————————

1.可以直接调试:将口拉高拉低

如果可以正常拉高拉低,说明硬件上IIC需要的上拉电阻没有问题+配置的引脚没有问题

如果不正常:

(1)检查模拟IIC引脚是否配置有问题
(2)检查模拟IIC是否正常初始化

可以调用一下函数直接操作GPIO观察示波器SDA和SCL的波形

 gpio_bit_set(GPIO_I2C3_SCL_GPIO_PORT, GPIO_I2C3_SCL_PIN);
 gpio_bit_set(GPIO_I2C3_SDA_GPIO_PORT, GPIO_I2C3_SDA_PIN);
 gpio_bit_reset(GPIO_I2C3_SCL_GPIO_PORT, GPIO_I2C3_SCL_PIN);
 gpio_bit_reset(GPIO_I2C3_SDA_GPIO_PORT, GPIO_I2C3_SDA_PIN);

在经过模拟IIC读取芯片的数据过程后,blRet的返回值时FALSE,直接进入程序的return FALSE步骤

BOOL SQ52205_GetCurrent(P_U16 pu16ReadData)
{
    U8 u8ReadBuf[2] = {0};
    U16 u16ReadData = 0 ;
    BOOL blRet = FALSE;

    blRet = HAL_SQ52205_READ_ARRAY(SQ52205_CURRENT, u8ReadBuf, 2);

    if(blRet == FALSE)
    {
        return FALSE;
    }
    
    //电流计算方法   (04h寄存器的十进制)* LSB (mA) = A      LSB = 0.00512/(05h的十进制)/分流器阻值(Ω)

    u16ReadData = u8ReadBuf[0]<<8 | u8ReadBuf[1];

    *pu16ReadData = u16ReadData  * SQ52205_LSB;      //单位0.1A

    return TRUE;
}
2.KEIL代码调试分析
(1)进入失败的语句:HAL_SQ52205_READ_ARRAY

blRe

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值