I2C总线定时错误导致死锁

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
4个帖子/ 0新
最后一篇
古祥
离线
最后一次露面:19小时31分钟前
加入:2017-05-12 04:18
I2C总线定时错误导致死锁

嗨,对话
当我们开发I2C设备时,我们发现总线定时错误的概率很低(如PDF文件中的显示)。此时,如果我们使用“AD_I2C_WRITE”或“AD_I2C_READ”操作I2C总线,则相应的任务将永远挂起,因为“AD_I2C_WRITE /读取”功能中的代码语句:
int ad_i2c_write(i2c_device dev,const uint8_t * wbuf,size_t wlen)
{
......
os_event_wait(dev_config-> bus_data->事件,os_event_forever);//暂停
......
}

如何处理此错误?我们可以在“os_event_wait(dev_config-> bus_data->事件,wait_time)中设置指定的等待时间。”而不是等待os_event_forever?

设备:
mt_dialog.
离线
最后一次露面:3个月1周前
职员
加入:2015-06-08 11:34
桂翔,

桂翔,

我不太完全得到你的意思异常的总线定时错误,我究竟想看到你附加的.pdf(除了一个失败的i2c尝试)。如果任务暂停并且永远不会恢复,这意味着您已开始的I2C交易显然尚未结束,并且任务等待的事件永远不会触发(最重要的是因为从设备正在推动时钟 - 保持时钟低电平)。底线,您可以更改OS_EVENT_FOREVER,不要等待事件并在刻度线上设置特定的等待时间(未建议),但您应该验证项目中这的效果,还要更改它的效果不建议。您应该做的是检查为什么发生这种情况,并且事件永远不会触发,请尝试在您不使用它的情况下使用DMA,也许这将改善您的设置。

谢谢mt_dialog.

古祥
离线
最后一次露面:19小时31分钟前
加入:2017-05-12 04:18
是的,根据一个

是的,根据一个测试设备,当任务暂停时,SDA线保持低,这不是I2C总线空闲状态。我们有大约50个设备,3个设备在两个月内发生类似的情况。因此,我们很难捕获错误并检查原因是否因少量而发生的原因。并且DMA功能已启用

mt_dialog.
离线
最后一次露面:3个月1周前
职员
加入:2015-06-08 11:34
古兴,

古兴,

显然,这与传感器有关,并且连接在68x上的传感器或内存保持低电平,因此传输无法完成(故障连接等)。您不能仅放置超时而不是OS_WAIT_FOREVER,因为您不会意识到I2C模块的状态或I2C适配器的状态,并且在使用适配器汇款时,为什么我不赞成替换OS_WAIT_FOREVER造成严重问题。关于I2C适配器上的超时,该功能尚未在SDK上实现。

谢谢mt_dialog.