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

SD卡Bootloader离线升级基于STM32F103

[复制链接]
18067|87
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 小叶三千 于 2021-7-12 21:46 编辑

#申请原创# @21小跑堂

    做过很多Bootloader升级的产品,感觉Bootloader还是很有意思的。通过芯片的一段程序,去更新剩余的程序。从而达到更新产品软件的作用。芯片自带的Bootloader是通过芯片厂家的协议,通过烧录器把程序更新到Flash里面。而我们自己为什么还要部分的空间再写一个Bootloader呢?因为我们想通过我们自己的方式,升级芯片里的软件。
    传输方式那就太多了,基本有的通信方式理论上都可以进行传输升级,包括CAN、SPI、IIC、USART等等。做过汽车上面的CAN升级、USART升级、SD卡升级、OTA升级。其中CAN和USART升级都是在线升级,SD卡可以称之为离线升级。就是不用PC端,在线下插入SD卡,就可完成升级。(CAN和USART如果有硬件升级的设备,也可以做成离线升级)。
    讲一下SD卡的升级,使用离线升级,设备端需要有SD卡槽,升级的时候,将升级的文件放入SD卡中,再插入卡槽完成升级。(SD卡使用的SPI驱动,原理上其实也可以称为SPI升级。。。)
    这里使用STM32F103RCT6的芯片制作SD卡Bootloader。

一.硬件
    我使用的原子mini开发板,芯片为STM32F103RCT6,带SPI驱动的SD卡槽。

二.软件(寄存器编码,为的是减少Bootloader的代码占用空间)
1. SD卡使用的是SPI驱动。SPI1_Init()初始化,SPI1_ReadWriteByte读写。


2. SD卡驱动和FATFS文件系统。读SD卡、写SD卡、初始化SD卡等等,都是写好的驱动程序,直接可以用。这里也是用到了FATFS文件系统,需要移植两个文件。这里不多说。




3. 芯片Flash的操作。由于升级APP程序片需要用到Flash的操作,所以Flash的擦除,写入不能少。


4. APP程序跳入。当Flash里面写入了更新后的程序,需要跳转到Flash的起始地址,所以有一个函数需要。


5. 应用部分:
  首先选择一个起始地址,是需要刷写程序的起始地址。只要大于Bootloader程序的总长度,并且APP程序的长度不能超过(芯片大小 - Bootloader程序大小)即可。
  然后Flash中选取一个地址作为标志位,用于判断是否需要更新程序。
  最后就是读取SD卡里的文件,把读取的写入到对应的Flash里面,完成跳转。



    Main函数,先检测0x08002FFE这个地址的标志位,如果是0x02,说明有应用APP程序,不需要进行升级,所以直接iap_load_app(FLASH_APP_ADDR)跳转到APP的起始地址,开始运行程序,BOOT程序就到这里结束。
如果不是0x02,说明是新的芯片,或者是没有进行过升级的。就开始进行BOOT程序的升级流程SD_Update()。




  这里是打开SD卡、挂载的一些操作。如果成功进行到下面。




    f_read读取SD卡中的文件&file,并赋值到buffer数组中,STMFLASH_ErasePage擦除一片FLash区域,STMFLASH_WriteHalfWord进行写入。写入完成后PageOffest += STM_PAGE_SIZE,记录写入的片数,继续读SD卡的文件(注意,这里不是一次性全部读完,每次读取STM_PAGE_SIZE的大小,再写入),擦除写入。。。直到(res || br = 0),没有可读的,break,退出while(1)循环。擦除标志位的地址STMFLASH_ErasePage(0x08002FFE),并写入0xFF02,*(vu16*)(u16)(0x08000000 + 0x2FFE)=0xFF02(下次上电后读到这个0x02的标志位说明已经有APP程序了,直接跳转到APP地址就好了)。
  最后iap_load_app(FLASH_APP_ADDR),SD卡的Bootloader流程结束,进入到APP程序中运行了。
  附上Keil工程共大家参考。


SD卡BT程序V0.1.rar

300.49 KB

使用特权

评论回复

打赏榜单

21小跑堂 打赏了 100.00 元 2021-07-14
理由:恭喜通过原创奖文章审核!请多多加油哦!

评论
小叶三千 2021-7-14 15:25 回复TA
@21小跑堂 :好的,没问题,下次换一下 
21小跑堂 2021-7-14 15:10 回复TA
听说代码截图换成正常效果的更赞哦~ 
沙发
trucyw| | 2021-7-13 12:17 | 只看该作者

使用特权

评论回复
板凳
一路向北lm| | 2021-7-13 17:03 | 只看该作者
很棒

使用特权

评论回复
地板
lidi911| | 2021-7-14 08:29 | 只看该作者
大赞,收藏了,谢谢分享。

使用特权

评论回复
5
dql2015| | 2021-7-14 15:28 | 只看该作者
很不错

使用特权

评论回复
6
勇敢的大白菜| | 2021-7-14 15:50 | 只看该作者
文件操作系统还是比较好好用的。

使用特权

评论回复
7
小叶三千|  楼主 | 2021-7-14 16:08 | 只看该作者
勇敢的大白菜 发表于 2021-7-14 15:50
文件操作系统还是比较好好用的。

是啊,文件系统真不错

使用特权

评论回复
8
自己造声卡| | 2021-7-14 17:34 | 只看该作者
这个资料太珍贵了,不错的。很棒的应用技术的。

使用特权

评论回复
9
小叶三千|  楼主 | 2021-7-14 21:28 | 只看该作者
自己造声卡 发表于 2021-7-14 17:34
这个资料太珍贵了,不错的。很棒的应用技术的。

不至于。。。还是比较简单的

使用特权

评论回复
10
战将之斧| | 2021-7-17 16:46 | 只看该作者
学习下

使用特权

评论回复
11
qq147735456| | 2021-7-19 11:51 | 只看该作者
用U盘升级会更好,

使用特权

评论回复
12
小叶三千|  楼主 | 2021-7-19 13:21 | 只看该作者
qq147735456 发表于 2021-7-19 11:51
用U盘升级会更好,

适用于那些没有U盘接口的芯片哈

使用特权

评论回复
13
Annie556| | 2021-7-19 23:45 | 只看该作者
这个操作挺好的,方便升级

使用特权

评论回复
14
Carina卡| | 2021-7-19 23:47 | 只看该作者
SD卡升级  是不是有些风险呀,谁都可以更改你的程序了

使用特权

评论回复
15
Betty1299| | 2021-7-19 23:47 | 只看该作者
这种升级还是不错的,主要是方便

使用特权

评论回复
16
B1lanche| | 2021-7-19 23:48 | 只看该作者
挺好,方便出差做技术支持的同事了

使用特权

评论回复
17
Betty996| | 2021-7-19 23:48 | 只看该作者
支持楼主,感谢分享 写的很详细

使用特权

评论回复
18
alxd| | 2021-7-19 23:50 | 只看该作者
其实BootLoader升级,知道一种其他的也就差不多了,就是做好数据完整性,校验做好,保证数据准确性

使用特权

评论回复
19
Candic12e| | 2021-7-19 23:51 | 只看该作者
这种就是容易被恶意升级,如果换成特殊的升级方式,就能好一丢丢

使用特权

评论回复
20
Charlene沙| | 2021-7-19 23:51 | 只看该作者
是不是可以演变成脱机烧录烧录器呀 嘿嘿

使用特权

评论回复
发新帖 本帖赏金 100.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:清智科技嵌入式工程师
简介:单片机嵌入式底层开发,汽车电子

43

主题

497

帖子

16

粉丝