This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP430F5529:MSP430F5529和 MPU9150之间的 I2C 接口存在问题

Guru**** 2526700 points
Other Parts Discussed in Thread: AFE4403EVM, AFE4403

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/749366/ccs-msp430f5529-problem-with-i2c-interface-between-msp430f5529-and-mpu9150

器件型号:MSP430F5529
主题中讨论的其他器件:AFE4403EVMAFE4403

工具/软件:Code Composer Studio

您好!

我使用 AFE4403EVM 手表套件同时测量 PPG、ACC 和陀螺仪。 但是、我在通过 I2C 接口读取 MPU9150的数据时遇到了问题。

下面是我用于读取运动数据的代码、我直接从文件 slaa671a 复制了该代码。 黄色部分是问题所在、程序始终在这两行代码(I2C 锁定?)处暂停。我无法再获取数据。如何解决此问题?

PS: 在我获得一个数据后、它将通过 USB 直接传输到计算机。

int8_t HAL_I2C_READ_ONLY (uint16_t baseAddress、uint8_t SLAVE_addr、uint8_t reg、uint8_t *数据、uint8_t 字节计数)

 uint8_t comres = 0;

 //等待先前的通信清除
 while (HWREG8 (baseAddress + OFS_UCBxSTAT)& UCBBUSY);

 //加载设备从地址
 HWREG16 (baseAddress + OFS_UCBxI2CSA)=(slave_addr);

 //关闭发送(启用接收)
 HWREG8 (baseAddress + OFS_UCBxCTL1)&&~Ω UCTR;

 //生成起始位
 HWREG8 (baseAddress + OFS_UCBxCTL1)|= UCTXSTT;

 //等待开始位完成
 while (HWREG8 (baseAddress + OFS_UCBxCTL1)& UCTXSTT);

 //检查从器件 ACK / NACK
 if ((HWREG8 (baseAddress + OFS_UCBxIFG)& UCNACKIFG))
 {
  //如果 NACK,则设置停止位并退出
  HWREG8 (baseAddress + OFS_UCBxCTL1)|= UCTXSTP;
  返回(USCI_I2C_STATUS_SLAVE_NACK);
 }

 //现在读取一个或多个数据字节
 while (字节计数)
 {
  //如果读取1个字节(或最后一个字节),现在生成停止位以满足规范要求
  if (字节计数-==1)
  {
   HWREG8 (baseAddress + OFS_UCBxCTL1)|= UCTXSTP;
  }

  //等待下一个 RX INT
  while (!(HWREG8 (baseAddress + OFS_UCBxIFG)& UCRXIFG));

  //读取字节
  *数据++= HWREG8 (baseAddress + OFS_UCBxRXBUF);
 }

 return (comres);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    是否仅 MPU9150存在此问题、是否可以在有问题的情况下访问其他传感器。
    您标记了两行:这是否意味着代码有时在第一个位置挂起、有时在第二个位置挂起?
    这是否总是发生的、还是只是随机发生的?

    此致、
    Stefan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Stefan、

    感谢您的回复。

    首先、是的、我认为这个问题只与 MPU9150有关、因为它在我只收集 PPG 信号时运行良好。 此外、根据 TI 提供的文件、AFE4403通过 SPI 接口与 PC 进行通信。

    其次、是的、对于标记的两行、代码有时会在第一个位置挂起、有时在第二个位置挂起。 此问题始终会发生。 我希望持续测量 PPG 和运动数据至少5分钟。 但问题始终存在、因此我无法收集超过1分钟的数据。

    我的代码主要是指两个文件、'slaa671a'(MSP430_Wristwatch_project)和'CES_HRMMWatch_PC_EVM_GUI_v2.0-CCS'。

    此致、

    小志

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Xiaoshi、

    对于您的描述、我假设在您发现问题时从两个传感器读取数据。
    您能否减少代码、使您只从 MPU9150读取数据、而不通过 I2C 访问任何其他传感器?

    您可能同时从两个不同的函数访问 I2C 接口(例如、处理中断时)。
    以便您从一个函数开始通信、并在此期间从另一个函数访问接口。

    您可以检查代码。

    您还可以检查 I2C 线路在空闲模式下的状态是否都为高电平?

    此致、
    Stefan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Stefan、

    我尝试将代码减少为仅从 MPU9150读取数据。 但仍会出现此问题。

    对于 I2C 线路的状态、我无法进行检查、因为我没有逻辑分析仪。  我是 I2C 的初学者、所以我不知道还有其他方法可以检查它。

    非常感谢!

    此致、

    小志

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Xiaoshi、

    再次进行沟通、还有一件事我不确定是否理解或正确。
    MPU9150是否会不时发生故障或根本不会响应任何 I2C 消息?
    您是否有任何其他测量工具可用。 示波器在通信之前和发生故障时测量 SDA 和 SCL 上的电压电平是很好的、或者至少是这样。

    此致、
    Stefan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Xiaoshi、

    您能否解决问题、或者您是否有有关此主题的其他问题?
    如果已解决、请为解决您的问题的帖子选择"已解决"、以便关闭此主题。 如果您有其他问题、请选择"提出相关问题"或"提出新问题"。
    非常感谢!

    此致、
    Stefan