打印
[技术相关]

【SWDM-QFP100-34SVEA3测评】SD卡IAP实例及FLASH操作注意事项

[复制链接]
611|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 6552918 于 2023-4-11 11:19 编辑

#申请原创# #技术资源#@21小跑堂
在看原厂提供的资料时看到有个 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的过程就实现完了,本例程实现了操作的简化流程,可根据实际应用情况进行修改。

源码: SWM341_Lib-SD_IAP.zip (3.65 MB)
视频:


使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:北京汇冠触摸技术有限公司/电子工程师
简介:电子工程师,嵌入式应用爱好者。

102

主题

1233

帖子

6

粉丝