嗨,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)”中设置指定的等待时间吗而不是永远等待?
设备:

你好,桂香,
我不太明白你所说的异常总线定时错误是什么意思,以及我到底应该在你所附的.pdf上看到什么(除了一次失败的i2c尝试)。如果任务被挂起并且从未恢复,这意味着您启动的I2C事务显然还没有结束,并且任务正在等待的事件从未触发(最可能的原因是从设备正在扩展时钟-保持低时钟线)。总之,您可以永远更改OS\u EVENT\u而不等待事件,并以ticks为单位设置特定的等待时间(这是不建议的),但是您应该在项目中验证这会产生什么影响,并且不建议更改SDK文件。你应该做的是检查为什么会发生这种情况,事件永远不会触发,也请尝试使用DMA的情况下,你不使用它,也许这将改善你的设置。
谢谢你的对话
是的,根据一个测试设备,当任务暂停时,SDA线路保持低位,这不是I2C总线空闲状态。我们有大约50台设备,其中3台设备在两个月内出现类似情况。因此,我们很难捕捉到错误并检查为什么会发生这种情况,因为这种情况很少发生。并且DMA功能已启用
古翔你好,
显然,这与传感器有关,连接在68x上的传感器或内存使线路保持低位,因此传输无法完成(连接故障等)。你不能只是放置一个超时,而不是永远等待操作系统,因为你不会知道的状态,I2C模块或状态的I2C适配器,这就是为什么我不赞成更换操作系统等待永远等待滴答声,当搞乱适配器可能会导致严重的问题。关于i2c适配器的超时,这个特性还没有在SDK上实现。
谢谢你的对话