# fal:Flash 抽象层
## 1、介绍
FAL (Flash Abstraction Layer) Flash 抽象层,是对 Flash 及基于 Flash 的分区进行管理、操作的抽象层,对上层统一了 Flash 及 分区操作的 API ,并具有以下特性:
- 支持静态可配置的分区表,并可关联多个 Flash 设备;
- 分区表支持 **自动装载** 。避免在多固件项目,分区表被多次定义的问题;
- 代码精简,对操作系统 **无依赖** ,可运行于裸机平台,比如对资源有一定要求的 Bootloader;
- 统一的操作接口。保证了文件系统、OTA、NVM 等对 Flash 有一定依赖的组件,底层 Flash 驱动的可重用性;
- 自带基于 Finsh/MSH 的测试命令,可以通过 Shell 按字节寻址的方式操作(读写擦) Flash 或分区,方便开发者进行调试、测试;
### 1.1 目录结构
| 名称 | 说明 |
| ---- | ---- |
| inc | 头文件目录 |
| src | 源代码目录 |
| samples | 例程目录 |
### 1.2 许可证
fal package 遵循 LGPLv2.1 许可,详见 `LICENSE` 文件。
### 1.3 依赖
对 RT-Thread 无依赖,也可用于裸机。
> 测试命令功能需要依赖 RT-Thread Finsh/MSH
## 2、如何打开 fal
使用 fal package 需要在 RT-Thread 的包管理器中选择它,具体路径如下:
```
RT-Thread online packages
system packages --->
[*] fal: Flash Abstraction Layer implement. Manage flash device and partition.
[*] Enable debug log output
[ ] FAL partition table config has defined on 'fal_cfg.h'
(onchip) The flash device which saving partition table
(65536) The patition table end address relative to flash device offset.
version (latest) --->
```
每个功能的配置说明如下:
- 开启调试日志输出(默认开启);
- 分区表是否在 `fal_cfg.h` 中定义(默认开启)。如果关闭此选项,fal 将会自动去指定 Flash 的指定位置去检索并装载分区表,具体配置详见下面两个选项;
- 存放分区表的 Flash 设备;
- 分区表的 **结束地址** 位于 Flash 设备上的偏移。fal 将从此地址开始往回进行检索分区表,直接读取到 Flash 顶部。如果不确定分区表具体位置,这里也可以配置为 Flash 的结束地址,fal 将会检索整个 Flash ,检索时间可能会增加。
然后让 RT-Thread 的包管理器自动更新,或者使用 `pkgs --update` 命令更新包到 BSP 中。
## 3、使用 fal
使用 fal 前需要对项目的 Flash 进行移植工作,移植的文档位于: [/samples/porting/README.md](samples/porting/README.md) 。移植完成后,调用 `fal_init() ` 初始化该库。接下来即可调用如下 API:
## 3.1 API
### 3.1.1 查找 Flash 设备
`const struct fal_flash_dev *fal_flash_device_find(const char *name)`
| 参数 | 描述 |
| :----- | :----------------------- |
| name | Flash 设备名称 |
| return | 如果查找成功,将返回 Flash 设备对象,查找失败返回 NULL |
### 3.1.2 查找 Flash 分区
`const struct fal_partition *fal_partition_find(const char *name)`
| 参数 | 描述 |
| :----- | :----------------------- |
| name | Flash 分区名称 |
| return | 如果查找成功,将返回 Flash 分区对象,查找失败返回 NULL |
### 3.1.3 获取分区表
`const struct fal_partition *fal_get_partition_table(size_t *len)`
| 参数 | 描述 |
| :----- | :----------------------- |
| len | 分区表的长度 |
| return | 分区表 |
### 3.1.4 临时设置分区表
FAL 初始化时会自动装载默认分区表。使用该设置将临时修改分区表,重启后会 **丢失** 该设置
`void fal_set_partition_table_temp(struct fal_partition *table, size_t len)`
| 参数 | 描述 |
| :----- | :----------------------- |
| table | 分区表 |
| len | 分区表的长度 |
### 3.1.5 从分区读取数据
`int fal_partition_read(const struct fal_partition *part, uint32_t addr, uint8_t *buf, size_t size)`
| 参数 | 描述 |
| :----- | :----------------------- |
| part | 分区对象 |
| addr | 相对分区的偏移地址 |
| buf | 存放待读取数据的缓冲区 |
| size | 待读取数据的大小 |
| return | 返回实际读取的数据大小 |
### 3.1.6 往分区写入数据
`int fal_partition_write(const struct fal_partition *part, uint32_t addr, const uint8_t *buf, size_t size)`
| 参数 | 描述 |
| :----- | :----------------------- |
| part | 分区对象 |
| addr | 相对分区的偏移地址 |
| buf | 存放待写入数据的缓冲区 |
| size | 待写入数据的大小 |
| return | 返回实际写入的数据大小 |
### 3.1.7 擦除分区数据
`int fal_partition_erase(const struct fal_partition *part, uint32_t addr, size_t size)`
| 参数 | 描述 |
| :----- | :----------------------- |
| part | 分区对象 |
| addr | 相对分区的偏移地址 |
| size | 擦除区域的大小 |
| return | 返回实际擦除的区域大小 |
### 3.1.8 擦除整个分区数据
`int fal_partition_erase_all(const struct fal_partition *part)`
| 参数 | 描述 |
| :----- | :----------------------- |
| part | 分区对象 |
| return | 返回实际擦除的区域大小 |
### 3.1.9 打印分区表
`void fal_show_part_table(void)`
### 3.1.10 根据分区名称,创建对应的块设备
该函数可以根据指定的分区名称,创建对应的块设备,以便于在指定的分区上挂载文件系统
`struct rt_device *fal_blk_device_create(const char *parition_name)`
| 参数 | 描述 |
| :----- | :----------------------- |
| parition_name | 分区名称 |
| return | 创建成功,则返回对应的块设备,失败返回空 |
### 3.1.11 根据分区名称,创建对应的 MTD Nor Flash 设备
该函数可以根据指定的分区名称,创建对应的 MTD Nor Flash 设备,以便于在指定的分区上挂载文件系统
`struct rt_device *fal_mtd_nor_device_create(const char *parition_name)`
| 参数 | 描述 |
| :------------ | :---------------------------------------------------- |
| parition_name | 分区名称 |
| return | 创建成功,则返回对应的 MTD Nor Flash 设备,失败返回空 |
### 3.1.12 根据分区名称,创建对应的字符设备
该函数可以根据指定的分区名称,创建对应的字符设备,以便于通过 deivice 接口或 devfs 接口操作分区,开启了 POSIX 后,还可以通过 oepn/read/write 函数操作分区。
`struct rt_device *fal_char_device_create(const char *parition_name)`
| 参数 | 描述 |
| :------------ | :----------------------------------------- |
| parition_name | 分区名称 |
| return | 创建成功,则返回对应的字符设备,失败返回空 |
## 3.2 Finsh/MSH 测试命令
fal 提供了丰富的测试命令,项目只要在 RT-Thread 上开启 Finsh/MSH 功能即可。在做一些基于 Flash 的应用开发、调试时,这些命令会非常实用。它可以准确的写入或者读取指定位置的原始 Flash 数据,快速的验证 Flash 驱动的完整性,甚至可以对 Flash 进行性能测试。
具体功能如下:输入 fal 可以看到完整的命令列表
```
msh />fal
Usage:
fal probe [dev_name|part_name] - probe flash device or partition by given name
fal read addr size - read 'size' bytes starting at 'addr'
fal wri
没有合适的资源?快使用搜索试试~ 我知道了~
W601开发指南_-_RT-Thread_component_micropython程序源码.rar
共590个文件
c:240个
h:139个
md:63个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 15 浏览量
2023-10-14
17:19:21
上传
评论
收藏 17.52MB RAR 举报
温馨提示
W601开发指南_-_RT-Thread_component_micropython程序源码.rar
资源推荐
资源详情
资源评论
收起资源包目录
W601开发指南_-_RT-Thread_component_micropython程序源码.rar (590个子文件)
makeimg.bat 6KB
ff.c 226KB
compile.c 144KB
emitnative.c 116KB
objstr.c 78KB
vm.c 65KB
runtime.c 58KB
objtype.c 55KB
mpz.c 49KB
parse.c 47KB
emitbc.c 37KB
gc.c 34KB
emitinlinethumb.c 33KB
modbuiltins.c 31KB
moductypes.c 30KB
fal_rtt.c 29KB
cJSON.c 28KB
tiny_aes.c 28KB
lexer.c 27KB
ccsbcs.c 26KB
objarray.c 25KB
asmx64.c 23KB
objdict.c 22KB
machine_i2c.c 22KB
objexcept.c 22KB
modusocket.c 22KB
modframebuf.c 22KB
tcpdump.c 21KB
objset.c 21KB
objlist.c 20KB
stream.c 20KB
modnetwork_wlan.c 20KB
builtinimport.c 20KB
pyexec.c 20KB
asmx86.c 19KB
objfun.c 19KB
obj.c 18KB
vfs.c 18KB
showbc.c 18KB
mpprint.c 18KB
file_sync_mod.c 18KB
tinflate.c 18KB
file_exmod.c 17KB
modffi.c 17KB
bc.c 16KB
modure.c 16KB
map.c 16KB
objint.c 16KB
readline.c 16KB
vfs_fat.c 16KB
file_sync_service.c 15KB
objint_mpz.c 15KB
adbusb.c 15KB
asmthumb.c 15KB
telnet.c 14KB
shell_service.c 14KB
moduselect.c 14KB
modmath.c 13KB
netio.c 13KB
iperf.c 13KB
file_list_mod.c 13KB
ntp.c 13KB
fal_partition.c 13KB
vfs_posix.c 13KB
binary.c 13KB
modbtree.c 13KB
formatfloat.c 13KB
persistentcode.c 13KB
emitinlinextensa.c 13KB
moduhashlib.c 13KB
modwebrepl.c 12KB
objgenerator.c 12KB
objstrunicode.c 12KB
machine_spi.c 12KB
parsenum.c 12KB
tiny_sha2.c 12KB
qstr.c 12KB
asmarm.c 12KB
modussl_mbedtls.c 12KB
objfloat.c 12KB
tftp_server.c 11KB
moduwebsocket.c 11KB
modwebsocket.c 11KB
modujson.c 11KB
objtuple.c 11KB
modthread.c 11KB
machine_uart.c 10KB
machine_pin.c 10KB
objmodule.c 10KB
vfs_fat_file.c 10KB
tiny_sha1.c 10KB
modio.c 10KB
moduos_file.c 10KB
moducryptolib.c 10KB
repl.c 10KB
tiny_md5.c 10KB
machine_pwm.c 10KB
modfile.c 10KB
machine_timer.c 10KB
machine_lcd.c 10KB
共 590 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
2201_75761617
- 粉丝: 18
- 资源: 7339
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 论文(最终)_20240430235101.pdf
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功