STM32的ISP下载原理

时间:2024-04-03 15:04:54

引言

上一篇提到了ISP,这篇文章给大家介绍一下ISP的原理,以及与IAP的区别及联系

正文

ISP的概念

ISP(In-System Programming)在系统可编程,指电路板上的空白器件可以编程写入最终用户代码, 而不需要从电路板上取下器件,已经编程的器件也可以用ISP方式擦除或再编程。ISP是一种通用的程序下载方式,AVR单片机都有ISP下载接口。可以通过ISP下载线或者STK500百度把程序下载到单片机中。 ISP下载线成本低廉,制作简单,一个并口ISP下载线只需几十元即可得到。开发工具成本低也是AVR单片机的优势之一。

ISP、IAP、ICP的区别与联系

ISP:In System Programing 在系统编程
IAP:In applicating Programing 在应用编程
ICP:In Circuit Programing 在电路编程
区别:
1、ISP是把房子拆了再重造一间,那么在造好之前当然是不能住人的啦!
2、IAP是在造好的房子里边进行一些装修,装修的时候人还住在里面!
3、ICP是在电路编程,是LPC芯片的编程方式,相当于ATMEL的ISP,而LPC的ISP就相当于ATMEL的IAP了。

ISP是指可以在板级上进行编程,而不用把芯片拆下来放到烧写器中,即不脱离系统,所以称作“在系统编程”,它是对整个程序的擦除和写入,通过单片机专用的串行编程接口对单片机内部的Flash存储器进行编程。即使芯片焊接在电路板上,只要留出和上位机接口的串行口就能进行烧写。

IAP同样是在板级上进行编程,MCU获取新代码并对程序的某部分重新编程,即可用程序来改变程序,修改程序的一部分达到升级、消除bug的目的,而不影响系统的其它部分,烧写过程中程序可以继续运行,另外接口程序是自已写的,这样可以进行远程升级而不影响应用。IAP的实现更加灵活,通常可利用单片机的串行口接到计算机的RS232口,通过专门设计的固件程序来编程内部存储器。

关于IAP与ISP的具体区别下面再做详细分析

什么是DFU

FLASH 的容量越来越大, ISP 的 USART 真的很慢了。Can 的效率也不是很高. USB 是个更好的替代方法。于是有了DFU模式。
STM32的ISP下载原理
DFU全称为Device Firmware update,是ST官方推出的一个通过USB接口进行IAP升级的方案,同串口ISP一样,他们都集成在了芯片内部的Bootloader区段,可以通过配置boot引脚来启动。(具体可参照ST文档:AN2606)。不过内置DFU的芯片大部分型号都比较新,如果你用的型号没有内置DFU程序,没关系我们也可以通过CubeMX来快速生成和移植一个DFU功能程序到你的Flash中来使用。

ISP下载原理

首先附上ISP一键下载电路:
STM32的ISP下载原理
在STM32F10xxx里有三种启动方式:
STM32的ISP下载原理
以ISP方式下载程序时需要把STM32的BOOT0引脚置1、BOOT1引脚置0,即从系统存储区(System Memory)启动。

为什么设置从System Memory启动就可以使用串口来下载我们的程序呢?那是因为在芯片出厂前ST官方已经把一段自举程序(BootLoader程序)固化到这一块存储区。

对于STM32F103ZET6来说,System Memory的起始地址为0x1FFFF000,可在芯片手册的内存映射图里找到:
STM32的ISP下载原理
其通过串口来接收数据并烧写到用户闪存存储器的起始地址(0x08000000)。只能烧写到这个地址,若keil里设置的地址不是这个地址,则编译出来的文件将烧录不成功。(用户闪存,即User Flash,同时也称为Main Flash)。

这一段BootLoader程序源码是没有开源出来的,用户是不可修改的。我们在上一篇笔记的IAP实验中,IAP程序通过FlyMCU软件进行烧录,烧录的地址就是0x08000000。

注意:不同系列不同型号的STM32固化的BootLoader是不同的,即使用的通讯接口是不同的。如STM32F1xxx系列只支持USART1:
STM32的ISP下载原理
STM32F4xxx系列只支持USART1、USART3、CAN2等接口:
STM32的ISP下载原理
其他型号的BootLoader支持的接口可查看AN2606文档,链接:
https://www.st.com/content/ccc/resource/technical/document/application_note/b9/9b/16/3a/12/1e/40/0c/CD00167594.pdf/files/CD00167594.pdf/jcr:content/translations/en.CD00167594.pdf
这里,关于数据协议的内容不展开讨论,有兴趣的朋友可自行研究。

IAP与ISP有什么不同?
从基本功能来看,IAP程序与ISP程序所做的事情好像是一样的,都是引导加载程序,所以网上有很多文章把IAP程序与ISP程序都称为BootLoader程序,要注意区分。

但是,ISP与IAP还是有点区别的。
STM32内部Flash分为两部分,System Flash和User Flash。上电之后执行哪个Flash里的程序有boot脚来控制。System Flash内存放的是ST官方编写的自举程序(ISP程序),我们是没有办法改变的。User Flash是我们可以使用的Flash空间,我们编写的代码就是要烧录到User Flash中。我们可以把User Flash分为两部分,前面一部分空间用于烧写我们编写的IAP程序,后面一部分用于烧写我们编写的应用程序。其中,IAP程序用于更新我们的应用程序。
ISP程序用于把我们编写的程序更新到0x08000000地址上,如果我们的产品中的程序有IAP程序+应用程序,则此时0x08000000地址存放的程序就是IAP程序。ISP程序、IAP程序、应用程序的关系示意图如下:
STM32的ISP下载原理
如果我们的产品中的程序只有应用程序,则此时0x08000000地址存放的程序就是应用程序。ISP程序、应用程序的关系示意图如下:
STM32的ISP下载原理

结束语

本文参考了微信公众号嵌入式大杂烩,可自行关注学习更多内容。楼主只是知识的搬运工。欢迎多多交流。