搜索
bottom↓
回复: 30
打印 上一主题 下一主题

【分享】Flash 管理工具: FAL (Flash 抽象层)库

  [复制链接]

出0入198汤圆

跳转到指定楼层
1
发表于 2019-5-20 20:20:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sunnydragon 于 2019-5-20 20:23 编辑

之前做了一些关于 Flash 的开源组件,比如:EasyFlashSFUDEasyLogger(内部的 Flash 插件),经常会有些网友问我一些关于 Flash 的问题,比如:在 Flash 的使用过程相信大家会经常遇到 OTA 升级时如何对 Flash 进行分区,多个 Flash 如何集中管理,片外的 fatfs 文件系统能否跑在片内等。
今天跟大家分享一个运行在MCU上的 Flash 管理工具,名为 FAL(Flash 抽象层),它是 RT-Thread 开源的一个通用软件包,能够运行在裸机平台,也能无缝兼容 RT-Thread 系统。一起来看下它的特色。

介绍
FAL (Flash Abstraction Layer) Flash 抽象层是对 Flash 及基于 Flash 的分区进行管理、操作的抽象层,对上层统一了 Flash 及 分区操作的 API ,并具有以下特性:
  • 支持静态可配置的分区表,并可关联多个 Flash 设备;
  • 分区表支持 自动装载 。避免在多固件项目,分区表被多次定义的问题;
  • 代码精简,对操作系统 无依赖 ,可运行于裸机平台,比如对资源有一定要求的 Bootloader;
  • 统一的操作接口。保证了文件系统、OTA、NVM(例如:EasyFlash) 等对 Flash 有一定依赖的组件,底层 Flash 驱动的可重用性;
  • 自带基于 Finsh/MSH 的测试命令,可以通过 Shell 按字节寻址的方式操作(读写擦) Flash 或分区,方便开发者进行调试、测试;

FAL 框架图如下:

使用 fal
使用 fal 前需要对项目的 Flash 进行移植工作,移植的文档位于: /samples/porting/README.md 。移植完成后,调用 fal_init() 初始化该库。

常见应用
Finsh/MSH 测试命令
fal 提供了丰富的测试命令,项目只要在 RT-Thread 上开启 Finsh/MSH 功能即可。在做一些基于 Flash 的应用开发、调试时,这些命令会非常实用。它可以准确的写入或者读取指定位置的原始 Flash 数据,快速的验证 Flash 驱动的完整性,甚至可以对 Flash 进行性能测试。
具体功能如下:输入 fal 可以看到完整的命令列表
  1. msh />fal
  2. Usage:
  3. fal probe [dev_name|part_name]   - probe flash device or partition by given name
  4. fal read addr size               - read 'size' bytes starting at 'addr'
  5. fal write addr data1 ... dataN   - write some bytes 'data' starting at 'addr'
  6. fal erase addr size              - erase 'size' bytes starting at 'addr'
  7. fal bench <blk_size>             - benchmark test with per block size

  8. msh />
复制代码

指定待操作的 Flash 设备或 Flash 分区
当第一次使用 fal 命令时,直接输入 fal probe 将会显示分区表信息。可以指定待操作的对象为分区表里的某个分区,或者某个 Flash 设备。
分区或者 Flash 被成功选中后,还将会显示它的一些属性情况。大致效果如下:
  1. msh />fal probe   
  2. No flash device or partition was probed.
  3. Usage: fal probe [dev_name|part_name]   - probe flash device or partition by given name.
  4. [I/FAL] ==================== FAL partition table ====================
  5. [I/FAL] | name      | flash_dev    |   offset   |    length  |
  6. [I/FAL] -------------------------------------------------------------
  7. [I/FAL] | bl        | stm32_onchip | 0x00000000 | 0x00010000 |
  8. [I/FAL] | app       | stm32_onchip | 0x00010000 | 0x000b0000 |
  9. [I/FAL] | ef        | norflash0    | 0x00000000 | 0x00100000 |
  10. [I/FAL] | download  | norflash0    | 0x00100000 | 0x00100000 |
  11. [I/FAL] =============================================================
  12. msh />
  13. msh />fal probe download
  14. Probed a flash partition | download | flash_dev: norflash0 | offset: 1048576 | len: 1048576 |.
  15. msh />
复制代码
擦除数据
先输入 fal erase ,后面跟着待擦除数据的起始地址以及长度。以下命令为:从 0 地址(相对 Flash 或分区)开始擦除 4096 字节数据
注意:根据 Flash 特性,擦除动作将按扇区对齐进行处理。所以,如果擦除操作地址或长度未按照 Flash 的扇区对齐,将会擦除掉与其关联的整个扇区数据。
  1. msh />fal erase 0 4096
  2. Erase data success. Start from 0x00000000, size is 4096.
  3. msh />
复制代码

写入数据
先输入 fal write ,后面跟着 N 个待写入的数据,并以空格隔开。以下命令为:从地址 8 的位置依次开始写入 1、2、3、4 、 5 这 5 个字节数据
  1. msh />fal write 8 1 2 3 4 5
  2. Write data success. Start from 0x00000008, size is 5.
  3. Write data: 1 2 3 4 5 .
  4. msh />
复制代码

读取数据
先输入 fal read ,后面跟着待读取数据的起始地址以及长度。以下命令为:从 0 地址开始读取 64 字节数据
  1. msh />fal read 0 64
  2. Read data success. Start from 0x00000000, size is 64. The data is:
  3. Offset (h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
  4. [00000000] FF FF FF FF FF FF FF FF 01 02 03 04 05 FF FF FF
  5. [00000010] FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  6. [00000020] FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  7. [00000030] FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

  8. msh />
复制代码

性能测试
性能测试将会测试 Flash 的擦除、写入及读取速度,同时将会测试写入及读取数据的准确性,保证整个 Flash 或整个分区的 写入与读取 数据的一致性。
先输入 fal bench ,后面跟着待测试 Flash 的扇区大小(请查看对应的 Flash 手册,SPI Nor Flash 一般为 4096)。由于性能测试将会让整个 Flash 或者整个分区的数据丢失,所以命令最后必须跟 yes 。
  1. msh />fal bench 4096 yes
  2. Erasing 1048576 bytes data, waiting...
  3. Erase benchmark success, total time: 2.674S.
  4. Writing 1048576 bytes data, waiting...
  5. Write benchmark success, total time: 7.107S.
  6. Reading 1048576 bytes data, waiting...
  7. Read benchmark success, total time: 2.716S.
  8. msh />
复制代码
更多 API 及最新代码详见 GitHub:https://github.com/RT-Thread-packages/fal
本坛下载:




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

2
发表于 2019-5-20 20:38:00 | 只看该作者
强大!感谢楼主分享!!!

出0入0汤圆

3
发表于 2019-5-20 20:54:28 | 只看该作者
感谢分享,空了仔细研究一下

出0入0汤圆

4
发表于 2019-5-20 21:01:35 来自手机 | 只看该作者
楼主发的从来都是精品

出0入4汤圆

5
发表于 2019-5-20 21:04:08 | 只看该作者
lz把flash玩的真是666

出0入134汤圆

6
发表于 2019-5-20 21:25:39 | 只看该作者
楼主发的都是精品

出0入0汤圆

7
发表于 2019-5-20 21:50:41 来自手机 | 只看该作者
你咋这么牛逼呢

出140入115汤圆

8
发表于 2019-5-20 21:57:45 来自手机 | 只看该作者
支持,楼主非常厉害

出0入42汤圆

9
发表于 2019-5-21 08:07:33 | 只看该作者
谢谢楼主无私分享

出0入0汤圆

10
发表于 2019-5-21 08:34:32 | 只看该作者
先mark下,有时间研究研究。

出0入0汤圆

11
发表于 2019-5-21 08:37:05 | 只看该作者
谢谢楼主无私分享

出0入42汤圆

12
发表于 2019-5-21 08:59:15 来自手机 | 只看该作者
多谢楼主的无私奉献,每次分享都是大作,赞

出0入30汤圆

13
发表于 2019-5-21 09:16:19 | 只看该作者
楼主牛。目前正在学习,后面的项目中可以用到。感谢。已star!

出20入0汤圆

14
发表于 2019-5-21 10:27:32 | 只看该作者
楼主分享的都很有质量

出0入0汤圆

15
发表于 2019-5-21 10:41:59 | 只看该作者
楼主NB  已star顺便也star了RT-Thread

出0入0汤圆

16
发表于 2019-5-21 11:10:08 | 只看该作者
感謝分享!

出0入0汤圆

17
发表于 2019-5-21 11:22:35 | 只看该作者
感谢楼主无私分享

出0入0汤圆

18
发表于 2019-5-21 14:04:13 | 只看该作者
感謝分享!!

出0入0汤圆

19
发表于 2019-5-21 14:31:39 | 只看该作者
感谢分享

出0入0汤圆

20
发表于 2019-5-21 20:16:34 来自手机 | 只看该作者
楼主每次发帖必是干货

出0入0汤圆

21
发表于 2019-5-21 20:57:41 来自手机 | 只看该作者
感谢楼主分享

出0入8汤圆

22
发表于 2019-5-21 20:58:55 | 只看该作者
用过EasyFlash,确实是挺好用的,轻量级,速度也不错,4.0的接口也更好用了

出0入8汤圆

23
发表于 2019-5-21 21:07:58 来自手机 | 只看该作者
最近比较忙,先 mark 一下,后续再学习,感谢分享!

出0入17汤圆

24
发表于 2019-5-21 21:30:54 | 只看该作者
之前移植过SFUD到ebox上。现在功能是越来越强大了

出100入143汤圆

25
发表于 2019-5-21 21:36:37 | 只看该作者
非常赞,楼主的SFUD,Elog,一直在用,很方便。

出0入0汤圆

26
发表于 2019-5-22 09:40:05 | 只看该作者
FAL + EsayFlash,完美!这样EsayFlash 的通用性又大大加强了

出0入0汤圆

27
发表于 2019-5-22 09:52:19 | 只看该作者
感谢LZ 无私奉献  MARK

出0入0汤圆

28
发表于 2019-5-29 00:08:14 | 只看该作者
又见新作,支持~多谢分享!!!

出0入0汤圆

29
发表于 2019-5-29 09:51:01 | 只看该作者
赞一个!谢谢分享

出0入0汤圆

30
发表于 2019-5-29 10:07:34 | 只看该作者
标记,有时间试用下

出0入0汤圆

31
发表于 2019-5-29 10:27:53 | 只看该作者
感谢楼主分享,Star一下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 09:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表