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.

[参考译文] MSP430FR2433:MSP i2c 从模式-在 i2c 读取期间、重复启动和 MSP 传输的数据字节之间的延迟过大

Guru**** 2560390 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/878335/msp430fr2433-msp-i2c-slave-mode---too-much-delay-between-repeated-start-and-data-bytes-transmitted-by-msp-during-i2c-read

器件型号:MSP430FR2433

下面是从示波器捕获的在 MSP i2c 从模式下进行的数据传输。

在捕获中、黄色是 i2c SDA、粉色是 i2c SCL。

最初、i2c SDA 和 SCL 线路在 i2c 通信开始之前变为高电平。

我将时间刻度保持在1毫秒、以捕获完整的 i2c 波形。

如波形中所示:

  1. 首先、主器件将起始信号、具有写入位的从器件地址和寄存器地址发送到从器件 MSP430。 (由观察到的波形的第一个低尖峰表示)
  2. 下一个重复起始位、发送带有读取位的从器件地址。 (由波形中的下一个低电平事件指示)。
  3. 最后从捕获结果中可以看出、在大约2.5毫秒的延迟后、从器件(MSP)将 ACK 与请求的数据一起发送给主器件。

为什么在带有读取位的重复起始+从器件地址之后、MSP 提供 ACK 的延迟太长(2.5毫秒)?

此外、如何在 MSP 从器件中触发 TX 中断? 您能否指定当 MSP 通过 i2c 总线传输数据时设置的标志和寄存器。

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

    如用户指南(SLAU445I)图24-9所示、一旦从器件接收到 SLA 字节、I2C 单元就会等待从器件软件加载其 TXBUF。 在此期间、总线被挂起(时钟扩展)。 如果从器件加载 TXBUF 的速度较慢、这将延迟 ACK。

    这是您的从代码吗? 它在 TXIFG0信号和载入 TXBUF 之间做了什么?

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

    请查找我用于在 MSP 中实现 i2c 从器件的参考 TI 示例代码。

    此外、我们还面临 i2c 从器件读取操作的问题。 如果以1毫秒的间隔从从器件连续读取数据、则会由于总线拥塞而发生连接超时。 一旦发生连接超时问题、总线将永久保持在不良状态、并且在 MSP 复位之前不会进一步进行适当的 i2c 从器件通信。 请提供解决此问题的解决方案。

    e2e.ti.com/.../5751.7230.msp430fr243x_5F00_eusci_5F00_i2c_5F00_standard_5F00_slave.c

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

    您的主设备是否完全遵循从设备的协议? 当我读取此代码时、任何异常都会导致(单向或单向)总线挂起。

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

    是的、主器件完全遵循协议。

    我以1MHz 的 MDO 时钟运行 MSP430。

    将时钟增加到16MHz 后、延迟会显著降低。 现在、连续 MSP i2c 从器件读取不会导致总线挂起。

    非常感谢!!!!