⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
2个职位/ 0个新职位
最后发表
blebot
离线
最后看到:4周1天前
加入:2017-11-27 16:01
I2C问题

嗨,对话框中,

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

1)当加速计和温度传感器同时接口时,程序在WAIT_UNTIL_I2C_FIFO_IS_EMPTY()的i2c_wait_until_eeprom_ready函数处卡住。
2)当只有加速度计接口时,我可以向加速度计写入数据,但无法读取。程序卡在这一行:WAIT_FOR_RECEIVED_BYTE()。
3)只有温度传感器接口时,我可以读写数据。

那么实际的问题是什么以及如何克服它。

感谢和问候,
blebot

设备:
MT_dialog
离线
最后看到:2个月4天前
工作人员
加入:2015-06-08 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模块不会发送任何数据,所以FIFO它保持至少一个字节。
  2. 对于WAIT_FOR_RECEIVE_BYTE(),宏检查计数接收数据的寄存器,如果你停留在那里,这意味着对方还没有给你发送任何东西。

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

由于MT_dialog