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.

[参考译文] MSPM0C1104:I2C 问题

Guru**** 2782635 points

Other Parts Discussed in Thread: OPT3001, SYSCONFIG, MSPM0C1104, MSPM0C1106

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1602911/mspm0c1104-issue-in-i2c

器件型号: MSPM0C1104
Thread 中讨论的其他器件: SysConfigMSPM0C1106、OPT3001、 HDC2010

我们正在尝试错误 I2C、因为 SCL 保持高电平且 SDA 斜升为低电平、猜测时钟未被配置。

请建议解决方案。

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

    I2C 控制器 TXFIFO 的大小是多少最大值! 我们要发送 6 字节配置、FIFO 已满时仅使用 3 个字节。

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

    尊敬的 Seema:
    您在 SDK 中运行了哪些示例? 您应该能够在 SysConfig 中修改 FIFO 触发级别、如下面的示例所示。

    此致、

    Diego Abad

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

    尊敬的 Diego:

    在示例代码 i2c_sensors_to_uart_LP_MSPM0C1104_nortos_ticlang 默认 FIFO 触发电平 被设置为 0 中、我们尝试将设置为 6、因为我们要传输 6 个字节、发现传输仅发生在 4 个字节中。

    在 I2C 引脚上、SDA 保持低 SCL 高电平、未找到时钟。我们在 SCL SDA 上连接了 2.2k 上拉电阻器。

    请 指南启动 I2C。

    此致

    Seema Joshi

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

    尊敬的 Seema:

    我将评估该示例并告诉您我发现的内容。

    此致、

    Diego Abad

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

    正在等待!

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

    尊敬的 Seema:
    我从我这边尝试了这个例子,它似乎工作正常。 我尝试使用包含 6 大小消息的 SDK 示例、然后我看到了与您的行为类似的问题。 我相信您可以使用以下功能来避免此问题:

    DL_I2C_ClockConfig gI2CclockConfig;//将其声明为全局地址  
    void sendI2CTxMsg(uint8_t *I2CTransmitGroup、uint32_t 地址、uint8_t 大小)

      /*获取用于延迟周期计算的 I2C 时钟源和时钟分频器*/
      DL_I2C_getClockConfig (I2C_INST、&gI2CclockConfig);
      /*计算控制器传输启动后要延迟的时钟周期数
       * gDelayCycles = 3 个 I2C 功能时钟周期
       * gDelayCycles = 3 * I2C 时钟分频器*(CPU 时钟频率/I2C 时钟频率)
       */
      uint32_t delayCycles =(3 *(gI2CclockConfig.divideRatio + 1)*(CPUCLK_FREQ/24000000)

      Uint8_t txCount = DL_I2C_fillControllerTXFIFO(I2C_INST、&I2CTransmitGroup[0],大小)            /*用 I2C 缓冲器数据*/填充 TX FIFO
      while(!(DL_I2C_getControllerStatus (I2C_INST)& DL_I2C_CONTROLLER_STATUS_IDLE));               /*等待 I2C 完成 FIFO 填充*/
      DL_I2C_startControllerTransfer (I2C_INST、地址、DL_I2C_CONTROLLER_DIRECTION_TX、SIZE);           /*将数据包发送到控制器。 此函数将自动发送启动+停止。 */
      while (txCount < size){                                            /*重复填充 FIFO 是消息尚未完成*/
        txCount += DL_I2C_fillControllerTXFIFO (I2C_INST、&I2CTransmitGroup[txCount]、Size - txCount);
        delay_cycles (delayCycles);  /*我讨厌我们没有延迟就无法写入*/
      }
      while (DL_I2C_getControllerStatus (I2C_INST)&DL_I2C_CONTROLLER_STATUS_BUSY_BUS);               /*等待 I2C 完成数据发送*/
      DL_I2C_flushControllerTXFIFO (I2C_INST);                                   /*刷新 I2C TX FIFO */
    }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Diego:

    我们发现在 SCL、SDA  输出上没有转换,因为我们尝试在功能过程中监测,在提到的变化之后。

    setMeasurementConfigurationsForSensors()
    请指南如何 在 CCS 中调试检查 I2C
    此致
    Seema Joshi
     
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Seema:
    只是为了确认、您使用的是哪个传感器器件? 您能否共享 I2C 通信的捕获和项目副本? 最后、如果您将消息大小改回 4、是否可以使示例正常工作?

    此致、

    Diego Abad

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

    正如我所言、C1104 上的 TX FIFO 大小为 4、而不是 8。 具体来说:初始化后、我看到 CFIFOSR:TXFIFOCNT=4、而不是 8。MSPM0C1106 也是这种情况。

    这与 TRM (SLAU893C) 第 16.1.2 节和图 16-1 不一致。 它与 mspm0c110x.h 中的 I2C_SYS_FENTRIES (=4) 一致

    如果您尝试将 6 个字节放入 TX FIFO、其中 2 个字节将丢失、事务(如您所观察到的)将在 SCL 为低电平时挂起、等待 CPU 再提供 2 个字节。 如果您需要发送 4 个以上的字节,您将需要使用  DL_I2C_fillControllerTXFIFO () 的循环(如 Diego 所提供)。

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

    亲爱的 迭戈、Bruce、

    我们将连接 Murrata 设备 IRS-D200ST00R1。

    预计会发送 18 个字节(地址 (9)+命令 (9)) 来配置传感器。

    然后发送命令状态和读取  

    然后读取状态写入命令,读取数据。

    然后是数据 写入地址、读取数据 2 次。

     

    请告知我们是否应该   为 16 字节调用“configureTarget" 4“ 4 次、为 2 字节调用一次。?

    我们正在尝试调试示例代码 i2c_sensors_to_uart.c 发现代码滞留在第 206 行   

     DELAY_CYCLES (1200);

    请指导解决方案。

    此致

    Seema Joshi

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

    您能发布现在使用的代码吗? 在我的副本中、到达该行意味着事务已完成。 (也许调试器报告发生错误的 BKPT ()?)

    Murata 应用手册 (DM-R23-034 v3) 并不真正描述协议、但似乎显示了一个“寄存器模型“目标、其中事务可能相当短。

    也就是说、我希望 Diego 的函数可用于任何大小 (Tx) 事务、其中可能包括配置和数据提取。

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

    getMeasurementFromTarget (&gTxPacketLightMeasurement[0]、I2C_TARGET_ADDRESS_OPT3001);

    您是否也有板载 OPT3001? 如果没有,这将遇到一个 NACK ,这将导致程序在你提到的 delay_cycles 调用之前停止在 BKPT ()。

    我建议您也删除这一行  

    > configureTarget (&gTxPacketConfigurationOPT[0]
    > I2C_TX_PACKET_SIZE_CONFIGURATION_OPT   、I2C_TARGET_ADDRESS_OPT3001);
    -----
    原始示例分别将 PA0/PA11 用于 SDA/SCL。 你已经改变了吗?
    -----
    [编辑:我不确定应该怎么看待“我们看到 I2C0_MTXDATA 寄存器更新到第 4 字节“、因为我看不到任何超过 3 字节的 Tx 事务。 我的猜测是错误的 configureTarget 调用将数据保留在 Tx FIFO 中、一旦删除该调用、该症状将消失。]
     
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我在 Launchpad 上运行这段代码。 [我不希望它正常工作、因为我既没有您的传感器、也没有 OPT3001。]

    我看到 PA0 和 PA11 上都有活动。 我想知道您的引脚分配是否无意中更改了。

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

    尊敬的 Bruce:

    请发送工程文件。我们的工程中可能缺少一些与 I2C 驱动程序级别相关的设置。

    我们已经检查并确认了带传感器且未连接传感器的 PA0、PA1/PA11。(SCL 为 2.2V 且 SDA 为 0V)

    此致

    Seema Joshi

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

    我现在还没有项目。  

    我通过导入基本示例、然后将代码(上面)粘贴到(整个).c 文件上来创建该代码。 我没有触摸任何其他东西。

    您知道为什么 SCL 为 2.2V 而不是 3.3V 吗? 也许有一条线索。

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

    这是我使用的项目。 我如上所述建造了它。

    e2e.ti.com/.../x_2D00_i2c_5F00_sensors_5F00_to_5F00_uart_5F00_LP_5F00_MSPM0C1104.zip

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

    尊敬的 Bruce:

    在 LaunchPad 中有 20 引脚 MCU、我们在 SDA 上没有看到任何位置。

    我们有 8 引脚 MCU 在那里我们看到 SDA 引脚置换 ,但 SCL 引脚保持低电平。

    但在观察窗口中、我们看到 SCL 引脚状态为高电平。

    我们看到了 I2C 配置窗口、我们可以将 TX FIFO 触发电平设置为最多 7 个字节。请确认 TX 缓冲区我们应该发送这么多个字节?

    此致

    Seema Joshi

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

    上述工程(来自基本示例)使用 PA0/PA11、与 Launchpad 匹配。 这些引脚有上拉跳线 (2.2k);我想您提到了这些、但只是为了确保:这些跳线是否安装在您的测试用例中?

    -----

    在 8 引脚中[根据 SLASF90C 表 6-1]、I2C0 在 PA0/PA1 上。 值得注意的是、PA1 与 NRST 共享。 您的电路板上有复位电路吗? 硬件指南 (SLAAEG4B) 似乎没有提及此冲突、但在(此处)的论坛讨论中、建议通过排除 NRST 电路并让 I2C 上拉电阻器使 NRST 工作来处理此情况。

    [我仍然卡在“为什么 SCL=2.2V?“]

    -----

    我不知道为什么 TRM 在 TX FIFO 大小方面存在差异。 我通过使用调试器写入 TXDATA 并观察 TXFIFOCNT 递减来发现这一点。 我还 在 mspm0c110x.h 中找到了(偶然发现)I2C_SYS_FENTRIES (=4)【尽管这不是我通常会查看的页面】。 示例 i2c_controller_rw_multibyte_poll 中还有一条注释(未详细阐述)、该注释说“此示例使用具有轮询功能的 FIFO、最大 FIFO 大小为 4。“ “那你就知道了。“

    也就是说:TX FIFO 触发级别(本身)与本示例并不真正相关、因为它使用轮询。  DL_I2C_fillControllerTXFIFO () 的工作原理是写入字节、直到 TXFIFOCNT=0、因此不管(显式)FIFO 有多大。

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

    否、我们已尝试连接 2.2K 4.7K、5.6K 至 10K

     方法是切断板载跳线。

    硬件

    您正好有用于复位 4.7K 的上拉电阻、我们尝试并行连接 4.7K、2.2K.2k。

    我不知道为什么 TRM 在 TX FIFO 大小方面存在差异。 我通过使用调试器写入 TXDATA 并观察 TXFIFOCNT 递减来发现这一点。 我还 在 mspm0c110x.h 中找到了(偶然发现)I2C_SYS_FENTRIES (=4)【尽管这不是我通常会查看的页面】。 示例 i2c_controller_rw_multibyte_poll 中还有一条注释(未详细阐述)、该注释说“此示例使用具有轮询功能的 FIFO、最大 FIFO 大小为 4。“ 很明显有人知道它

    我们每次尝试使用代码 I2C 传感器向 UART 发送 2 个字节、在观察窗口中传输的校验字节、但在引脚上转换时未捕获。

    也就是说:TX FIFO 触发电平(本身)与本示例并不真正相关、因为它使用轮询。  DL_I2C_fillControllerTXFIFO () 的工作原理是在 TXFIFOCNT=0 之前写入字节、因此不关心(显式)FIFO 的大小。

    我们看到 FIFO 寄存器在轮询模式下仅发送最多 4 个字节。

    现在、我们观察到最新更新、我们使用 4.7k 上拉电阻捕获了 9 个时钟和数据、我们尝试将<1K SCL SDA 线路降至 0V。

    如果你问我,我们需要确定硬件至少是上拉 ,尝试软件或反之亦然.

    我们正在尝试硬件软件的突然变化 ,不能得出结论。

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

    尊敬的 Seema:
    如果 I2C 线路无法正常工作、在我看来、这是传感器的问题。 我认为 4.7k 的上拉应该已经足够好了。 我将尝试 I2C 示例中的独立示例、并查看是否有方法将数据发送到传感器。 如果可能、接下来的步骤是执行更多命令、直到到达不起作用的命令。

    此致、

    Diego Abad

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果 I2C 线路无法正常工作、在我看来、这是传感器的问题。

    尊敬的 Diego:

    使用 SCL SDA 上的 4.7K 上拉 、我们发现位置已连接。我们无法跟踪以下传递函数。

    DL_I2C_startControllerTransfer

    我们需要禁用写入器件地址、因为传感器数据表要求写入 00x 地址和数据。

    此处、 I2C0_MTXDATA 显示第 4 个字节发送。

    但在示波器上、我们只能捕获 90h 作为设备地址发送。

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

    示波器跟踪显示了地址 0x48 (W) 的 NACK。 引脚 5 (AD) 如何连接?

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

    好的。  MCU 的引脚 5 连接上拉 4.7k  并连接 到传感器。

    实际上、传感器数据表说 将命令和数据写入、而不是将地址作为第一个字节。

    您能否发送修改后的  DL_I2C_startControllerTransfer、但器件地址不 作为第一个字节发送。

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

    如果传感器侧 AD 引脚连接到 Vcc、则地址为 0x49、而不是 0x48。

    I2C 的工作方式就是这样、在不发送目标器件地址的情况下没有机制来执行 I2C 事务。

    我只找到了规范表(网页)和 AppNote DM-R23-034 (v3)、两者都没有描述协议。 DM-R23-034 描述了寄存器、这意味着它是标准的“寄存器模型“目标(发送寄存器编号字节后跟内容)、但对命令一无所知。 您是否有其他文档?

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

    尊敬的 Bruce:

    如上所述、“示波器迹线似乎显示 NACK “、我们更改了 AD 引脚连接到 GND @器件地址 48。中传感器器件的流程图

    DM-R23-034 (v3) 第 11 页 显示了如何开始与 00、00.butti I2C 驱动程序 DL_I2C_startController 发送器件地址?和 tend 数据。

    我不确定这就是为什么传感器会回复 NACK。

    请告知我们如何在没有器件地址的情况下启动驱动程序。

    此致

    Seema Joshi

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

    由于这是 I2C 不可分割的一部分、因此在不首先发送地址 (SLA) 字节的情况下无法执行 I2C 事务。 [如果需要这样说:您的代码不发送地址字节、而是由 I2C 单元自动代表您发送地址字节。]

    DM-R23-034 (v3) 第 11 页(和第 2.5 节)描述了代码发送的事务级别数据。 “Write X to register A“形式的每个方向大概是一个单独的事务。

    NACK 是下面的一个级别。 首先我要做的是:(1) 检查接线(再次)(2) 检查传感器 Vcc 电源(再次)。

    是否使用 Murata 演示套件? 这在应用手册中提到、但我找不到有关它的更多信息。 【原理图会很有用。】

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

    1) 上述示波器迹线似乎显示了 SCL/SDA 上的活动。 (这是一个否定的,但这算作活动。 测试条件是什么?

    2) 这是你之前发布的同一个代码吗? 它仍然包含对 OPT3001 (I2C 地址 0x44) 的请求、我知道您没有这些请求。  

    3) 也许您发布整个工程会很有用、包括.syscfg 文件。

    4) 我看不到任何超过 3 字节的传输。 您在什么情况下溢出 FIFO?

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

    尊敬的 Bruce:

    1.   

    2.是的! 我们通过放置断点来检查代码。

    4 我们尝试调用 configurearget 的时间 超过 2 次、I2C 传输发生 在 4 个字节之后、该传输停止。

    我们无法 理解原因。

    e2e.ti.com/.../5432.x_2D00_i2c_5F00_sensors_5F00_to_5F00_uart_5F00_LP_5F00_MSPM0C1104.zip

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

    由于您在 count=2 的情况下调用 configureTarget、因此我不明白为什么它会发送 4 个字节。 您是否有成功交易的范围跟踪?

    听起来前两次交易成功了。 在第二个事务结束时、总线是什么样子的(在示波器上)?

    您似乎(同样,他们的协议没有文档记录,因此我猜)是将寄存器 0x00 设置为 0xA0、然后设置为 0xF0。 这确实会将低位设置为 0(=活动)、但也会设置一些保留位、这可能会对目标产生干扰。 尝试将寄存器 0x00 设置为 0x00。

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

    尊敬的 BRUCEe2e.ti.com/.../Murata_5F00_reference_5F00_SW_5F00_.zip

    附件是 Murrata 的参考代码。

    还随附了代码、我们试图用于 I2C。请在示波器上查看申请。

    e2e.ti.com/.../x_2D00_i2c_5F00_sensors_5F00_to_5F00_uart_5F00_LP_5F00_MSPM0C1104-_2800_2_2900_.zip

    与传感器连接的 SCL SDA 引脚上有上拉 4.7K。

    请帮助解决 I2C 的问题。

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

    尊敬的 Seema:
    此主题变得太长、因此我建议打开一个有关此主题的新 E2E 论坛。 请也在这个新的 E2E 中共享文件。 我还希望您明确了解 I2C 通信在代码中的中断位置。

    此致、

    Diego Abad

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

    拥有一些 Murata 示例代码是向前迈出的一大步。 作为一个实际问题,我将无法在下周之前查看它。

    示波器轨迹看起来正常、与某个距离相距不远。  

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

    尊敬的 Bruce:

    与示波器迹线有关 、根据代码、我们将看到 90,00,A0,90,00,80、但实际迹线显示 90,90 Daly 90,90。

    我们无法调试 I2C 驱动程序。

    请帮助!

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

    包含 muRata 示例代码的.zip 文件似乎已消失 (“很遗憾、您所请求的页面不再存在。“)。 您能再附加一次吗?

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

    e2e.ti.com/.../Murata_5F00_reference_5F00_SW_5F00_.zip

    请查阅

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

    所有文件(但不是文件本身?) 声称受密码保护。 您是否知道密码?

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

    muratapirsw

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

    您是否相当确定范围内的这些事务属于配置、而不是(后续)获取数据?

    我调整了目标地址、前 4 个配置要求与 MPR121(Adafruit 分线板)一起使用、它们都能正常运行。 当我让程序进一步运行时、我看到了几个 2 字节的事务(数据提取)、然后程序在第 200 行停止、特别是

            while (DL_I2C_isControllerRXFIFOEmpty(I2C_0_INST))
                ;
     

    同时尝试从 OPT3001 读取(我没有)。

    我建议您删除第 264 行的呼叫、 即:

        getMeasurementFromTarget(&gTxPacketLightMeasurement[0], I2C_TARGET_ADDRESS_OPT3001);
    

    如果它现在没有妨碍你的方式,它很快就会。

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

    尊敬的 Bruce:

    谢谢! 您是对的、我们可以使用传感器在 I2C 上写入数据。

    现在、若要从传感器读取状态、我们需要从传感器@目标地址 48 的状态寄存器 04 中读取状态

    根据示例代码、函数计算  

    getMeasurementFromTarget (const uint8_t *gBuffer、uint8_t target_addr)
    目标地址和寄存器的需求、以保存读取的数据。 (未包含读取寄存器地址)  
    请帮助实施从状态寄存器 04 读取的操作。
    此外、为了 从传感器读取数据、我们必须发送寄存器地址 02 以及目标地址。
    此致
    Seema Joshi
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    寄存器编号位于 gBuffer[0]中。 对于第一种调用、这是

    uint8_t gTxPacketTemperatureMeasurement[I2C_TX_PACKET_SIZE_READING] = {0x00};

    因此、要读取寄存器 04、您可以使用

    uint8_t gTxPacketTemperatureMeasurement[I2C_TX_PACKET_SIZE_READING] = {0x04};

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

    我忘记提及我对 Murata 示例代码的调查结果:

    1) 该器件实际上是一个具有 1 字节寄存器编号的标准“寄存器模型“从器件。 读取不需要重复启动。 (TI 样片不进行重复启动,因此效果很好。)

    2) 没有可说明的示例寄存器值。 设置值显然通过 UART 链路接收、该链路连接到我想使用的是 GUI 或其他器件。

    3) 代码进入一些麻烦,以防止设置寄存器中的“保留“位。 我无法判断这是关键还是只是“净度“、但您的代码应该避免这样做(例如,不将寄存器 00 设置为 0xA0)。