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.

[参考译文] MSP430FR59891:I2C 引导加载程序

Guru**** 2510095 points
Other Parts Discussed in Thread: MSP430FR59891, MSP-FET

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/672663/msp430fr59891-i2c-bootloader

器件型号:MSP430FR59891
主题中讨论的其他器件: MSP-FET

您好!

我正在使用 MSP430FR59891的 I2C 引导加载程序(BSL 版本00.07.34.B2)。 对于每个协议错误(例如主器件读取的字节过多或不足)、BSL 会将 SCL 拉低、从而永久阻断 I2C 总线(时钟扩展)。

例如、当我发送命令 TX BSL 版本并尝试读取11个字节时、如果在使用正确的密码之前已解锁 BSL、这将是正常的。 但是、如果 BSL 仍然被锁定、尝试读取11个字节将最终在阻塞的总线中(在这种情况下、正确的响应长度为8个字节)。

这是预期行为还是有什么不同的行为?

感谢你的任何帮助。

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

    您好 SLA、

    请告诉我、您使用什么工具对 BSL 进行编程?

    PC 编程器工具(它是 BSL Scripter、哪个版本?)、从 PC 到目标器件的通信桥(它是 MSP-FET、MSP BSL RocketTM)。

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

    我们使用的是专有解决方案、主要是 USB 转 I2C 桥接器和定制软件库。

    我们当前为处理阻塞总线而采取的解决方法是将 SCL 实现为单向推挽信号。 当主器件将 SCL 驱动为高电平时、MSP BSL 停止将 SCL 拉低、并且我们能够成功使用所有 BSL 功能(即使在一段时间内有一些 CRC 错误)。 但这种方法显然违反了 I2C 规范、因此禁止在同一总线上使用其他从器件。

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

    感谢您的意见。 我想到的一件事是进入 BSL 模式。
    BSL 何时在您的设置中启动? 器件复位后?
    需要调用 BSL。 通过在 TST 和 RST 引脚上应用调用序列来完成调用。 (www.ti.com/.../slau550m.pdf 第3.3.2节)
    您可以在此处向我发送来自 BSL 的字节回复吗? 成功运行通常返回:0x00 0x80 0x02 0x00 0x3B 0x00 0x60 0xC4
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Fatmawati、

    感谢你的答复。 BSL 由软件调用(您提到的文档中的第3.3.1.1节)。 为了更加精确、我们的 MSP 应用会在 i2c 总线上侦听专有命令。 接收到后、我们的应用将控制权交给 BSL。 调用正常、并且按照 BSL 协议(第4节)中的规定正确接收 BSL 响应。

    但同样、一旦我们违反协议、问题就会出现、例如尝试读取比指定更多的字节。 问题是、在这种情况下、无限时钟拉伸是否是预期行为?

    背景信息:
    我们的 USB 转 I2C 桥接器的实现不允许在传输期间解释 BSL 响应。 因此、我们不能使用 BSL 响应中的长度字段来定义要读取的字节数。 相反、我们必须提前定义长度。 困难之处是特定命令的长度不是固定的、但可能取决于 BSL 状态、例如、TX BSL 版本命令的响应可能有8或11字节、具体取决于其是否锁定。 现在、如果锁定状态未知该怎么办? 处理此问题的最简单方法是始终读取11个字节、在传输后使用长度字段进行数据解释。 遗憾的是、使用这种方法时、BSL 似乎会永远阻止 I2C 总线。

    我希望这有助于澄清我的问题。

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

    感谢您的详细答复。 与 UART 相比、在 I2C 中比较复杂、因为主器件生成时钟。 如果从器件(此时是 BSL)没有要发送的字节、这会导致意外行为。
    使用 MSP-FET 和 MSP BSL Rocket、我们处理要接收数据的数据包中的字节数。

    我现在想到的是、您能否在开始时发送 RX_PASSWORD 来解锁 BSL 并验证您的主机是否已锁定/解锁 BSL? 这两个响应的字节数相同:
    0x00 0x80 0x02 0x00 0x3B 0x00 0x60 0xC4 (8字节)用于解锁
    0x00 0x80 0x02 0x00 0x3B 0x05 0x60 0xC4 (8字节)表示已锁定
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 SLA
    请问您的问题是否已根据 Fatma 的评论得到解决?
    如果它被解决了。 我将结束该问题。 谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    抱歉我迟到的回复! 开始与 RX_PASSWORD 通信实际上可能是一种权变措施-感谢您指出同样长的响应。 不同版本可能会出现问题:是否保证 RX_PASSWORD 命令/响应不会随未来的 BSL 版本而改变? 否则、您必须首先检查版本...

    一般来说、我还想知道 TI 的实现是否可以永远延长时钟(从而锁定总线)、这是一种合理的策略来处理 BSL (从器件)比主器件接收读取的数据更少的情况。 对于我所知的所有情况、时钟拉伸旨在为从器件提供一个将主器件的时钟降低至适当频率的机会。 但是、由于单个协议故障、我看不到总线永久锁定的意义(尽管我知道 I2C 规范不会限制 SCL 拉低的最长时间、即拉伸锁紧装置)。 简单地忽略任何奇数读取访问是否更好?

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

    您好 SLA、

    对于工厂编程的 BSL、RX_PASSWORD 中的字节长度在 MSP430器件中是一致的。

    这种行为来自 FR59891在 ROM 中编程的 BSL、因此我们也无法对 BSL 进行重新编程。 如果您计划实施必须在 FRAM 程序存储器中实现的自定义 BSL、则剩下的解决方法是选择此问题的方法。

    如果您有任何其他疑虑、请告诉我。