使用 MSP430 BSL。 尝试在两个 MSP430器件、一个器件上的主应用程序以及另一个器件上的从应用程序和 BSL 之间进行 I2C 通信。 向 BSL 发送命令(例如密码、加载 PC)。 BSL 不处理命令。 I2C 中断(开始、发送、停止)在连接到主器件的控制台上被检测到。 还可以看到 NACK。 这至少告诉我们 I2C 消息正在从主器件获取到 BSL。
现在 BSL 具有用于检测 I2C 中断的代码,称为 pi_receivePacket()。 我认为这会像 ISR 一样工作。 此代码未执行(例如看不到起始位)。 我在该函数中输入代码来打开 LED、不会发生任何情况。 另一个函数是 interpretCommand(),由于上述原因,无法访问该函数。 因此、我们发送的命令永远不会被处理。
在更多的上下文中、从器件侧的 MSP430应用程序作为我们的目标软件运行、而主器件侧的 MSP430应用程序向其发送一条消息来调用 BSL 以刷写新映像。
存在可疑行为。 在我们的从器件上、我们的应用程序在主器件发出命令后进入 BSL、但当 I2C 命令从主器件发送到 BSL 时、与从器件应用程序关联的 ISR 代码正在执行、在这里、我们可以在连接的控制台上看到中断(接收、启动、停止)。 这是令人困惑的、因为我们禁用中断并将程序计数器移动到 BSL 地址0x1000。 但闪存中的应用 ISR 正在执行?
从应用有其自己的从地址、不同于 BSL 从地址(0x48)。
我们使用了来自 TI 网站的专为 MSP430F5438A 设计的 BSL、但它仅包含 UART 功能。 因此、我们将 TI BSL 的 I2C 代码用于不同的芯片 (MSP430F522x)。 修改此代码以匹配我们的硬件(例如端口、I2C 引脚)。
这里可能缺少什么?
谢谢
Jeff