我正在开发一个固件更新程序,以便系统中的主控制器可以对其他STM32芯片进行编程。如应用笔记AN2606和AN3155所写,我正在使用8E1和115200 bps的UART。目前,我正在尝试刷新STM32F429。我可以毫无问题地阅读闪光灯。
要测试写入功能,我正在向AN3155中建议的4的倍数的地址写入8个字节。 我已经使用逻辑分析仪检查了数据线,所有内容均正确发送,并且STM对所有内容均进行了ACK响应。
当我尝试读回它时,在那些位置获得随机值。写入相同的基地址时,这些值始终相同,但是在其他位置写入时,它们会更改。
我将电压范围配置寄存器(第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
解决方案:
Do!我没有注意到闪存擦除问题。
答案 0 :(得分:1)
原始的STM引导程序在实际开发中并不好,因为它不提供两个基本功能。
它不提供任何解密,任何人都可以窃取您的固件(因此保护设备没有任何意义,因为您必须发布“普通”而非加密的二进制映像)
它不会在闪存中检查应用程序的完整性
不适用于受保护的设备
最简单的方法是编写自己的引导程序并实现所有这些功能。