Other Parts Discussed in Thread: EK-TM4C129EXL, EK-TM4C1294XL
Thread 中讨论的其他器件: EK-TM4C1294XL
工具与软件:
您好!我有 EK-TM4C129EXL 和 EK-TM4C1294XL。 我将使用 EK-TM4C129EXL 使用 ROM 引导加载程序通过 I2C 更新 EK-TM4C1294XL 上的固件。
我已经过多次阅读《TivaWare 引导加载程序用户指南》(SPMU301E)、相信我已经正确完成了所有内容。 例如:
- 我 在 禁用中断和调用 ROM_UpdateI2C ()之前、在 EK-TM4C1294XL 上以从模式设置 I2C。
- 我在 EK-TM4C129EXL 上以100kbps 的速率在主模式下设置 I2C、并确保 EK-TM4C1294XL 在尝试发送命令之前已调用 ROM_UpdateI2C ()。
我将 在 EK-TM4C129EXL 上执行的 将固件发送到 EK-TM4C1294XL 的步骤如下所示。 首先、我按照以下步骤发送 COMMAND_DOWNLOAD 命令:
- 发送 COMMAND_DOWNLOAD 命令适当地打包。 (我将固件写入地址0x00000000、因为我没有自己的引导加载程序、新固件的大小为0x9A8)
- 请检查 COMMAND_DOWNLOAD 命令的 ACK
- 发送 COMMAND_GET_STATUS 适当的封包化。
- 检查 COMMAND_GET_STATUS 命令的 ACK
- 确保 COMMAND_GET_STATUS 中的返回代码为 COMMAND_RET_SUCCESS。
以下是 逻辑分析仪的图像、其中显示了上述步骤的成功通信。 首先调用 command_download、然后开始读取 ACK。。。
...然后是 ACK 响应和状态:
一切看起来都很好。
然后、我等待10秒(是的、10完整秒)、因为我知道 COMMAND_DOWNLOAD 步骤需要擦除 EK-TM4C1294XL 上的整个闪存部分。
然后、我从 COMMAND_SEND_DATA 命令开始:
- 发送 COMMAND_SEND_DATA 命令以进行适当的封包化。
- 检查 COMMAND_SEND_DATA 命令的 ACK
- 发送 COMMAND_GET_STATUS 命令进行适当的封包化。
- 检查 COMMAND_GET_STATUS 命令的 ACK
- 确保 COMMAND_GET_STATUS 中的返回代码为 COMMAND_RET_SUCCESS。
在执行 第一条 COMMAND_SEND_DATA 命令时、它在步骤2中无限期挂起。 无论我等待多长时间、引导加载程序都不会发回 ACK。 这里是我的逻辑分析仪输出:
现在、我们来讨论一下有趣的事情:如果我 在执行 COMMAND_DOWNLOAD 和 COMMAND_SEND_DATA 命令时省略了 COMMAND_GET_STATUS、则一切都正常工作。 新固件的整个0x9A8字节将成功 从 EK-TM4C129EXL 发送到 EK-TM4C1294XL、并写入 EK-TM4C1294XL 上的闪存 。 重新启动时、它会成功运行新固件。
所以,我对 两点感到困惑,希望有人有一些建议:
- 为什么 I2C 通信在第一个 COMMAND_SEND_DATA 命令之后挂起。
- 为什么在 删除 COMMAND_GET_STATUS 命令时一切都正常?
欢迎提出任何建议。 谢谢。
-Terence



