嗨支持,
我使用I2C总线将DA14580与传感器连接到传感器。每一个,然后传感器都不会响应读取请求,并且我的代码在wait_for_received_byte()上挂断挂起;。由于我在RAM中存储记录数据我不想使用看门狗定时器从此条件中恢复,因为重置将清除所有记录的数据。有没有办法从这种情况下恢复?任何建议将不胜感激。谢谢。
嗨戴夫,
您是对的,并且有一个内部机票来改进I2C驱动程序。一个想法,也许是为了实现与硬件定时器的超时处理,甚至是普通变量,它作为计数器,如果没有从奴隶侧没有活动,则在循环时会打破无条件的计数器。
谢谢mt_dialog.
嗨mt_dialog,
这个问题有进展吗?
嗨尹,
到目前为止,我们还没有更新我们的I2C司机。请看看这篇文章,也许它将帮助您实现超时,当I2C连接的另一侧没有响应时。
https://support.dialog-semicondiondiondum/i2c-communication-flow-protecti ...
嗨,对话框,这个i2c驱动程序问题是否已修复?这是新的驱动程序发布吗?我也面临这个问题。
嗨caiziee,
您可以查看I2C_EEPROM示例的最新5.0.4 SDK,示例具有驱动程序,该驱动程序包含超时方案,如果设备无法使用错误代码返回。但如果在阅读数据的同时使用的传感器没有响应,则必须在其绑定交互时实现自定义方案,最长时间等待接收的字节或类似的东西。
嗨,对话框,我也面临这个问题。根据现有的讨论,我没有找到一个可行的解决方案。你帮我吗?
嗨ddddragon.
您的代码堆栈在wait_for_received_byte中的原因是为什么i2c_rxfl_reg寄存器没有从I2C接口接收的数据。因此,您应该检查从设备是否响应。此外,您还可以探测信号才能检查发生这种情况的频率,如果您愿意在(getword16(i2c_rxflr_reg)== 0)中,您应该使用我们的超时进行类似的实现。
谢谢,PM_DIALOG.
嗨,pm_dialog,我有两个来自设备。根据我的测试,当您从设备获取数据时,没有问题,但是一旦我同时阅读两个数据,程序将保持WAIT_FOR_RECEIVED_BYTE大约一个小时.I DON关于超时的了解。能给我举个例子?
嗨ddddragon,
您能否解释一下你的意思是用“来自设备的两个”并同时阅读两个数据?关于wait_for_receive_byte(),宏检查计算所接收的数据的i2c_rxflr_reg寄存器,如果您留在那里,这意味着另一边还没有向您发送任何东西。该设备进入等待状态,等待另一方,以发送它应该的数据,以便计数器将增加,580可以转到I2C FIFO并获得实际数据。您是否尝试使用分析仪以检查您是否收到数据?如果收到数据,则I2C_RXFLR_REG的值应为非零。你能检查一下吗?超时的一个简单示例是具有for-循环而不是while循环,因此您的代码将在一定数量的i2c_rxflr_reg检查之后继续。
嗨戴夫,
您是对的,并且有一个内部机票来改进I2C驱动程序。一个想法,也许是为了实现与硬件定时器的超时处理,甚至是普通变量,它作为计数器,如果没有从奴隶侧没有活动,则在循环时会打破无条件的计数器。
谢谢mt_dialog.
嗨mt_dialog,
这个问题有进展吗?
嗨尹,
到目前为止,我们还没有更新我们的I2C司机。请看看这篇文章,也许它将帮助您实现超时,当I2C连接的另一侧没有响应时。
https://support.dialog-semicondiondiondum/i2c-communication-flow-protecti ...
谢谢mt_dialog.
嗨,对话框,
这个i2c驱动程序问题是否已修复?这是新的驱动程序发布吗?我也面临这个问题。
嗨caiziee,
您可以查看I2C_EEPROM示例的最新5.0.4 SDK,示例具有驱动程序,该驱动程序包含超时方案,如果设备无法使用错误代码返回。但如果在阅读数据的同时使用的传感器没有响应,则必须在其绑定交互时实现自定义方案,最长时间等待接收的字节或类似的东西。
谢谢mt_dialog.
嗨,对话框,
我也面临这个问题。根据现有的讨论,我没有找到一个可行的解决方案。你帮我吗?
嗨ddddragon.
您的代码堆栈在wait_for_received_byte中的原因是为什么i2c_rxfl_reg寄存器没有从I2C接口接收的数据。因此,您应该检查从设备是否响应。此外,您还可以探测信号才能检查发生这种情况的频率,如果您愿意在(getword16(i2c_rxflr_reg)== 0)中,您应该使用我们的超时进行类似的实现。
谢谢,PM_DIALOG.
嗨,pm_dialog,
我有两个来自设备。根据我的测试,当您从设备获取数据时,没有问题,但是一旦我同时阅读两个数据,程序将保持WAIT_FOR_RECEIVED_BYTE大约一个小时.I DON关于超时的了解。能给我举个例子?
嗨ddddragon,
您能否解释一下你的意思是用“来自设备的两个”并同时阅读两个数据?关于wait_for_receive_byte(),宏检查计算所接收的数据的i2c_rxflr_reg寄存器,如果您留在那里,这意味着另一边还没有向您发送任何东西。该设备进入等待状态,等待另一方,以发送它应该的数据,以便计数器将增加,580可以转到I2C FIFO并获得实际数据。您是否尝试使用分析仪以检查您是否收到数据?如果收到数据,则I2C_RXFLR_REG的值应为非零。你能检查一下吗?超时的一个简单示例是具有for-循环而不是while循环,因此您的代码将在一定数量的i2c_rxflr_reg检查之后继续。
谢谢,PM_DIALOG.