嵌入式学习小组
直播中

符筹荣

7年用户 972经验值
私信 关注

nuc029lan i2c从机scl一直处于拉低状态是怎么回事?

nuc029lan用作I2C从机,和其它主控通信,偶尔发现nuc029lan的scl会处于低电平状态,中断程序都有I2C_SET_CONTROL_REG(I2C0, I2C_I2CON_SI_AA);  这种问题有谁遇到过吗?mcu好像一直处于中断程序里面,主循环有个io翻转输出的,测量它没有变化
开了超时并有清除标志
void I2C0_IRQHandler(void)
{
    uint32_t u32Status;

    u32Status = I2C_GET_STATUS(I2C0);
P05 ^= 1;
    if(I2C_GET_tiMEOUT_FLAG(I2C0))
    {
        if( g_u8SlvDataRx ) {
            I2C_ClearTimeoutFlag(I2C0);
            g_u8SlvDataRx = 0;
        }
        else if( g_u8SlvDataTx ) {
            I2C_ClearTimeoutFlag(I2C0);
            g_u8SlvDataTx = 0;
        }
        else {
        /* Clear I2C0 Timeout Flag */
            I2C_ClearTimeoutFlag(I2C0);
        }
    }
    else
    {
        if(s_I2C0HandlerFn != NULL) {
            s_I2C0HandlerFn(u32Status);
        }
    }
}



    /* I2C enter no address SLV mode */
    I2C_SET_CONTROL_REG(I2C0, I2C_I2CON_SI_AA);



回帖(1)

王斌

2024-1-15 15:22:14
可能有以下几种可能性:

1. 电气问题:检查硬件电路是否正确连接,可能会有信号线短路或者接触不良等问题。

2. 软件问题:检查程序是否正确编写,是否符合I2C从机的协议要求。比如,I2C从机需要在接收到I2C主机的地址后发出应答信号(ACK),否则I2C主机将会停止传输。

3. 主从机冲突:如果多个主从机同时使用I2C总线,可能会发生冲突,导致低电平的状态。需要确保每个主从机的使用时间不会重叠。

4. I2C从机地址设置错误:如果从机地址设置错误,I2C主机就无法正确识别该从机并与之通信。

以上是一些可能的原因,针对具体情况需要做详细的调试和排查。
举报

更多回帖

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