代码通过TMOS任务,每隔500ms读一次从机I2C数据。现在测试结果就是,跑了几分钟或者十几分钟后就会卡死在I2C,数据线拉低。
您好,卡死时可以调用以下接口复位一下硬件IIC模块。
I2C_SoftwareResetCmd(ENABLE);
I2C_SoftwareResetCmd(DISABLE);
排查①外围电路是否有5~10K的上拉电阻上拉到V33
②出故障时打印一下IIC状态寄存器R16_I2C_STAR1和R16_I2C_STAR2,查看哪些标志位异常
③可以尝试提高IIC的中断优先级,接口函数:PFIC_SetPriority
上拉电阻是10K,中断也只有I2C中断开着。
目前发现,只要一出现I2C卡死,电流会莫名的高5mA。我现在是一个任务里多次读I2C,这个是否会有影响呢?
R16_I2C_STAR2状态如图
把编译器中的代码优化改成无优化貌似就不会死掉了,现在挂着让它跑了三小时都还正常,取而代之的是内存暴涨= =。优化程度怎么还会影响这个的?
挂了一晚上,无优化也还是会死,不过无优化可以运行3,4个小时才会死,全优化最多半小时。
而且无优化死的时候是报的错是总线忙,没有数据线拉低的动作。
while(wait && (i2c_state == I2C_MTX)) {
continue;
}
会一直卡在这个地方。
这个问题有点神奇,导致我想优化都无从下手= =
您发送联系方式到邮箱zhaiyw@wch.cn,交流更多信息以协助您排查。