I2C总线定时错误导致死锁

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.xmece.com/support。我们将在未来几天修复bug /优化搜索和标记。
4个职位/ 0个新
最后发表
提到
离线
最后看到:2天8小时前
加入: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
离线
最后看到:4个月2周之前
工作人员
加入:2015-06-08 34
嗨,只

嗨,只

我不太明白你的意思是一个不正常的总线定时错误,以及我应该在你所附的.pdf上看到什么(除了一个失败的i2c尝试)。如果任务挂起并且从未恢复,这意味着您已经开始的I2C事务显然没有结束,并且任务正在等待的事件永远不会被触发(很可能是因为从设备正在拉伸时钟——使时钟线处于低位)。最重要的是,你可以改变OS_EVENT_FOREVER,不等待事件,并设置一个特定的等待时间在ticks(这是不建议的),但你应该验证这在你的项目中的影响,也不建议改变SDK文件。你应该做的是检查为什么会发生,事件永远不会触发,也请尝试使用DMA,以防你不使用它,也许这将改善你的设置。

由于MT_dialog

提到
离线
最后看到:2天8小时前
加入:2017-05-12 04:18
是的,据那个人说

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

MT_dialog
离线
最后看到:4个月2周之前
工作人员
加入:2015-06-08 34
嗨提到,

嗨提到,

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

由于MT_dialog