发新帖本帖赏金 100.00元(功能说明)我要提问
返回列表
打印
[APM32F4]

【技术分享】APM32F411为什么要有ISP,你知道多少?

[复制链接]
1742|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kai迪皮|  楼主 | 2023-11-21 14:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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闪烁程序在这里: 411_SysTick_TimeBase.zip (4.28 KB)



使用特权

评论回复

打赏榜单

21小跑堂 打赏了 100.00 元 2023-11-21
理由:恭喜通过原创审核!期待您更多的原创作品~

评论
kai迪皮 2023-11-21 16:00 回复TA
@21小跑堂 :感谢支持 
21小跑堂 2023-11-21 15:10 回复TA
很优质的一篇文章,从原理到优劣势对比描述通俗易懂,文章布局合理,版面清爽,最后在APM32F411VC平台上进行实操演示,结构完整。(蓝V用户,打赏已提升) 
沙发
elephant00| | 2024-1-10 15:29 | 只看该作者
光看这打赏金就知道这帖子写的有多优秀了

使用特权

评论回复
评论
kai迪皮 2024-1-12 14:30 回复TA
感谢支持 
板凳
米多0036| | 2024-1-27 02:07 | 只看该作者
感谢您的发现,也谢谢您的帖子,写的很好,感觉自己茅塞顿开,根据文中提示去尝试,感谢!

使用特权

评论回复
评论
kai迪皮 2024-11-18 11:11 回复TA
希望对你有所帮助 
地板
gangong| | 2024-10-25 16:28 | 只看该作者
非常棒,谢谢分享

使用特权

评论回复
评论
kai迪皮 2024-10-30 18:46 回复TA
感谢支持 
5
黑心单片机| | 2024-11-16 19:17 | 只看该作者
以前从来不关注这些东西,这个写的很棒,还是好理解的

使用特权

评论回复
评论
kai迪皮 2024-11-18 11:11 回复TA
感谢支持,希望对你有帮助。 
发新帖 本帖赏金 100.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

212

帖子

11

粉丝