搜索
发新帖本帖赏金 100.00元(功能说明)我要提问
12下一页
返回列表

[STM32F1] SD卡Bootloader离线升级基于STM32F103

[复制链接]
13223|29
手机看帖
扫描二维码
随时随地手机跟帖
小叶三千|  楼主 | 2021-7-12 21:43 | 显示全部楼层 |阅读模式
本帖最后由 小叶三千 于 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读写。

2183360ec461ff1c4e.png 3994860ec46264f90a.png

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


1890660ec462b89e0e.png


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

3070660ec4636de095.png 7423660ec4639d88cb.png

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

1780560ec464ea3d71.png

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


7632660ec465607897.png

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


7876360ec465e4ed00.png


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


8464760ec4666a28bc.png


    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, 下载次数: 188

使用特权

评论回复

打赏榜单

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 | 显示全部楼层
大赞,收藏了,谢谢分享。

使用特权

评论回复
dql2015| | 2021-7-14 15:28 | 显示全部楼层
很不错

使用特权

评论回复
勇敢的大白菜| | 2021-7-14 15:50 | 显示全部楼层
文件操作系统还是比较好好用的。

使用特权

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

是啊,文件系统真不错

使用特权

评论回复
自己造声卡| | 2021-7-14 17:34 | 显示全部楼层
这个资料太珍贵了,不错的。很棒的应用技术的。

使用特权

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

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

使用特权

评论回复
战将之斧| | 2021-7-17 16:46 | 显示全部楼层
学习下

使用特权

评论回复
qq147735456| | 2021-7-19 11:51 | 显示全部楼层
用U盘升级会更好,

使用特权

评论回复
小叶三千|  楼主 | 2021-7-19 13:21 | 显示全部楼层
qq147735456 发表于 2021-7-19 11:51
用U盘升级会更好,

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

使用特权

评论回复
Annie556| | 2021-7-19 23:45 | 显示全部楼层
这个操作挺好的,方便升级

使用特权

评论回复
Carina卡| | 2021-7-19 23:47 | 显示全部楼层
SD卡升级  是不是有些风险呀,谁都可以更改你的程序了

使用特权

评论回复
Betty1299| | 2021-7-19 23:47 | 显示全部楼层
这种升级还是不错的,主要是方便

使用特权

评论回复
B1lanche| | 2021-7-19 23:48 | 显示全部楼层
挺好,方便出差做技术支持的同事了

使用特权

评论回复
Betty996| | 2021-7-19 23:48 | 显示全部楼层
支持楼主,感谢分享 写的很详细

使用特权

评论回复
alxd| | 2021-7-19 23:50 | 显示全部楼层
其实BootLoader升级,知道一种其他的也就差不多了,就是做好数据完整性,校验做好,保证数据准确性

使用特权

评论回复
Candic12e| | 2021-7-19 23:51 | 显示全部楼层
这种就是容易被恶意升级,如果换成特殊的升级方式,就能好一丢丢

使用特权

评论回复
Charlene沙| | 2021-7-19 23:51 | 显示全部楼层
是不是可以演变成脱机烧录烧录器呀 嘿嘿

使用特权

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

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 1 kk的回忆 得到打赏 ¥561.01
  • 2 火星国务卿 得到打赏 ¥518.00
  • 3 呐咯密密 得到打赏 ¥295.00
  • 4 小叶三千 得到打赏 ¥210.00
  • 5 jinglixixi 得到打赏 ¥190.00
  • 6 Gavin3389 得到打赏 ¥180.00
  • 7 神圣雅诗人 得到打赏 ¥170.00
  • 8 xyz549040622 得到打赏 ¥150.00
  • 9 linghz 得到打赏 ¥120.00
  • 10 137017878 得到打赏 ¥115.00
在线客服 快速回复 返回顶部 返回列表