I2C读挂在WAIT_FOR_RECEIVED_BYTE ();

10个职位/ 0
最后发表
Dave.Renzo
离线
最后看到:2年9个月前
加入:2015-10-08 13:21
I2C读挂在WAIT_FOR_RECEIVED_BYTE ();

嗨,支持,

我使用i2c总线接口的DA14580传感器。时不时传感器也不会读请求和回应我的代码会挂在WAIT_FOR_RECEIVED_BYTE ();。因为我将记录数据存储在ram中我不想使用看门狗定时器来恢复这个条件,因为重置会清除所有记录的数据。有什么方法我可以从这种状况中恢复过来的吗?任何建议将不胜感激。谢谢。

设备:
MT_dialog
离线
最后看到:4个月2周前
工作人员
加入:2015-06-08 34
你好戴夫,

你好戴夫,

你是对的,然后有一个内部票提高i2c司机。一个想法将可能实现与硬件定时器超时处理,甚至一个普通变量作为一个计数器,将打破无条件while循环活动如果没有奴隶。

由于MT_dialog

离线
最后看到:4年8个月前
加入:2016-06-01 06:05
嗨MT_dialog,

嗨MT_dialog,

在这个问题上有任何进展吗?

MT_dialog
离线
最后看到:4个月2周前
工作人员
加入:2015-06-08 34
你好,

你好,

到目前为止我们还没有更新我们的I2C司机。请看看这篇文章,也许会帮助你为了实现超时没有反应时,另一边的I2C连接。

https://support.dialog-semiconductor.com/i2c-communication-flow-protecti..。

由于MT_dialog

caiziee
离线
最后看到:2年7个月前
加入:2016-07-29远
嗨,对话框中,

嗨,对话框中,
这个i2c司机问题固定了吗?有新的驱动程序版本吗?我面临这个问题。

MT_dialog
离线
最后看到:4个月2周前
工作人员
加入:2015-06-08 34
嗨caiziee,

嗨caiziee,

你可以看看最新的5.0.4 SDK i2c_eeprom例子,例子有司机,包括超时计划如果没有活动设备返回一个错误代码。但如果没有响应从您正在使用的传感器,读取数据时必须实现一个自定义方案各大剧院巡回演出互动的时间,最长时间等待接收的字节或类似的东西。

由于MT_dialog

DDDDragon
离线
最后看到:2年9个月前
加入:2017-08-11 05:55
嗨,对话框中,

嗨,对话框中,
我面临这个问题。根据现有的讨论中,我没有找到一个可行的解决方案。你能帮我吗?

PM_Dialog
离线
最后看到:1天18小时前
工作人员
加入:2018-02-08 11:03
嗨DDDDragon

嗨DDDDragon

WAIT_FOR_RECEIVED_BYTE代码栈的原因,也是为什么I2C_RXFLR_REG注册没有数据接收的I2C接口。所以,您应该检查如果奴隶设备响应。也可以探测信号,以检查发生的频率,如果你宁愿得不到堆栈时(GetWord16 (I2C_RXFLR_REG) = = 0),你应该做一个类似的实现与我们但超时。

谢谢,PM_Dialog

DDDDragon
离线
最后看到:2年9个月前
加入:2017-08-11 05:55
嗨,PM_Dialog,

嗨,PM_Dialog,
我有两个从设备。根据我的测试,没有问题,当你从设备获取数据,但是一旦我从设备读取两个数据同时,程序将WAIT_FOR_RECEIVED_BYTE呆大约一个小时,我不太了解超时。你能给我一个例子吗?

PM_Dialog
离线
最后看到:1天18小时前
工作人员
加入:2018-02-08 11:03
嗨DDDDragon,

嗨DDDDragon,

你能解释一下你的意思与“两个从设备”和阅读两个数据在同一时间吗?关于WAIT_FOR_RECEIVE_BYTE(),宏观检查I2C_RXFLR_REG寄存器计数接收的数据,如果你停留在那里它意味着对方还没有给你任何东西。设备进入等待状态,并等待对方发送的数据,所以柜台将增加和580可以去I2C FIFO和获得实际的数据。你尝试使用一个分析器为了检查如果你收到数据?如果你收到数据,I2C_RXFLR_REG的价值应该是零。你能检查吗?暂停的一个简单的例子是有一个for循环而不是while循环,因此你的代码将继续在一定量的I2C_RXFLR_REG检查。

谢谢,PM_Dialog