ST意法半导体
直播中

颜立歆

7年用户 901经验值
擅长:控制/MCU
私信 关注
[问答]

STM32F031K6 Bootloader写内存命令失败的原因?如何解决?

我正在尝试利用 STM32F031K6 中的内置 UART 引导加载程序来执行固件更新。我已经阅读了 AN3155 和 AN2606 文档,但不幸的是,到目前为止,我在尝试通过引导加载程序将固件写入目标 MCU 的内部闪存时运气不佳。
到目前为止我所做的工作:
  • 我可以通过 UART 接口与引导加载程序成功通信
  • GET命令响应表示bootloader协议版本为3.1,支持以下命令:
    • 0x01(获取版本和读取保护状态)
    • 0x02(获取 ID)
    • 0x31(写内存)
    • 0x73(写取消保护)
    • 0x92(读出解除保护)
  • GET ID 命令响应指示 PID 为 0x401
以下对我不起作用:
  • 我发送“写入内存”命令和校验和,例如 0x31、0xCE
  • 我收到 ACK,例如 0x79
  • 我发送 4 字节起始地址和校验和,例如 0x08、0x00、0x00、0x00、0x08
  • 我希望收到 ACK 或 NACK 但引导加载程序没有响应
一些观察:
  • 紧接着上面的一组步骤,我发送了“获取 ID”命令 + 校验和。它失败了,我收到两个 NACK(即 0x1F)
  • 在 AN3155 文档中,它提到了以下内容:
“当使用不受支持的内存地址和正确的地址校验和(即地址 0x6000 0000)发出读取内存命令或写入内存命令时,引导加载程序设备会中止该命令,但不会将 NACK (0x1F) 发送到主机.因此,接下来的两个字节(即要读取/写入的字节数及其校验和)被视为新命令及其校验和“
我的问题:
  • 我正在使用的起始地址和校验和是否无效(但对我来说看起来没问题)?
  • 支持的命令列表看起来很奇怪,为什么缺少 GET 命令(即 0x00)?
  • 设备PID也很奇怪,我在AN2606文档中找不到。事实上,根据章节“64 Device-dependent bootloader parameters”,第 326 页,STM32F03xx4/6 的 PID 应该是 0x444
也许我遗漏了一些明显的东西?我们将不胜感激地收到所有帮助和建议。






回帖(1)

华一颖

2023-2-8 09:49:55
也许你的时钟有点超差。只有当您一起发送一堆字节时,才会显示这种效果。您是否检查过逻辑分析仪或示波器跟踪?
听起来有些东西可能正在吃字节,可能是帧错误的结果。该列表中当然应该有更多受支持的命令。一定要检查时钟。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分