什么是分区管理

FLASH分区管理是怎么一回事呢?我们可以以个人电脑来做类比,我们的电脑通常都分有很多个盘符:

这些都是我们硬盘的分区,我这里装了两块硬盘,512GB的机械硬盘+128GB的固态硬盘,共分C~H六个分区,我这里的C盘和H盘是固态硬盘,其它盘符是机械硬盘:

分区是为了方便我们对我们的资料进行管理,各个分区互不影响,比如格式化某个分区只会删除这个分区的内容而不会影响其它分区及整个硬盘等。

同样的,在我们的STM32上也是可以进行分区管理的,这篇笔记我们来使用RT-Thread的FAL软件包来对我STM32片内FLASH及片外FLASH的分区管理。

FAL软件包介绍

FAL (Flash Abstraction Layer) Flash 抽象层,是 RT-Thread 的一个软件包,是对 Flash 及基于 Flash的分区进行管理、操作的抽象层,对上层统一了 Flash 及分区操作的 API ,并具有以下特性:

• 支持静态可配置的分区表,并可关联多个 Flash 设备;

• 分区表支持 自动装载。避免在多固件项目,分区表被多次定义的问题;

• 代码精简,对操作系统 无依赖,可运行于裸机平台,比如对资源有一定要求的 bootloader;

• 统一的操作接口。保证了文件系统、 OTA、 NVM 等对 Flash 有一定依赖的组件,底层 Flash 驱动的可重用性;

• 自带基于 Finsh/MSH 的测试命令,可以通过 Shell 按字节寻址的方式操作(读写擦) Flash 或分区,方便开发者进行调试、测试;

FAL软件包使用

本笔记主要对潘多拉开发板的FAL例程进行一次梳理,所以部分表述来自于教程文档。我们这个实验建立如下分区表:

1、移植接口文件说明

FAL软件包的目录如下,其中samples文件夹下为移植接口文件:

其中fal_cfg.h 为fal 配置文件(Flash 设备配置和分区表配置) :

fal 是 Flash 抽象层,要操作 Flash 设备必然要将 Flash 的读、写、擦接口对接到 fal 抽象层中。在 fal中,使用 struct fal_flash_dev 结构体来让用户注册该 Flash 设备的操作接口。fal_flash_dev 结构体定义如下所示:

fal_flash_stm32f2_port.c为片内FLASH接口文件,这得根据实际芯片进行修改,主要是封装读、写、擦除函数,例如:

这和我们之前分享的:使用STM32内部Flash额外的空间来存储数据

步骤差不多。片内 Flash 对接说明 :

Flash 设备名称为 onchip_flash,设备容量为 512K,最小擦除单元为 2K,无初始化接口。

fal_flash_sfud_port.c为片外FLASH接口文件,这使用SFUD 万能 SPI Flash 通用驱动库来驱动。 片外 Nor Flash 对接说明 :

Flash 设备名称为 nor_flash,设备容量为 16M,最小擦除单元为 4K。这里使用的 read、 write、 erase接口最终调用 SFUD 框架中的接口,无需用户进行驱动开发 。

2、fal软件包API接口说明

这里主要列举出本实验需要用到的API说明,其它几个未用到的fal接口函数声明在fal.h文件中。

2.1 查找 Flash 设备

2.2 查找 Flash 分区

2.3 获取分区表

2.4 从分区读取数据

2.5 往分区写入数据

2.6 擦除分区数据

2.7 擦除整个分区数据

3、fal测试函数说明

移植完成后,调用 fal_init() 初始化该库。测试程序主函数:

对d分区与f分区进行读写测试。

(1)擦除分区测试:

 /* 擦除整个分区 */ret = fal_partition_erase_all(partition);if (ret < 0){LOG_E("Partition (%s) erase failed!", partition->name);ret = -1;return ret;}LOG_I("Erase (%s) partition finish!", partiton_name);
​/* 读出分区数据并校验 */for (i = 0; i < partition->len;){rt_memset(buf, 0x00, BUF_SIZE);
​len = (partition->len - i) > BUF_SIZE ? BUF_SIZE : (partition->len - i);
​ret = fal_partition_read(partition, i, buf, len);if (ret < 0){LOG_E("Partition (%s) read failed!", partition->name);ret = -1;return ret;}
​for(j = 0; j < len; j++){if (buf[j] != 0xFF){LOG_E("The erase operation did not really succeed!");ret = -1;return ret;}}i += len;}

擦除成功则分区内容会变成0xFF

(2)读写测试

    /* 往分区写0x00 */for (i = 0; i < partition->len;){rt_memset(buf, 0x00, BUF_SIZE);
​len = (partition->len - i) > BUF_SIZE ? BUF_SIZE : (partition->len - i);
​ret = fal_partition_write(partition, i, buf, len);if (ret < 0){LOG_E("Partition (%s) write failed!", partition->name);ret = -1;return ret;}
​i += len;}LOG_I("Write (%s) partition finish! Write size %d(%dK).", partiton_name, i, i/1024);
​/* 读取分区数据并校验 */for (i = 0; i < partition->len;){rt_memset(buf, 0xFF, BUF_SIZE);
​len = (partition->len - i) > BUF_SIZE ? BUF_SIZE : (partition->len - i);
​ret = fal_partition_read(partition, i, buf, len);if (ret < 0){LOG_E("Partition (%s) read failed!", partition->name);ret = -1;return ret;}
​for(j = 0; j < len; j++){if (buf[j] != 0x00){LOG_E("The write operation did not really succeed!");ret = -1;return ret;}}
​i += len;}

读出来的数据与写入的数据相等则测试成功。

程序运行结果:

使用SHELL命令测试FAL

为了方便用户验证 fal 功能是否正常,以及 Flash 驱动是否正确工作,分区表配置是否合理, RT-Thread为 fal 提供了一套测试命令:

1、探测命令

2、擦除命令

3、写数据命令

4、读数据命令

5、性能测试命令

性能测试将会测试 Flash 的擦除、写入及读取速度,同时将会测试写入及读取数据的准确性,保证整个 Flash 或整个分区的写入与读取数据的一致性。

注意事项:

• 如果要修改分区表,请正确配置起始地址和分区大小,不要有分区重叠。

• 在使用 fal 测试命令的时候,请先使用 fal probe 命令选择一个 Flash 分区。

以上就是本次的笔记分享,如有错误,欢迎指出!谢谢~更多笔记可关注【嵌入式大杂烩】进行阅读

flash软件_FAL软件包的使用:FLASH分区管理相关推荐

  1. 如何加载字体到flash软件中

    已经过实际操作检测 1.将所需要的字体从网上下载过来 2.将字体复制到c:/windows/font里 3.打开flash文件,可在字符系列中找到此字体. 原因: 系统是统一的.这也是因为,在学校新电 ...

  2. Windows 蠕虫首次现身 Mac 电脑:伪装成 Adobe Flash 软件

    据科技博客 AppleInsider 北京时间 5 月 6 日消息,长期以 Windows 用户为侵袭目标的恶意软件"Snake"(也被称为 Turla 或 Uroboros),日 ...

  3. flash软件视频不能测试,360安全卫士解决视频播放错误怎么办?无法调出flash解决办法...

    使用电脑继续观看视频的时候,小伙伴们通常都会遇到一件事,那就是视频突然的播放错误,这个时候怎么使用360安全卫士解决,因此就让小编给大家详细的讲讲解决办法吧 视频播放错误解决办法介绍 [简易步骤]: ...

  4. iSpring Suite(ppt转flash软件)官方正式版V10.1.1 | ispring插件下载 | ppt怎么转成动画

    ispring是什么软件?iSpring Suite 是一款相当实用的专业ppt转flash软件,准确的说iSpring是一个PPT的增强插件,拥有简洁大方易用使用的用户界面,能帮助大家轻松的将PPT ...

  5. 小学生学计算机flash,利用Flash软件进行小学电脑绘画教学

    摘要 Flash作为一个专业动画制作软件,其绘画功能十分强大,而中高年级的小学生学习起来又不像学别的软件那么吃力.因此,这为小学阶段利用Flash进行电脑绘画教学提供了良好条件.笔者在教学中选用Fla ...

  6. 生物信息百Jia软件(十七):flash

    欢迎订阅WX众号:基因学苑,更多精彩内容等你发掘! 基因学苑Q群:32798724 编者按 前面写了专题<手把手教你生物信息分析平台搭建>,然后又介绍了很多<生物神奇网站>资源 ...

  7. flash软件下载安装

    flash软件是一款动画制作软件,除动画制作以外,还可以进行绘图,抠图等操作,相比photoshop简单易用,下面介绍一下flash软件的安装办法: 参考: https://zhuanlan.zhih ...

  8. 小学计算机flash,小学信息技术第五册  9.初识flash软件

    第九课 初识flash软件 授课年级:五年级 授课老师:王丽 教材分析: 本课是介绍flash软件的第1课.主要是通过一个flash游戏向学生说明flash软件的启动方法与界面组成.掌握这些知识以后, ...

  9. Flash:Flash动画设计软件界面的简介、Flash AS 3.0代码编程入门教程之详细攻略

    Flash:Flash动画设计软件界面的简介.Flash AS 3.0代码编程入门教程之详细攻略 目录 Flash动画设计软件界面的简介 快捷键 菜单栏 下边工具栏 右边工具栏 工具箱 Flash A ...

最新文章

  1. debian8下给postgresql9.5编译配置pgpool-II-3.5
  2. VTK:Utilities之CheckVTKVersion
  3. Hadoop 03_核心:读写流程
  4. 安卓从业者应该关注:Android 6.0的运行时权限
  5. php mysql study_PHPstudy升级mysql数据库
  6. Eclipse和Tomcat绑定并且将上传资源到Tomcat上
  7. 图形驱动程序和显卡驱动什么区别_科普:游戏显卡和专业图形显卡存在的区别...
  8. 用python numpy实现幻方
  9. SpringCloud工作笔记038---spring cloud-简单网关权限控制_直接在zuul里面做
  10. MySQL设置数据格为空白或NULL
  11. 2018服务器 芯片组,2018最新主板知识详解,详谈DIY(主板篇)
  12. GridView动态添加模版列
  13. 面试逻辑题分享--字母数字映射关系推算题
  14. PS CS6增加导出ICO图标文件(ICOFormat64.8bi)64位系统
  15. 马云对话马斯克:福报变成了一周工作12小时?
  16. Mac电脑下好用的mac版远程控制远程桌面软件
  17. 洛谷P2905 [USACO08OPEN]农场危机Crisis on the Farm
  18. 2021乌镇互联网大会,数字联盟解读网络安全与信息保护
  19. 百度关键词分析工具_【轰炸类】关键词百度首页分析【澳门XXX】【实战分析】...
  20. latex里图片大小如何调整_调整LaTeX文档页面的大小

热门文章

  1. Get爱康icon诺迪克跑步机,让自律变成一种习惯~
  2. 树莓派从零开始快速入门第8讲——单总线(以DS18B20为例)
  3. Jest测试框架入门之匹配器与测试异步代码
  4. BM开发出量子计算机,迄今错误率最低量子比特面世,有望推进量子计算机研发工作...
  5. Howdoo欢迎Mitel成为内容发布支持者
  6. EXCEPT、INTERSECT和UNION
  7. 2017年加密货币进入国际金融体系
  8. 按键精灵打怪学习-前台和内网发送后台验证码
  9. 麒麟操作系统V10默认的大页大小
  10. 跳跃游戏(jump-game)图解