我正在为STM32F730Z8-编写一个外部引导程序(为什么?我需要一个windows代码,它可以为STM32运行引导程序,或者使用STM32为我的客户端重新编程连接的ATF1508(。我以前使用过AN3155和AN2606中的信息。在较小的CPU上,这没有任何困难(即STM32L4P5(。在这种情况下,我尝试相同的方法:
1-周期\复位&BOOT0引导至监管模式
2-自动波特成功
3-发送0x00以获取命令列表,成功
4-send 01获得版本和保护,成功(vers 49,rp和nt均为0(
5端02获取芯片id(0x0452(,成功
6-发送0x73写入无保护闪存,成功(即接收回两个ACK(
7-发送0x44以开始扩展擦除(仅打算擦除扇区0(。
这就是它失败的地方。我既没有收到ACK也没有收到NACK——只是超时了。我甚至没有到达扩展擦除命令的后半部分,我向它发送扇区信息。(在STM32L4P5上,它在这里很容易成功,然后完成擦除,然后成功写入代码。(
我已经尝试了很长时间的等待&重复循环以等待ACK(许多分钟(。根据过去的经验,这应该很快,这只是第二阶段,我告诉它要擦除多少闪光,这需要很长的时间。
我已经检查了内存的保护选项区域,位于0x1FFF00100018,根据出厂默认值,它们没有受到保护。
我通过FT231XS-R进行通信,使用D2XX驱动程序调用。我可以处理波特率之类的问题,但这只能防止它自动波特率。。。我们做得很好(9600/8/1/E(。我玩过D2XX SetTimeouts——如果设置得太仓促,只会破坏早期的命令。我连接到一个20 MHz的晶体,应用程序以200 MHz的频率运行,但我的理解是引导加载程序只是以内部RC时钟频率运行。
我肯定遗漏了一些愚蠢的东西,但我没有在文档中看到。帮助Jeff Casey/Rockfield Research股份有限公司/内华达州拉斯维加斯
已修复,忽略。AN3155的细节让我明白了。在写取消保护命令的描述中,它说完成后将执行系统重置。我怎么会在STM32L4P5上错过这个?我只是没读。但为什么它当时有效呢?在非常好的打印的下一页,在流程图的脚注中,它说他们只是愚蠢的。。。。系统重置仅适用于某些产品(..列表省略..(,而其他STM32产品则不需要系统重置。
我早期的成功顺序如下:重新启动监督程序自动波特收到gvrpgidwpun异构酶wpun写验证重新启动用户
显然这对F730不起作用。有效的方法是:超级重新启动自动波特收到gvrpgidwpun超级重新启动自动波特获取gvrpgid异构酶超级重新启动自动波特收到gvrpgid写验证重新启动用户
(很明显,我可以跳过一些重复的步骤,比如获取id,但基本上它需要重新启动和重新自动波特。(
注意,我不得不第三次重启super。。。这是因为在xerase之后写入尝试超时,除非我再次完成整个序列。有趣的是,规范并没有说明擦除后的重置。我在STM32社区网站上交叉发布了这个问题,我会用这个答案做同样的事情,并在上面ping他们。
谢谢你的阅读,干杯。Jeff