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.

[参考译文] MSP432E401Y:I2C 读取和写入函数

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1237337/msp432e401y-i2c-read-and-write-functions

器件型号:MSP432E401Y
Thread 中讨论的其他器件: Energia

尊敬的论坛:

我曾尝试在 MSP432E401Y 中学习 I2C 传输、现在需要传输16位数据

此致、

TeX  

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

    您好!

     我想在这里 帖子 您能够使用 driverlib 来开发您的 I2C 应用。 您想要切换到 Energia 的原因是什么? 我们没有 Energia 的相关经验。  请参阅  常见问题 TM4C129页面、与 MSP432E 相同、我们在 e2e 上不支持 Energia、  如果您 坚持 为您的应用使用 Energia、您可以从 forum.43oh.com/.../获取帮助。 无论使用哪种方法(SDK 或 Energia 中的 driverlib)、您都需要最好使用逻辑分析仪来捕获发送到外部传感器的命令序列。 您是否符合传感器数据表中规格的时序和命令序列? 如果您认为您的命令序列正确、但传感器未返回正确的数据、则需要咨询传感器供应商。 如果传感器是 TI 器件、请打开指定相应传感器器件型号的新螺纹。 向他们展示您的 I2C 命令序列的完整捕获、让他们提供有关其为何不起作用的提示。  

     您也可以在 Google 上搜索如何将 Wire.write 用于 I2C。

    https://docs.particle.io/reference/device-os/api/wire-i2c/write/

     https://energia.nu/guide/libraries/wire/wire_write/

      似乎对于多字节写入、您需要使用 Wire.write (data、length)语法、而不是 Wire.write (value)、因为它在您的中会执行单个字节。 在任何情况下、您都应咨询 https://forum.43oh.com/forum/119-energia/、

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

    感谢您的回复。

    我实际上是在寻找 driverlib 程序、我忘了提及、请尝试提供答案。

    此致

    TeX

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

    您好!

    我实际上是在寻找 driverlib 程序

     我不明白。 我不确定您是否与我在这篇文章 https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1233558/msp432e401y-i2c-read-register-data-driverlib-example/4666405?tisearch=e2e-sitesearch&keymatch=%2520user%253A563145#4666405中提供帮助的人是同一个人。有时、我会发现同一家公司的多名员工共享同一个帐户。  

     在那篇文章中、显示的所有代码都是 driverlib 函数、我想您已经使其最终工作了。 我还展示了在哪里可以找到所有 I2C 示例。 我会在这里再次将我的答案粘贴到那个帖子上。  

    有大量的 I2C 示例可供您参考。 首先、安装 适用于 MSP432E 的 SimpleLink SDK 、然后将以下目录中的这些工程导入 CCS。

    您可以从 CCS 内的 Resource Explorer 导入相同的项目。  

    您可以在以下位置找到所有 driverlib API:

    https://software-dl.ti.com/simplelink/esd/simplelink_msp432e4_sdk/3.10.00.11/docs/driverlib/msp432e4/html/

    尽管下面的这个示例(读取湿度传感器)适用于 TM4C129 MCU、但它与共享相同 driverlib 的 MSP432E MCU 是相同的器件。 以下是示例代码、您也可以查看。  

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <stdint.h>
    #include <stdbool.h>
    #include "inc/hw_memmap.h"
    #include "inc/hw_ints.h"
    #include "driverlib/debug.h"
    #include "driverlib/gpio.h"
    #include "driverlib/i2c.h"
    #include "driverlib/interrupt.h"
    #include "driverlib/pin_map.h"
    #include "driverlib/rom.h"
    #include "driverlib/rom_map.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/uart.h"
    #include "utils/uartstdio.h"
    //*****************************************************************************
    //
    //! \addtogroup example_list
    //! <h1>Humidity Measurement with the SHT21 (humidity_sht21_simple)</h1>
    //!
    //! This example demonstrates the usage of the I2C interface to obtain the
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    尊敬的 Charles:

    是的、 这就是我。

    我的道歉 当我执行代码并添加代码时、

    上面的代码我理解,但不能做的16位数据我自己读取,因为这是我的第一个 MSP 设备后 Arduino ..

    您能给我介绍一下能够传输16位字数据的读取和写入函数吗?

    我的从设备是 MAX17055

    此致、

    TeX

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

    您负责确定第三方从器件的正确写入和读取顺序。 请咨询从站供应商、以提供波形图。 我无法帮您解决这个问题。 每个从器件可能彼此不同。 下面是读取某个从器件的示例。 请再次牢记、您需要找出对您自己的从器件执行读写操作的正确顺序。  

    要从上述示例器件读取存储器位置、您需要:

     1.从写入操作的从器件地址字节开始。 请参阅从机写入地址的第一帧。  

     2.写入与要访问的寄存器地址相等的数据。 请参阅第二帧的存储器地址

     3.重新启动从器件地址字节以进行读取操作。 查看从机读取地址的第三帧

     4.从步骤2中指定的寄存器中读取数据。  有关当前 LSB 的信息、请参阅第四帧。  

     5.如果读取一个字节、则停止读取事务。 如果您正在读取 第二个字节、则只需继续读取。  

    有一个基本的了解。 您可以使用以下示例代码开始步骤3至5、从从器件读取两个字节(16位)。


    I2CReadCommand (uint32_t * pui32DataRx)
    {
    //
    //将数据方向修改为 true,以便查看地址
    //指示 I2C 主器件正在从从器件发起读取。
    //
    MAP_I2CMasterSlaveAddrSet (I2C7_BASE、SHT21_I2C_ADDRESS、TRUE);

    //
    //设置第一次读取。 使用 I2C_MASTER_CMD_BURST_RECEIVE_START
    //开始突发模式读取。 I2C 主设备继续拥有
    //此事务结束时总线。
    //
    MAP_I2CMasterControl (I2C7_BASE、I2C_MASTER_CMD_BURST_RECEIVE_START);

    //
    //等待主模块完成传输。
    // I2C 模块在寄存器中设置 BUSY 标志时有延迟,因此
    //在检查 BUSY 位之前需要有一个延迟。 以下环路
    //等待忙标志被设置,然后等待它被清除
    //表示事务已完成。 这最多可以占用633个 CPU
    //周期@ 100 kbit I2C 波特率和120 MHz 系统时钟。 因此、
    // while 循环被用来代替 SysCtlDelay。
    //
    while (!MAP_I2CMasterBusy (I2C7_BASE))
    {

    while (MAP_I2CMasterBusy (I2C7_BASE)
    {

    //
    //从从器件读取第一个字节的数据。
    //
    Pui32DataRx[0]= MAP_I2CMasterDataGet (I2C7_BASE);

    //
    //设置第三次读取。 使用 I2C_MASTER_CMD_BURST_RECEIVE_FINISH
    //终止 I2C 事务。 在该交易结束时、
    //将发出停止位,I2C 总线返回到
    //空闲状态。
    //
    MAP_I2CMasterControl (I2C7_BASE、I2C_MASTER_CMD_BURST_RECEIVE_FINISH);

    //
    //等待主模块完成传输。
    //
    while (!MAP_I2CMasterBusy (I2C7_BASE))
    {

    while (MAP_I2CMasterBusy (I2C7_BASE)
    {


    //
    // 读取第二个字节。  
    Pui32DataRx[1]= MAP_I2CMasterDataGet (I2C7_BASE);

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

    现在,我完全理解了很多感谢你的友好的信息  

    此致

    TeX