I2C总线定时错误导致死锁

⚠️
你好。。谢谢你来参加论坛。令人兴奋的消息!我们现在正在移动到我们的新论坛平台,将提供更好的功能,并包含在主对话网站的过程。所有帖子和账号都已迁移。我们现在只接受新论坛上的流量-请在//www.wsdof.com/support. 我们将在未来几天内修复bug/优化搜索和标记。
4个职位/0个新职位
最后一篇文章
古香
离线
最后一次见到:3周1天前
已加入:2017-05-12 04:18
I2C总线定时错误导致死锁

嗨,dialog
当我们开发I2C设备时,我们发现总线定时错误的概率很低(如pdf文件所示)。此时,如果我们使用“ad\ i2c\ U write”或“ad\ i2c\ U read”来操作i2c总线,由于“ad\ i2c\ U write/read”函数中的一个代码语句,相应的任务将永远挂起:
int ad\u i2c\u write(i2c\u device dev,const uint8\u t*wbuf,size\u t wlen)
{
...
操作系统事件等待(dev\u config->总线数据->事件,操作系统事件永远)//永远挂起
...
}

如何处理这个错误?我们可以在“OS_EVENT_WAIT(dev_config->bus_data->EVENT,WAIT_time)”中设置指定的等待时间吗而不是永远等待?

设备:
MT\u对话框
离线
最后一次见到:2个月3周前
工作人员
已加入:2015-06-08 11:34
你好,桂香,

你好,桂香,

我不太明白你所说的异常总线定时错误是什么意思,以及我到底应该在你所附的.pdf上看到什么(除了一次失败的i2c尝试)。如果任务被挂起并且从未恢复,这意味着您启动的I2C事务显然还没有结束,并且任务正在等待的事件从未触发(最可能的原因是从设备正在扩展时钟-保持低时钟线)。总之,您可以永远更改OS\u EVENT\u而不等待事件,并以ticks为单位设置特定的等待时间(这是不建议的),但是您应该在项目中验证这会产生什么影响,并且不建议更改SDK文件。你应该做的是检查为什么会发生这种情况,事件永远不会触发,也请尝试使用DMA的情况下,你不使用它,也许这将改善你的设置。

谢谢你的对话

古香
离线
最后一次见到:3周1天前
已加入:2017-05-12 04:18
是的,根据那个

是的,根据一个测试设备,当任务暂停时,SDA线路保持低位,这不是I2C总线空闲状态。我们有大约50台设备,其中3台设备在两个月内出现类似情况。因此,我们很难捕捉到错误并检查为什么会发生这种情况,因为这种情况很少发生。并且DMA功能已启用

MT\u对话框
离线
最后一次见到:2个月3周前
工作人员
已加入:2015-06-08 11:34
古翔你好,

古翔你好,

显然,这与传感器有关,连接在68x上的传感器或内存使线路保持低位,因此传输无法完成(连接故障等)。你不能只是放置一个超时,而不是永远等待操作系统,因为你不会知道的状态,I2C模块或状态的I2C适配器,这就是为什么我不赞成更换操作系统等待永远等待滴答声,当搞乱适配器可能会导致严重的问题。关于i2c适配器的超时,这个特性还没有在SDK上实现。

谢谢你的对话