嗨,对话
当我们开发I2C设备时,我们发现总线定时错误的概率很低(如PDF文件中的显示)。此时,如果我们使用“AD_I2C_WRITE”或“AD_I2C_READ”操作I2C总线,则相应的任务将永远挂起,因为“AD_I2C_WRITE /读取”功能中的代码语句:
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->事件,wait_time)中设置指定的等待时间。”而不是等待os_event_forever?
设备:

桂翔,
我不太完全得到你的意思异常的总线定时错误,我究竟想看到你附加的.pdf(除了一个失败的i2c尝试)。如果任务暂停并且永远不会恢复,这意味着您已开始的I2C交易显然尚未结束,并且任务等待的事件永远不会触发(最重要的是因为从设备正在推动时钟 - 保持时钟低电平)。底线,您可以更改OS_EVENT_FOREVER,不要等待事件并在刻度线上设置特定的等待时间(未建议),但您应该验证项目中这的效果,还要更改它的效果不建议。您应该做的是检查为什么发生这种情况,并且事件永远不会触发,请尝试在您不使用它的情况下使用DMA,也许这将改善您的设置。
谢谢mt_dialog.
是的,根据一个测试设备,当任务暂停时,SDA线保持低,这不是I2C总线空闲状态。我们有大约50个设备,3个设备在两个月内发生类似的情况。因此,我们很难捕获错误并检查原因是否因少量而发生的原因。并且DMA功能已启用
古兴,
显然,这与传感器有关,并且连接在68x上的传感器或内存保持低电平,因此传输无法完成(故障连接等)。您不能仅放置超时而不是OS_WAIT_FOREVER,因为您不会意识到I2C模块的状态或I2C适配器的状态,并且在使用适配器汇款时,为什么我不赞成替换OS_WAIT_FOREVER造成严重问题。关于I2C适配器上的超时,该功能尚未在SDK上实现。
谢谢mt_dialog.