⚠️
嗨,那里..感谢您参加论坛。激动人心的消息!现在,我们正在转到我们的新论坛平台,该平台将提供更好的功能,并包含在主话网站中。所有帖子和帐户都已迁移。我们现在仅在新论坛上接受流量 - 请在https://www.dialog-spoomendonductor.com/support。我们将在未来几天修复错误 /优化搜索和标记。
2帖子 / 0新
最后一篇文章
Blebot
离线
最后一次露面:1年2周前
加入:2017-11-27 16:01
I2C问题

嗨对话,

我使用I2C总线将温度传感器和加速度计连接到585芯片。发现以下问题/观察结果。

1)该程序陷入此功能,i2c_wait_until_eeprom_ready at Line Wait_until_i2c_i2c_fifo_is_empty()连接加速度计和温度传感器时。
2)仅加速度计连接时,我能够将数据写入加速度计,但无法从中读取。该程序被困在此行中:wait_for_received_byte()。
3)只有温度传感器连接时,我就能从中写入和读取数据。

因此,实际问题可能是什么以及如何克服它。

感谢和问候,
Blebot

设备:
mt_dialog
离线
最后一次露面:1年5个月前
职员
加入:2015-06-08 11:34
嗨,Blebot,

嗨,Blebot,

  1. 好吧,您正在使用的I2C驱动程序是为了插入EEPROM内存,实现将通过发送0x08并等待另一侧的ACK来轮询内存(如果已准备好操作)。因此,调用wait_until_i2c_fifo_is_empty()以检查TX FIFO是否为空,因为以前您已将字节放在缓冲区上以传输数据。我想它不是wait_until_i2c_fifo_is_empty()设备被卡住了,而是另一侧没有响应的事实,因此驱动程序不断发送0x08字节,直到另一侧的设备从设备获得ACK为止。除非有些东西使线路忙碌,以免HW模块发送任何数据,否则它至少以一个字节持续。
  2. 关于WAIT_FOR_RECEIVE_BYTE(),宏检查计算接收到的数据的寄存器,如果您停留在那里,则意味着对方还没有向您发送任何东西。

检查连接的线路状态和I2C总线上的交易,以检查传感器如何响应驱动程序发送的数据。

谢谢mt_dialog