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.

[参考译文] MSP430FR4133:通过 I2C 进行写入

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1137456/msp430fr4133-writing-over-i2c

器件型号:MSP430FR4133
主题中讨论的其他器件: OPT4001EVM

我一直在尝试将 MSP430FR4133 Launchpad 与 OPT4001EVM 板相连。 我正在尝试让它们通过 I2C 进行相互通信。 但是、我在理解如何通过 I2C 写入数据时遇到了一些问题。 我当前有以下用于设置 I2C 的代码、我在 Resource Explorer 中找到这些代码。

WDTCTL = WDTPW | WDTHOLD;

//配置 GPIO
P1OUT &=~BIT0;//清除 P1.0输出锁存器
P1DIR |= BIT0;//表示 LED
P5SEL0 |= BIT2 | BIT3;// I2C 引脚

//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;

//将 USCI_B0配置为 I2C 模式
UCB0CTLW0 |= UCSWRST;//启用软件复位
UCB0CTLW0 |= UCMODE_3 | UCMST | UCSYNC;// I2C 模式、主控模式、同步
UCB0CTLW1 |= UCASTP_2;//生成自动停止
//到达 UCB0TBCNT 后
UCB0BRW = 0x0008;//波特率= SMCLK / 8
UCB0TBCNT = 3;//要接收的字节数
UCB0I2CSA = 0b1000101;//从器件地址
UCB0CTL1 &=~UCSWRST;
UCB0IE |= UCRXIE | UCNACKIE | UCBCNTIE;

根据我收集的内容、设置后、您可以使用下面的代码执行写入操作、以访问存储在上面的从器件地址处的器件。

UCB0CTL1 |= UCTR;//Put 进入 TX 模式
UCB0CTL1 |= UCTXSTT;//start
while (UCB0CTL1 & UCTXSTP);//确保发送了 STOP 条件
UCB0CTL1 |= UCTXSTT;// I2C 启动条件

连接逻辑分析仪时、我可以看到我通过 I2C 发送该地址、该地址由器件确认。

我不确定下一部分、我要在上面存储的从器件地址处写入器件。 我已经看到您需要加载 Tx 缓冲器(UCB0TXBUF)、然后使用上面的指令发送一个写入。 我已经尝试在主循环内部以及中断矢量 USCI_I2C_UCTXIFG0中加载 Tx 缓冲器、但无论我加载到缓冲器中的内容如何、我都只能通过数据线路发送0xFF。

我是否加载了错误的缓冲区、或者我不知道通过 I2C 写入数据的方式有没有不同?

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

    I2C 端口的处理和馈送非常复杂、您没有一个好的开始。 (发送一个 START 条件但等待一个 STOP 条件。) 我建议您首先查看代码示例。

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

    您好、卡特、

    I2C Academy 可帮助您详细了解 I2C 过程(它使用不同的器件、但概念相同)。

    是否使用 UCB0IE |= UCTXIE 启用 TX 中断;

    此致、

    Luke

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

    我没有启用该中断。 我现在可以传输数据、但它不会为我发送的每个写入命令发送数据。 我看了 I2C Academy、从我发现的内容来看、它们使用的是 I2C_Master_WriteReg 等函数、但我看不到该函数在任何地方编写的代码。 我也不明白 CMD_TYPE_X 定义的相关内容。 它们的用途是什么? 它们是如何工作的?

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

    您好、卡特、

    下面是与学院中的示例密切相关的 I2C 示例。 I2C 示例

     会仔细查看该代码、因为它将更好地解释 I2C 在这里是如何使用上下文工作的。

    此致、

    Luke