[技术相关]【SWDM-QFP100-34SVEA3测评】SD卡IAP实例及FLASH操作注意事项

本文介绍了如何在SWM341微控制器上利用SDIO驱动的SD卡实现IAP(In-ApplicationProgramming)功能,包括硬件准备、FLASH分区、FATFS文件系统的移植、BOOTloader和应用程序的升级流程。文中提到了关键的API接口实现和中断向量的重新映射技巧,并提供了详细的测试过程。
摘要由CSDN通过智能技术生成

在看原厂提供的资料时看到有个 341-Boot定制资料-220615 文件,以为是现成的用户BOOT例程,但实际只是简单的举例,并没有完整的实现IAP应用

  

正好前一阵在搞SD卡实现IAP功能,但使用的是SPI驱动的SD卡,但SWMDM-QFP100-34SVEA3&A2板上的SD卡是使用SDIO驱动的,顺便在这块板上使用SDIO驱动SD卡把IAP功能能完整的实现一下。

1.   硬件部分说明1.1 硬件说明

使用SWMDM-QFP100-34SVEA3&A2板上的SD卡槽,使用杜邦线将A5和LED连接,用于驱动LED进行状态指示。串口收发使用M0 M1进行收发

 

使用DAP-LINK进行程序下载和仿真

   

1.2 FLASH说明

SWM341的FLASH有512KB,128个页,每个页大小为4KB,需要根据使用情况对FLASH进行划分。

 

本例程FLASH划分:

  
  

起始地址

结束地址

大小

页数

Bootloader区

0x0000000

0x0003FFF

16KB

4

升级标志去

0x0004000

0x0004FFF

4KB

1

Application区

0x0005000

0x007AFFF

492KB

123

 


2.   软件部分说明

因为要使用SD卡读写文件,需要文件系统移植,这里采用的是FATFS文件系统。另外还涉及到片内FLASH的拆除写入,这部分功能由厂商提供的API接口实现

2.1   移植FATFS

fatfs 的官方网站: http://elm-chan.org/fsw/ff/00index_e.html

厂家提供的SD卡例程中已经有移植好的例程

这里我对移植过程做个简单的描述

首先添加fatfs源码

添加.c文件

添加.h文件路径

diskio.c文件是移植的接口文件,里面需要根据实际使用情况实现接口函数

disk_status、disk_initialize、disk_read、disk_write、disk_ioctl等函数

这些函数的具体操作需要调用SD_SPI中的先关API

FATFS定义了RAM MMC(SD/TF) USB设备的盘符,这些盘符在操作API时会用到

ffconf.h内是FATFS的配置文件,相关配置项需要根据自己的实际情况进行配置

片内FLASH_IAP移植

此部分直接使用原厂提供的IAP函数即可,将文件添加到工程

添加.c文件

添加.h文件路径

这里重点说一下SWM在FLASH操作上的注意事项

因为FLASH自带 CACHE,厂家将FLASH操作都封装为了API,直接调用API函数操作即可,但在写入函数时有严格的要求

重点是即使你要写入的是 一个字节 ,但在实际操作时也要按 4个 字 的长度才行

  

至此,软件包的移植工作就都完成了,接下来实现具体的逻辑操作。

2.2   升级流程说明

本实例仅实现基础功能,在实际使用过程中需要根据实际情况进行修改

整体流程如下:

整个方案流程如下

1     MCU启动

2      bootloader判断升级标志状态,标志不为0x12345678,进入步骤3,标志为进行app0x12345678,进行跳转至app进入步骤7

3      bootloader初始化外设

4      bootloader初始化文件系统

5      bootloader检查app升级文件是否存在,升级文件存在,输出提示信息,并等待升级命令。未收到升级命令则正常运行。

6      bootloader收到升级命令,读取SD卡内升级文件写入app区,写入完成,跳转至APP

7      app判断升级标志状态,标志不为0x12345678,代表第一次进入app,需要将升级标志写为0x12345678。标志为0x12345678,代表从bootloader正常启动。

8      app初始化外设

9      app初始化文件系统

10    app检查app升级文件是否存在,升级文件存在,输出提示信息,并等待升级命令

11    app收到升级命令,需要先擦除升级标志,并进行系统复位,回到步骤1。未收到升级命令则正常运行。

我的这个SD_IAP实例因为BootLoader和application功能都十分类似,因此使用一个工程下的不同项目进行维护

在不同点使用宏定义进行编译选择。在app内添加SD_IAP_APP宏定义作为编译开关。

 

不同项目输出的bin文件名称分别进行了设置,防止出现错误

  

这里重点说一个MDK的小技巧,在进入bootloader和application后都要进行中断向量的重新映射才能使程序正常运行,例如:

一般的做法都是在bootloader和application使用不同的宏定义区实现,比如

这种方式在修改时有时会遗忘,比较麻烦,MDK可采用下图的方式修改,一劳永逸。不用再为不同起始地址配置不同的宏定义,一切都由MDK根据FLASH地址的配置自动设置。

3.   升级过程测试

首先将BOOT程序使用下载器下载到芯片里,下载是要设置为全片擦除

硬件状态是LED指示灯以1秒间隔亮灭闪烁

检测到等级文件后串口会打印升级提示

发送升级命令 aa0155

Bootloader进**读取并写入到APP区,完成后会跳转至APP区,硬件状态是LED指示灯以300毫秒间隔亮灭闪烁

在APP内识别到SD卡内的升级文件后,通过升级命令可以跳转回BOOT区

至此,整个使用SD卡进行IAP的过程就实现完了,本例程实现了操作的简化流程,可根据实际应用情况进行修改。
---------------------
作者:6552918
链接:https://bbs.21ic.com/icview-3295540-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值