fal flash抽象层
-FAL_FLASH_DEV_TABLE
设备表挂载不同flash设备
-FAL_PART_TABLE
分区表对同一个flash挂载不同分区
-blocks
对不同颗粒度的flash进行分块
初始化
-FAL_FLASH_DEV_TABLE
注册flash设备
- fal_flash_init
- 遍历注册表信息,执行flash初始化,与block分割
- fal_partition_init
- 使用ROM保存分区表,每次查询并挂钩
FAL_PART_TABLE
分区表
- 使用FLASH保存分区表,仅需读取
- 加载分区表,读取分区信息
- 检查flash设备是否都存在
注册设备
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| struct rt_mtd_nor_device
{
struct rt_device parent;
rt_uint32_t block_size;
rt_uint32_t block_start;
rt_uint32_t block_end;
conststruct rt_mtd_nor_driver_ops* ops;
};
struct rt_mtd_nor_driver_ops
{
rt_err_t (*read_id) (struct rt_mtd_nor_device* device);
rt_ssize_t (*read) (struct rt_mtd_nor_device* device, rt_off_t offset, rt_uint8_t* data, rt_size_t length);
rt_ssize_t (*write) (struct rt_mtd_nor_device* device, rt_off_t offset, constrt_uint8_t* data, rt_size_t length);
rt_err_t (*erase_block)(struct rt_mtd_nor_device* device, rt_off_t offset, rt_size_t length);
};
struct fal_char_device
{
struct rt_device parent;
conststruct fal_partition *fal_part;
};
struct fal_blk_device
{
struct rt_device parent;
struct rt_device_blk_geometry geometry;
conststruct fal_partition *fal_part;
};
|
读写