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

时间:2018-10-24 20:25:20

标签: stm32 uart bootloader stm32f4 dfu

我正在开发一个固件更新程序,以便系统中的主控制器可以对其他STM32芯片进行编程。如应用笔记AN2606AN3155所写,我正在使用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!我没有注意到闪存擦除问题。

1 个答案:

答案 0 :(得分:1)

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

  • 它不提供任何解密,任何人都可以窃取您的固件(因此保护设备没有任何意义,因为您必须发布“普通”而非加密的二进制映像)

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

  • 不适用于受保护的设备

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