【技术分享】APM32F411为什么要有ISP,你知道多少?
本帖最后由 kai迪皮 于 2023-11-21 14:19 编辑#申请原创#@21小跑堂
1 背景
翻阅APM32F411的手册,竟然发现它是支持ISP启动的。
我们都知道对flash编程的方式有:
1. ICP:在电路中编程,利用jlink、stlink、Geehylink、烧录器这些都属于在电路中编程。
2. IAP:在应用中编程,利用自留的bootloard程序对应用代码(APP)进行更新程序,属于IAP。
3. ISP:在系统中编程,这个是指在系统中编程。
以上是基本概念,网上有许多这个资料,我就不一一赘述,本文档的一个目的主要是解决一个问题:MCU为什么要有ISP?这个是之前一个小伙伴问的。
2 编程的阶段
在正文开始之前我们先回顾一下,对MCU编程flash一般的场景有哪些,这里我简单总结一下:
1. 开发阶段,为开发工程师在进行一些样品研发阶段,特点是对一个MCU进行多次编程,且需要进行在线仿真测试验证。
2. 量产阶段,为产品批量生产阶段,此时一般是几百上千甚至上万的货品进行出货,特点是量大。
3. 维护阶段,为产品到客户端的时候,要进行的一些产品功能升级等操作。
以上三个阶段基本涵盖了我们的MCU的编程阶段,分清以上阶段,有利于我们在什么时候考虑使用何种编程方式。
3 ISP优劣势对比
3.1 资源使用上
首先我们先看一下ISP对比另外两种编程方式,它的bootloard程序由厂家提供,编程方式一般是厂家提供的基础协议以完成:对flash、选项字节的擦、写、读等功能。常用的通信端口是串行总线:I2C/USART/USB/SPI等。
从上面我们知道,ISP:
1. bootloard程序,不占用额外的flash。
2. 通信端口非常常用,通信端口在下载程序后也可在应用中进行二次利用。
3.2 编程阶段上
上文我们了解了完编程阶段,我们下面讨论一下ISP对比其他两种编程方式时在不同的编程阶段的优劣势。
1. 首先是开发阶段,由于考虑到我们是有仿真需求的,所以我们这个阶段其实大部分人都使用的是ICP。这个阶段ICP的重量级基本是无可撼动。
2. 然后是量产阶段,量产阶段中ICP对ISP的优势就不那么明显了,因为ICP需要额外的烧录接口(SWD/JTAG),对板卡是布线有要求,且这个烧录接口仅是在程序烧录的时候使用到了,在我们的产品使用阶段,是无法使用到的。再者,一般的烧录器均是要大价格的,淘宝我找一下:
若是多线并行烧录,便要采购大量的烧录器,这对成本是一个不小的挑战。若使用ISP程序,则会省下购买烧录器的成本以及布线的PCB损耗。
当然,若是使用烧录器,成本也会随着产品量的后续增加而均摊到每一个产品上的变小。这个需要取舍。
3. 最后是维护阶段,由于维护的时候一般产品是在客户手上,此时一般而言是使用IAP进行编程,因为IAP的协议可自定义,升级也更便捷。但也有特殊情况:
1. MCU的flash不够用,但又不想额外购置spi flash(说白了是因为成本)。
2. MCU做控制芯片,联网的主控另有“其人”,此时从网络端拿到MCU固件再下发给MCU。
以上两种情况,若使用ISP则可以解决一定的困扰,由于ISP不占用flash,MCU的全部flash均可以保存产品的应用程序。当MCU做从控制器时,主机在板卡内部发送升级的数据给MCU,反而也简单,因为协议有现成的,不用自己构思。
通过以上我的分析,相信大家对什么时候使用ISP有了大概的认识。那接下来我们就来看看Geehy的APM32F411的ISP功能支持什么样子的编程吧。
4 APM32F411的ISP
4.1 如何启动
通过查阅APM32F411xCxE手册,它有三种启动方式,而我们所使用的ISP启动方式就是:BOOT1设置0,BOOT1设置1。
且它的系统存储器地址是 0x1FFF0000。我们设置一下BOOT1设置0,BOOT1设置1。
4.2 支持的串行总线
通过查阅APM32F411xCxE手册,这款芯片支持USART/I2C/SPI/USB对其进行编程flash。
4.3 如何使用
为了能够顺利使用APM32F411VC的bootloard,我们需要相应的评估软件:
在这个软件,我们看到Geehy给我们准备了评估USART/USB的功能。
4.3.1 USART
评估这个功能我们直接使用APM32F411VCTINI板上的GEEHYLINK预留出来的端口就行。
然后我们在GeehyProg选择COM,然后选择波特率(我的是115200),就可以连接上APM32F411了。
4.3.2 USB
评估这个功能我们首先得按照一下Geehy的DFU驱动:https://www.geehy.com/uploads/tool/dfu%E9%A9%B1%E5%8A%A8%E5%AE%89%E8%A3%85.zip。安装完驱动,设置相应的BOOT引脚后,连接板卡上的USB接口(注意不是Geehy-Link的接口):
我们可以看到设备管理器的界面:
然后我们在GeehyProg选择USB,然后点击连接,就可以看到我们连接上了APM32F411。
4.3.3 程序下载与运行
由于USART和USB在使用GeehyProg操作的时候界面是一致的,我这里选择USART进行。
我们选择“更新”选项卡,选择我们要下载进APM32F411的程序,然后选择相应的操作:
1. 擦除使用空间:擦除我们程序使用到的flash空间;擦除全部空间,擦除APM32F411的全部flash。一般产线下载程序都是擦除全部空间。
2. 写入校验,用于校验我们写入的数据跟芯片内容是否一致,这个也是必不可少。
3. 写入芯片后运行,这个用来写完程序后直接运行,这个一般看使用场景。如果是在客户端,可以使用这个方式,重启我们的“产品”。让客户感知升级已经完成。
我这里的设置如界面所示。
点击“更新”,会发现程序下载尽进了flash,并开发板上LED2、LED3交替持续闪烁(可以使用“读取”功能)。
5 总结
Geehy带来的APM32F411自带Bootloard,让我们后续的产品更新上有了新思路。本分享只是有了简单使用的分享,其他支持的I2C/SPI还没有涉及,更多内容欢迎大家一起讨论。
下载的LED闪烁程序在这里:
光看这打赏金就知道这帖子写的有多优秀了 感谢您的发现,也谢谢您的帖子,写的很好,感觉自己茅塞顿开,根据文中提示去尝试,感谢! 非常棒,谢谢分享 以前从来不关注这些东西,这个写的很棒,还是好理解的
页:
[1]