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.

[参考译文] LP-MSPM0G3507:

Guru**** 657500 points
Other Parts Discussed in Thread: MSPM0G3507, BOOSTXL-BASSENSORS, HDC2010
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1267814/lp-mspm0g3507

器件型号:LP-MSPM0G3507
主题中讨论的其他器件:MSPM0G3507BOOSTXL-BASSENSORSHDC2010

我使用的 MSPM0G3507 Launchpad 具有连接在一起的 BOOSTXL-BASSENSORS。

BOOSTXL 上的 I2C 地址0x40处有一个温度器件 HDC2010。

我将从 mspm0_SDK_1_10_01_05的示例目录执行代码、文件名:I2C_CONTROLLER_RW_MULTIBYTE_FIFO_POLL.c

代码正在执行和运行、读取器件(HDC2010)的前8个位置时没有错误。  我想完成的是读取 HDC2010器件地址0xFC、0xFD、0xFE 和0xFF 处的最后四个位置。   

通过一个代码示例来说明如何将此地址扩展到最后四个寄存器地址位置。

谢谢

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

    您好、Lonnie:  

    在您所指的示例中、除了 RX 数据包大小的定义之外、我们注意到您应该参考中断示例以读取8个以上的字节。  

    可以 在此处找到该示例、它用于我们的一个 MSPM0 Academy、我可以 在这里找到

    切换到使用中断后、对最后四个寄存器的读取应与前8个寄存器的读取大致相同、仅使用新地址。

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

    我已切换到文件"I2C_CONTROLLER_RW_MULTIBYTE_fifo_interrupts"、但我仍然无法从 BASSENSOR 电路板上的器件 HDC2010的最后四个位置0xFC–0xFF 获取正确的数据。

    这些位置是只读的、应分别显示制造商 ID 和器件 ID。  请参见随附的。

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

    Lonnie、

    是否应该有图像或链接附加到您的最新回复中? 我看不到。

    您刚才提到您已成功读取8个字节、是否尝试使用相同的程序读取地址0xFC-0xFF? 这有助于找出问题所在。 在数据表中、我不明白为什么只有这些寄存器不能正确读取。 在更改代码之前、请尝试查看是否能以任何方式读取它们、以尝试在扩展块中读取它们。  

    您还能详细说明您得到的值是如何不正确的吗? 器件使用什么进行响应?

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

    使用相同的程序如何将其更改为仅读取最后四个位置(0xFC - 0xFF)?

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

    更好; 我应该如何修改代码以读取位置0x00 - 0x0F 和0xFC - 0xFF。  这就是我真正想做的

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

    我假设您已按照 HDC2010用户指南中的表7-4和/或表7-5执行读取操作、这是正确的吗? 根据这些表、您只需将当前使用的地址更改为要读取的新地址(0xFC 至0xFF)。  

    我注意到、多字节读取采用连续的地址、并将地址递增以读取下一个寄存器、而数据寄存器和器件 ID 寄存器不具有连续的地址。 这是您遇到的问题吗? 您必须使用单独的读取序列来读取所有这些寄存器。

    要读取位置0x00-0x0F 和0xFC-0xFF、您可以执行如表7-5所示的多向读取、从寄存器地址0x00开始。 然后、您可以执行与之前类似的额外多向读、但从寄存器地址0xFC 开始。  

    请尝试一下、如果您需要其他帮助、请告诉我如何操作。

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

    Dylan; 您能给我一个代码示例来说明如何更改我要读取或写入的 I2C 地址位置。  我不是在整理它。  我的确成功读取了地址0xFC - 0xFF、并且值正确、但我不知道我是如何访问这四个位置的。

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

    它是文件 dl_i2c.h 中的子例程吗?

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

    Lonnie、

    我不知道当你说你不是在整理它的时候,你是什么意思。

    我很高兴您能够正确访问这些存储器位置。  

    在"i2c_controller_rw_multibyte_fifo_interrupts"项目中、可以通过将"#define I2C_target_address (0x48)"更改为不同的地址来更改要读取或写入的 I2C 地址。 稍后在程序的"DL_I2C_startControllerTransfer ()"函数中使用该定义来启动具有所选地址的传输。  

    因此、要在该程序中读取/写入不同的 I2C 地址、只需更改上面提到的定义即可。 您不需要更改 dl_i2c.h 中的任何内容。

    请记住、这与 HDC2010寄存器地址中的特定地址不同。 有关 HDC2010寄存器地址及其访问方法的详细信息、请参阅 HDC2010数据表、我在之前的回复中链接了该数据表。

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

    这仍然不起作用或没有道理。  器件 I2C 地址为0x40。  内部寄存器地址为0xFC、0xFD、0xFE、0xFF。  如何访问器件(0x40)、然后更改地址以读取 HDC2010器件内部寄存器位置的一个或多个(4个位置、从0xFC 开始)。  我不知道该怎么做。   

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

    器件地址为0x40 yes。 寄存器地址为0xFC - 0xFF。  

    正如我在以上链接中提到的、控制器可以读取 HDC2010上的寄存器、如表7-4和7-5所示。  

    首先、您将寄存器地址(0xFC)作为写入的数据、对目标地址(0x40)执行写入、然后在不停止的情况下对目标地址(0x40)执行读取。 目标应使用数据进行响应。 可以使用 DL_I2C_startControllerTransferAdvanced ()功能执行重复启动(无停止条件)并禁用停止。 读取的长度是该函数的另一个参数、它决定了控制器将从目标读取多少字节。 读取4个字节应该会得到全部4个寄存器0xFC 到0xFF。 在读取 HDC2010上的多个连续寄存器时、只需写入第一个寄存器的地址、后续读取时将生成后续寄存器值。