fal flash抽象层

-FAL_FLASH_DEV_TABLE设备表挂载不同flash设备

-FAL_PART_TABLE分区表对同一个flash挂载不同分区

-blocks 对不同颗粒度的flash进行分块

初始化

  • 执行 fal_init

-FAL_FLASH_DEV_TABLE注册flash设备

  1. fal_flash_init
  • 遍历注册表信息,执行flash初始化,与block分割
  1. fal_partition_init
  • 使用ROM保存分区表,每次查询并挂钩 FAL_PART_TABLE分区表
  • 使用FLASH保存分区表,仅需读取
  • 加载分区表,读取分区信息
  • 检查flash设备是否都存在

注册设备

  • 注册块设备, 或字符串设备,或MTD nor设备
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; /* The Block size in the flash */

rt_uint32_t block_start; /* The start of available block*/

rt_uint32_t block_end; /* The end of available block */


/* operations interface */

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;

};

读写

  • 调用注册的接口