嗨,对话框
当我们开发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,不等待事件,并设置一个特定的等待时间在ticks(这是不建议的),但你应该验证这在你的项目中的影响,也不建议改变SDK文件。你应该做的是检查为什么会发生,事件永远不会触发,也请尝试使用DMA,以防你不使用它,也许这将改善你的设置。
由于MT_dialog
是的,根据一个测试设备,当任务挂起时,SDA线保持低,这不是I2C总线空闲状态。我们大约有50台设备,其中3台设备在两个月内发生了类似的情况。因此,我们很难捕获错误,并检查为什么会发生的频率不高。开启DMA功能
嗨提到,
显然,这与传感器有关,而连接在68x上的传感器或内存保持低电平,因此传输无法完成(错误的连接,等等)。你不能把一个超时而不是OS_WAIT_FOREVER因为你不会意识到I2C模块或状态的I2C适配器的状态,这就是为什么我不赞成在取代OS_WAIT_FOREVER等待蜱虫,当干扰适配器可以导致严重的问题。关于i2c适配器的超时时间,该特性还没有在SDK上实现。
由于MT_dialog