嗨,对话框
当我们开发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?
设备:
嗨,只
我不太明白你的意思是一个不正常的总线计时错误和我想看到的。pdf你已经附加(除了失败的i2c尝试)。如果任务被挂起并且从未恢复,这意味着您已经启动的I2C事务显然没有结束,并且任务正在等待的事件从未被触发(很可能是因为从设备正在延长时钟——使时钟线保持较低)。底线是,你可以改变OS_EVENT_FOREVER而不是等待事件,并设置一个特定的等待时间(这是不建议的),但你应该在你的项目中验证这是什么效果,也不建议更改SDK文件。你应该做的是检查为什么会发生这种情况,事件永远不会触发,也请尝试使用DMA以防你不使用它,也许这会改善你的设置。
由于MT_dialog
是的,根据一台测试设备,当任务挂起时,SDA线保持低电平,这不是I2C总线空闲状态。我们大约有50台设备,其中3台在两个月内发生了类似情况。因此,我们很难捕获错误,并检查为什么会发生由于频率不高。DMA功能开启
嗨提到,
显然,这与传感器有关,而连接在68x上的传感器或内存使线路保持低电平,因此传输无法完成(错误的连接等)。你不能把一个超时而不是OS_WAIT_FOREVER因为你不会意识到I2C模块或状态的I2C适配器的状态,这就是为什么我不赞成在取代OS_WAIT_FOREVER等待蜱虫,当干扰适配器可以导致严重的问题。关于i2c适配器的超时,SDK上还没有实现该特性。
由于MT_dialog