STM32 DFU over UART写入不正确的数据



我正在开发固件更新程序,以便系统中的主控制器可以对其他STM32芯片进行编程。我使用 UART 的速度为 115200 bps 和 8E1,如应用笔记 AN2606 和 AN3155 中所述。目前我正在尝试闪烁STM32F429。我可以毫无问题地阅读闪光灯。

为了测试写入功能,我按照 AN3155 的建议将 8 个字节写入 4 的倍数地址。 我已经用逻辑分析仪检查了数据线,所有内容都正确发送,STM对所有内容做出响应。

当我尝试读回它时,我会在这些位置获得随机值。写入同一基址时,这些值始终相同,但在写入其他位置时,这些值会发生变化。

我已将电压范围配置寄存器(AN2606 第 30 页(设置为 0x03,因为我的电源是 3.3V。这个寄存器的解释非常混乱,所以我什至不确定这个设置是否正确,我找不到任何其他可能出错的地方。

更新:

我尝试写入所有 4 字节对齐的地址,然后将其读回进行比较。我用各种数据大小做了这个。对扇区的基址的所有写入都不正确。失败的地址具有以下模式:

Bytes   Incorrect write addresses
4     0, 10, 20, 30, ...
8     0, 0C, 1C, 2C, 3C, ...
12     0, 08, 18, 28, 38, ...
16     0, 04, 14, 24, 34, ...
32     0  04, 14, 24, 34, ...
64     0, 04, 08, 0C, 14, 18, 1C, 24, ...
128     all 
256     all 

溶液:

咚!有一个我没有注意到的闪光擦除问题。

原始的 STM 引导加载程序在实际开发中并不好,因为它不提供两个基本功能。

  • 它不提供任何解密,您的固件可能被任何人窃取(因此保护设备没有任何意义,因为您必须发布"纯"未加密的二进制映像(

  • 它不会在闪存中检查应用程序的完整性

  • 它不适用于受保护的设备

最简单的方法是编写自己的引导加载程序并实现所有这些功能。

最新更新