I2C总线计时错误导致死锁

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
4个职位/ 0个新职位
最后发表
提到
离线
最后看到:1周6天前
加入:2017-05-12 04:18
I2C总线计时错误导致死锁

嗨,对话框
当我们开发I2C设备时,我们发现总线定时错误的概率很低(如pdf文件所示)。此时,如果使用“ad_i2c_write”或“ad_i2c_read”操作I2C总线,对应的任务将由于“ad_i2c_write/read”函数中的代码语句永远挂起:
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->event, wait_time);”中设置指定的等待时间,而不是等待OS_EVENT_FOREVER?

设备:
MT_dialog
离线
最后看到:6个月3个星期前
工作人员
加入:2015-06-08 34
嗨,只

嗨,只

我不太明白你的意思是一个不正常的总线计时错误和我想看到的。pdf你已经附加(除了失败的i2c尝试)。如果任务被挂起并且从未恢复,这意味着您已经启动的I2C事务显然没有结束,并且任务正在等待的事件从未被触发(很可能是因为从设备正在延长时钟——使时钟线保持较低)。底线是,你可以改变OS_EVENT_FOREVER而不是等待事件,并设置一个特定的等待时间(这是不建议的),但你应该在你的项目中验证这是什么效果,也不建议更改SDK文件。你应该做的是检查为什么会发生这种情况,事件永远不会触发,也请尝试使用DMA以防你不使用它,也许这会改善你的设置。

由于MT_dialog

提到
离线
最后看到:1周6天前
加入:2017-05-12 04:18
是的,根据那张表

是的,根据一台测试设备,当任务挂起时,SDA线保持低电平,这不是I2C总线空闲状态。我们大约有50台设备,其中3台在两个月内发生了类似情况。因此,我们很难捕获错误,并检查为什么会发生由于频率不高。DMA功能开启

MT_dialog
离线
最后看到:6个月3个星期前
工作人员
加入:2015-06-08 34
嗨提到,

嗨提到,

显然,这与传感器有关,而连接在68x上的传感器或内存使线路保持低电平,因此传输无法完成(错误的连接等)。你不能把一个超时而不是OS_WAIT_FOREVER因为你不会意识到I2C模块或状态的I2C适配器的状态,这就是为什么我不赞成在取代OS_WAIT_FOREVER等待蜱虫,当干扰适配器可以导致严重的问题。关于i2c适配器的超时,SDK上还没有实现该特性。

由于MT_dialog