RT-Thread学习之对FLASH进行分区管理_第1页
RT-Thread学习之对FLASH进行分区管理_第2页
RT-Thread学习之对FLASH进行分区管理_第3页
RT-Thread学习之对FLASH进行分区管理_第4页
RT-Thread学习之对FLASH进行分区管理_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、什么是分区管理FLASH分区管理是怎么一回事呢?我们可以以个人电脑来做类比,我们的电脑通常都分有很多个盘符:这些都是我们硬盘的分区,我这里装了两块硬盘,512GB的机械硬盘+128GB的固态硬盘,共分CH六个分区,我这里的C盘和 H盘是固态硬盘,其它盘符是机械硬盘:分区是为了方便我们对我们的资料进行管理,各个分区互不影响,比如格式化某个分区只会删除这个分区的内容而不会影响其它分区及整个硬盘等。同样的,在我们的STM32上也是可以进行分区管理的,这篇笔记我们来使用 RT-Thread 的 FAL软件包来对我STM32片内FLASH及片外FLASH的分区管理。FAL软件包介绍FAL (Flash

2、Abstraction Layer) Flash 抽象层,是RT-Thread 的一个软件包,是对Flash 及基于 Flash 的分区进行管理、操作的抽象层,对上层统一了 Flash 及分区操作的API ,并具有以下特性:? 支持静态可配置的分区表,并可关联多个Flash 设备;? 分区表支持自动装载。避免在多固件项目,分区表被多次定义的问题;? 代码精简,对操作系统无依赖,可运行于裸机平台,比如对资源有一定要求的 bootloader ;? 统一的操作接口。保证了文件系统、OTA、 NVM 等对 Flash 有一定依赖的组件,底层Flash 驱动的可重用性;? 自带基于Finsh/MSH的

3、测试命令,可以通过Shell按字节寻址的方式操作(读写擦)Flash 或分区,方便开发者进行调试、测试;FAL软件包使用本笔记主要对潘多拉开发板的FAL例程进行一次梳理,所以部分表述来自于教程文档。我们这个实验建立如下分区表:1、移植接口文件说明FAL软件包的目录如下,其中samples 文件夹下为移植接口文件:其中 fal_cfg.h 为 fal 配置文件(Flash 设备配置和分区表配置)fal 是 Flash 抽象层,要操作Flash 设备必然要将Flash 的读、写、擦接口对接到fal 抽象层中。在 fal 中,使用struct fal_flash_dev 结构体来让用户注册该Flas

4、h设备的操作接口。fal_flash_dev 结构体定义如下所示:fal_flash_stm32f2_port.c 为片内FLASH接口文件,这得根据实际芯片进行修改,主要是封装读、写、擦除函数,例如: TOC o 1-5 h z 片内 Flash 对接说明:Flash 设备名称为onchip_flash ,设备容量为512K,最小擦除单元为2K,无初始化接口。fal_flash_sfud_port.c 为片外FLASH接口文件,这使用SFUD万能SPIFlash 通用驱动库来驱动。片外 Nor Flash 对接说明:Flash 设备名称为nor_flash ,设备容量为16M,最小擦除单元为

5、4K。这里使用的read 、 write 、 erase 接口最终调用SFUD 框架中的接口,无需用户进行驱动开发fal 软件包 API 接口说明这里主要列举出本实验需要用到的API 说明,其它几个未用到的fal 接口函数声明在 fal.h 文件中。查找Flash 设备查找Flash 分区获取分区表从分区读取数据2.7 擦除整个分区数据往分区写入数据擦除分区数据fal 测试函数说明移植完成后,调用fal_init() 初始化该库。测试程序主函数:对 d 分区与 f 分区进行读写测试。( 1)擦除分区测试:/* 擦除整个分区*/ret = fal_partition_erase_all(part

6、ition);if (ret name); ret = -1;return ret;LOG_I(Erase (%s) partition finish!, partiton_name);/* 读出分区数据并校验*/for (i = 0; i len;)rt_memset(buf, 0 x00, BUF_SIZE);len = (partition-len - i) BUF_SIZE ? BUF_SIZE : (partition-len - i);ret = fal_partition_read(partition, i, buf, len);if (ret name);ret = -1;re

7、turn ret;for(j = 0; j len; j+)if (bufj != 0 xFF)LOG_E(The erase operation did not really succeed!);ret = -1;return ret;i += len;擦除成功则分区内容会变成0 xFF。( 2)读写测试/* 往分区写0 x00 */for (i = 0; i len;)rt_memset(buf, 0 x00, BUF_SIZE);len = (partition-len - i) BUF_SIZE ? BUF_SIZE : (partition-len - i);ret = fal_pa

8、rtition_write(partition, i, buf, len);if (ret 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 len;)rt_memset(buf, 0 xFF, BUF_SIZE);len = (partition-len - i) BUF_SIZE ? BUF_SIZE : (partition-len - i);ret

9、= fal_partition_read(partition, i, buf, len);if (ret name);ret = -1;return ret; for(j = 0; j len; j+) if (bufj != 0 x00) 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、读数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论