FreeCRT 之 STM32 ISP Programmer

一、概述

ISP-即In-system programming,是STM32单片机的一种启动模式,通过boot pin可以选择。这种模式下,单片机会加载一段内置代码,外部程序可以通过uart向其发送各种指令,完成诸如升级版本等的工作。

STM32 ISP Programmer是FreeCRT V0.9.9引入的一个新功能,可以通过uart对STM32单片机进行镜像的写入和读取。本功能是基于文档AN3155(见参考文档1)开发,并在STM32F103C6T6A开发板上调试验证的,并没有在STM32全系列单片机上测试过,所以是否支持具体某个型号,还需要等有机会验证后再说了。

为了简单,STM32 ISP Programmer被设计成单次触发的模式。什么意思呢?就是说用户点击Start按键,内部程序按如下流程执行:

  1. 探测STM32
  2. 执行任务-由一系列ISP指令组成
  3. 结束任务

简单的说,软件希望用户在点击Start的时候,保证STM32是重启之后进入了ISP的状态。换个说法,如果你执行了一次写入镜像,想再马上再执行一次,那么会出现Sync STM32失败的打印,因为软件期望你先复位STM32再执行。

二、STM32 ISP Programmer程序界面

图1 STM32 ISP Programmer主界面

程序主界面如图1所示,分为Write Image(写入镜像)和Read Image(读取镜像)两种操作。

Com Port用于指定与STM32通讯的UART口,支持动态识别系统内的可用串口。

Baud Rate用于指定通讯的波特率,这了需要说明的是,在ISP状态下,STM32支持动态的识别UART口以及动态识别波特率,这样如果想使用较高的写入速度,那么选择较高的波特率就可以了。

Image在Write Image时用于选择输入文件,在Read Image时用于指定输出文件。

复选框Unlock RDP用于在执行读写操作前首先进行解锁操作,关于这个功能的使用,在RDP相关部分再详细说明。

Erase All复选框用于指定在写入镜像时,是全flash擦除,还是按写入镜像的大小擦除所需占用的flash page,默认不是Erase All。

Target Flash区,用来定义读写Flash的目标位置,Base和Page size都是按STM32F103来设置的。Size字段用来控制写入镜像或读取的大小。

Log区用于显示详细操作步骤的执行情况,[]内为程序启用以来的毫秒数。

Start 按钮,用来触发一次执行任务。

三、读取镜像

图2 读取镜像操作界面

读取镜像的操作界面如图2所示,大致按如下流程操作:

  1. 设置ISP模式,并复位STM32
  2. 选择Read Image
  3. 选择正确的通讯UART
  4. 选择合适的波特率
  5. 选择目标输出文件
  6. 填写需要读出的镜像大小填入Size空格内,单位为Byte
  7. 执行Start按钮

四、写入镜像

图3 写入镜像操作界面

写入镜像的操作界面如图3所示,大致按如下流程操作:

  1. 设置ISP模式,并复位STM32
  2. 选择Wite Image
  3. 选择正确的通讯UART
  4. 选择合适的波特率
  5. 选择目标镜像文件,这个时候,Size会被自动设置为文件大小
  6. 执行Start按钮

五、RDP(读保护)模式的处理

RDP是STM32单片机提供的读保护模式,在这个模式通过任何方法都没有办法获取到单片机固件,是进行版本保护的重要手段。

在这个模式,任何读取和写入都会失败,但是可以进行RDP解锁操作,解锁后,就可以进行正常的读写操作,只是,一旦进行解锁,flash上的内容将会被清空,这也是RDP保护的重要一环。

图4 RDP状态下进行写入操作

如果STM32存在RDP状态,那么这个时候进行FLASH的读写,都会有图4类似的错误提示。这种状态下我们可以按如下流程尝试解锁:

  1. 设置ISP模式,并复位STM32
  2. 读写按前两节设置
  3. 额外勾选Unlock RDP
  4. 执行Start,出现Unlock成功的提示
  5. 接下来程序尝试进行读写任务,但大概率会失败,执行下面
  6. 复位STM32,去勾选Unlock RDP
  7. 再次执行Start
图5 Unlock RDP 执行流程

六、参考文档

  1. AN3155-USART protocol used in the STM32 bootloader (PDF)

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注