FLASH分区管理
什么是分区管理
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)擦除分区测试:
擦除成功则分区内容会变成0xFF。
(2)读写测试
读出来的数据与写入的数据相等则测试成功。
程序运行结果:
使用SHELL命令测试FAL
为了方便用户验证 fal 功能是否正常,以及 Flash 驱动是否正确工作,分区表配置是否合理, RT-Thread为 fal 提供了一套测试命令:
1、探测命令
2、擦除命令
3、写数据命令
4、读数据命令
5、性能测试命令
性能测试将会测试 Flash 的擦除、写入及读取速度,同时将会测试写入及读取数据的准确性,保证整个 Flash 或整个分区的写入与读取数据的一致性。
注意事项:
• 如果要修改分区表,请正确配置起始地址和分区大小,不要有分区重叠。
• 在使用 fal 测试命令的时候,请先使用 fal probe 命令选择一个 Flash 分区。
以上就是本次的笔记分享,如有错误,欢迎指出!谢谢~
觅睿科技申请一种 Flash 分区升级方法专利,有效实现 Flash 分区升级
金融界 2024 年 7 月 17 日消息,天眼查知识产权信息显示,杭州觅睿科技股份有限公司申请一项名为“一种 Flash 分区升级方法、装置、设备及存储介质”,公开号 CN202410497071.0,申请日期为 2024 年 4 月。
专利摘要显示,本申请公开了一种 Flash 分区升级方法、装置、设备及存储介质,应用于 SquashFs 系统,涉及嵌入式应用领域,包括:通过内核命令行以及 Linux 获取可用 DDR 内存信息;基于可用 DDR 内存信息及预设虚拟分区创建规则,进行虚拟分区创建、Flash 内容拷贝,以得到与系统 Flash 中的 APP 分区对应的目标虚拟 APP MTD 分区及拷贝状态记录标识符;通过修改预设 readsect 函数的实现,基于拷贝状态记录标识符及目标虚拟 APP MTD 分区进行数据读取,得到目标数据;当满足对应的 APP 分区升级触发条件时,基于所述目标数据进行分区升级。这样一来,能够在有限的资源条件下,有效实现 Flash 分区升级。
本文源自金融界
相关问答
嵌入式linux系统中怎么把应用程序和文件系统放在两个 flash分区 上?第一,应用程序app不论放在哪个目录下面都可以单独升级,不用升级整个文件系统;第二,你可以发flash分成2个分区,root文件系统放系统文件,usr文件系统放程序文...
28335的 flash分区 可以合并吗?这些分区在硬件设计中是固定的,无法直接合并或更改。通常情况下,TMS320F28335的Flash存储器分为以下几个区域:程序存储器(ProgramMemory):用于存储用户...
如何查看linux根 分区 下全部目录及文件的大小-ZOL问答搜索《linux就该这么学》,第6章存储结构与磁盘划分参考下!有用(0)回复jqmgls|xargs-I{}du-s{}希望对你有帮助。有用(0)回复313300你可...
手机QCN文件是什么?mark,QCN文件存储的都是NV项目,一般主要是RFNV项,不能配置在代码中,要写进Flash的特定分区表里面。Qcn文件用RFNVMANAGER打开可以调整修改相对应的NV项来该表...
固态硬盘怎么 分区 ?固态硬盘的存储介质分为两种,一种是采用闪存作为存储介质,另外一种是采用DRAM作为存储介质。最新还有英特尔的XPoint颗粒技术。基于闪存的固态硬盘:基于闪存的...
用 Flash 制作出来的动画怎么转换成GIF格式? - 184****3497 的...1.点击“文件”菜单中的“发布设置”命令,在随后的“发布设置”对话框中的“格式”选项下,你会发现,软件默认只勾选了“Flash(.swf)”和“HTML(.htm...
BIOS是什么的简称?是什么意思?BIOS是是什么BIOS是英文"BasicInputOutputSystem"的缩略词,译为“基本输入输出系统”。BIOS分为哪几种BIOS有三种系统:AwardBI...
u盘 分区 是什么意思?正确的回答应该是:不一定。U盘可以有分区表,也可以没有。早年的U盘出厂时不一定带分区,现在的U盘出厂时基本上都带MBR分区表,但这个分区表是可以被破坏的,去...
电脑fastboot是什么意思?操作手机,例如常见的开机,关机,重...因此主要你手机自带fastboot就可以刷机,即使你手机没有recovery.如何进入fastboot模式1将手机关机\x0d2同时按住按音...
如果2020年 Flash 停止更新,会不会影响到靠 Flash 生存的网页游戏?在很久之前其实Adobe公司就已经宣布了flash将于2020年停止开发,和停止分发Flash浏览器插件。这就意味着以前主靠flash的页游要么转型到HTML5、WebGL、WebAssembl...