
Fls 模块是 Flash 驱动的抽象层,它直接操作硬件,为上层模块(如 Fee、Fbl)提供统一的读、写、擦除接口。图中配置决定了 Flash 的物理基地址、可用 API 集合以及错误处理机制。
配置变体
- Config Variant
- 含义
:配置变体。 - 作用
:决定配置数据的生成时机。 - 图中配置
: VariantPostBuild。 - 解读
:这意味着 Flash 的配置(如扇区布局、基地址)可以在编译之后、链接之前甚至刷写时进行修改,而不需要重新编译驱动代码。这对于适配不同大小的 Flash 芯片非常有用。
Fls General(核心功能配置)
Fls Load Access Code On Job Start
- 含义
:在任务开始时加载访问代码。 - 作用
:某些 MCU 在执行 Flash 操作(擦写)时不能从 Flash 取指(因为总线被占用),必须将特定的操作代码(Access Code)复制到 RAM 中执行。 - 图中配置
:未勾选。表示不使用此机制,或者代码已经在 RAM 中。 Fls Base Address
- 含义
:基地址。 - 作用
:定义该 Flash 驱动实例管理的物理起始地址。 - 图中配置
: 17825792(十六进制为 0x1100000)。这通常是 MCU 内部 Data Flash 或 Code Flash 的起始位置。 API 使能开关(左侧列)
- Fls Blank Check Api
:未勾选。不生成“检查空白”函数,节省代码空间。 - Fls Compare Api
:未勾选。不生成“内存比较”函数。 - Fls Get Status Api
:已勾选。必须开启,用于查询驱动当前状态(忙碌/空闲)。 - Fls Write Verification
:未勾选。关闭写入校验。通常上层(Fee)会做校验,底层关闭以提高速度。 - Fls Ecc Handle Api
:已勾选。开启 ECC(错误校验码)处理,这对功能安全至关重要。 API 使能开关(右侧列)
- Fls Cancel Api
:已勾选。允许取消正在进行的异步操作。 - Fls Get Job Result Api
:已勾选。用于获取上一个任务的结果(成功、失败、取消)。 - Fls Set Mode Api
:已勾选。允许切换驱动模式(如从正常模式切换到休眠模式)。 - Fls Version Info Api
:未勾选。不生成获取版本信息的函数。 错误检测与索引
- Fls Development Error Detect
:未勾选。关闭开发错误检测(DET),即不检查参数范围,用于生产环境。 - Fls Runtime Error Detect
:已勾选。开启运行时错误检测,捕获硬件故障等严重错误。 - Fls Driver Index
: 0。如果有多个 Flash 硬件单元,用此 ID 区分。 其他参数
- Fls Erase Verification
:未勾选。关闭擦除校验,假设硬件擦除是可靠的。 - Fls Timeout Supervision
:未勾选。关闭超时监控。 - Fls Total Size
: 0。表示大小由具体的扇区配置自动计算。 - Fls Use Interrupts
:未勾选。表示 Flash 操作可能采用轮询方式,而非中断方式。 - Fls Flush Cache
:未勾选。不强制刷新缓存。
FlsConfigSet(底部区域)
- Fls Access Code Erase
- 含义
:擦除操作的访问代码地址。 - 作用
:如果启用了 RAM 代码执行,这里指定擦除算法在 RAM 中的地址。 - 图中配置
: 0。结合上面的配置,表示未使用特殊的 RAM 代码。
总结
这是一个非常精简且典型的 生产环境配置:关闭了开发调试功能(DET)和不常用的 API(Compare、BlankCheck),只保留了核心的读写擦除及状态查询功能,并开启了 ECC 处理 以保证数据安全。

这是 Fls 驱动的核心配置区域,它定义了 Flash 操作的性能参数、回调机制以及硬件访问模式。这里的数据直接决定了 Flash 读写的速度、安全性以及与上层模块(如 Fee)的交互方式。
核心操作配置
Fls Access Code Erase
- 含义
:擦除操作的访问代码地址。 - 作用
:如果 MCU 要求在 RAM 中执行 Flash 擦除指令(为了防止总线冲突),这里需要填入这段代码在 RAM 中的起始地址。 - 图中配置
: 0。表示可能不需要专门的 RAM 代码,或者使用默认地址。 Fls Access Code Write
- 含义
:写入操作的访问代码地址。 - 作用
:同上,但针对 Flash 写入(编程)操作。 - 图中配置
: 0。 Fls Call Cycle
- 含义
:调用周期。 - 作用
:定义 Fls_MainFunction被调用的期望周期(秒),用于内部超时监控。 - 图中配置
: 0.0。表示可能没有启用周期监控。 Fls Default Mode
- 含义
:默认模式。 - 作用
:定义驱动初始化后的默认工作模式。 - 图中配置
: MEMIF_MODE_SLOW。表示默认处于“慢速模式”。这通常是为了降低功耗或减少总线干扰,需要高性能时再切换到 Fast 模式。
通知机制(回调函数)
这两个参数是 Fls 与上层模块(通常是 Fee)异步通信的关键:
Fls Job End Notification
- 含义
:任务结束通知函数。 - 作用
:当 Flash 的擦除或写入操作成功完成后,Fls 会调用这个函数。 - 图中配置
: Fee_JobEndNotification。 - 解读
:这明确表明 Fls 的上层用户是 Fee 模块。Fls 做完事直接通知 Fee,形成驱动链。 Fls Job Error Notification
- 含义
:任务错误通知函数。 - 作用
:当 Flash 操作发生硬件错误(如写入失败、校验错误)时,Fls 调用此函数。 - 图中配置
: Fee_JobErrorNotification。同样是通知 Fee 模块进行错误处理。
性能与模式限制
这里定义了 Flash 在不同模式下的行为限制,用于平衡速度与稳定性:
Fls Max Read FastMode
- 含义
:快速模式下的最大读取长度。 - 作用
:在 Fast 模式下,单次读取操作允许的最大字节数。 - 图中配置
: 1048576(1MB)。允许大块数据读取,追求极致速度。 Fls Max Read Normal Mode
- 含义
:普通模式下的最大读取长度。 - 作用
:在 Normal 模式下,单次读取允许的最大字节数。 - 图中配置
: 1024(1KB)。限制读取块大小,防止长时间占用总线。 Fls Max Write Fast Mode
- 含义
:快速模式下的最大写入长度。 - 作用
:单次写入操作的最大数据量。 - 图中配置
: 128。 Fls Max Write Normal Mode
- 含义
:普通模式下的最大写入长度。 - 作用
:同上,但在普通模式下。 - 图中配置
: 32。写入操作通常比读取更耗时且干扰更大,所以这里的数值(32字节)远小于读取限制,以确保系统实时性。 Fls Protection
- 含义
:保护配置。 - 作用
:用于配置 Flash 的硬件写保护或读保护位。 - 图中配置
: 0。表示未启用特殊的硬件保护。
其他配置
FlsExternalDriver
- 含义
:外部驱动引用。 - 作用
:如果使用了外部 Flash 芯片(如 QuadSPI Flash),这里会引用对应的驱动配置。图中为空,说明使用的是 MCU 内部 Flash。 FlsSectorList
- 含义
:扇区列表引用。 - 作用
:指向具体的扇区布局配置(扇区起始地址、大小等)。虽然图中折叠了,但它是 Fls 能够正确擦写 Flash 的基础地图。
总结
这个配置集定义了一个基于内部 Flash 的标准驱动:
它通过 Fee_JobEndNotification紧密服务于 Fee 模块。它区分了“快速”和“普通”两种模式,通过限制 Max Write/Read长度来防止 Flash 操作卡死 CPU,保证系统的实时性。它默认运行在慢速/省电模式下。
FlsSector

这是 Fls 驱动中最底层的物理映射配置。MCU 的 Flash 硬件并不是均质的,而是被划分成一个个大小不一的扇区(Sector)。Fls 模块必须准确知道这些扇区的起始地址和大小,才能正确地进行擦除和写入操作,并防止越界访问。
核心参数详细解说
Fls Sector Index
- 含义
:扇区索引号。 - 作用
:这是 Fls 驱动内部用来唯一标识一个扇区的逻辑编号(从 0 开始)。 - 关键点
:上层模块(如 Fee)在执行擦除操作时,传递的就是这个 Index,而不是物理地址。 Fls Number Of Sector
- 含义
:扇区数量。 - 作用
:定义从当前索引开始,具有相同属性的连续扇区的个数。 - 图中配置
:全为 1。 - 解读
:这表示列表中的每一行都只描述了一个独立的扇区。如果这里填 10,则意味着接下来的 10 个扇区都具有相同的配置,这样可以简化配置列表。 Fls Page Size
- 含义
:页大小(或写入粒度)。 - 作用
:定义 Flash 硬件允许的最小写入单位(字节)。 - 图中配置
: 8。 - 解读
:这意味着向该扇区写入数据时,必须按 8 字节对齐,且每次至少写 8 字节。如果上层请求写 1 个字节,Fls 驱动通常需要进行读-改-写操作或缓冲处理。 Fls Sector Size
- 含义
:扇区大小。 - 作用
:定义该扇区的总字节数。 - 图中配置
: 2048。 - 解读
:每个扇区大小为 2KB。Flash 的擦除操作是以扇区为单位进行的,一旦调用擦除,这 2048 个字节都会被清空。 Fls Sector Start Address
Index 0: 0Index 1: 2048(0x800)Index 2: 4096(0x1000)... - 含义
:扇区起始地址。 - 作用
:该扇区在 MCU 内存映射中的物理起始地址(十六进制)。 - 图中配置
: - 解读
:地址是连续递增的,增量正好等于扇区大小(2048)。这说明这段 Flash 区域是由多个大小相等的 2KB 扇区紧密排列组成的。
总结
这个配置表实际上是在告诉驱动程序:“如果你需要操作逻辑扇区 9,请去物理地址 0x4788 那里,它的大小是 2048 字节,写入时请注意每次写 8 字节。”这种抽象层的设计,使得上层软件无需关心底层硬件的具体物理地址,只需通过索引号即可操作 Flash。

这个配置容器主要用于定义与 Flash 硬件物理特性相关的参数,以及供上层模块(如 Fee)参考的性能数据。这些参数通常是只读的,或者是由硬件特性决定的常量。
访问代码位置与大小
Fls Access Code Location Erase
- 含义
:擦除操作访问代码的位置。 - 作用
:指定用于 Flash 擦除操作的访问代码在内存中的起始地址。 - 图中配置
: 0。表示未指定特定位置,可能意味着代码在 Flash 中直接执行,或者由链接器自动分配。 Fls Access Code Location Write
- 含义
:写入操作访问代码的位置。 - 作用
:指定用于 Flash 写入(编程)操作的访问代码在内存中的起始地址。 - 图中配置
: 0。同上,未指定特定位置。 Fls Accesse Code Size Erase
- 含义
:擦除操作访问代码的大小。 - 作用
:定义擦除操作所需的访问代码的字节数。 - 图中配置
: 0。表示未指定大小,可能意味着代码大小由编译器或链接器决定。 Fls Accesse Code Size Write
- 含义
:写入操作访问代码的大小。 - 作用
:定义写入操作所需的访问代码的字节数。 - 图中配置
: 0。同上,未指定大小。
Flash 物理特性
Fls Erase Time
- 含义
:擦除时间。 - 作用
:定义擦除一个扇区所需的典型时间(单位:秒)。这个值用于 Fls 模块内部的超时监控。 - 图中配置
: 0.0032。即 3.2 毫秒。这表示擦除一个扇区预计需要 3.2ms。 Fls Erased Value
- 含义
:擦除后的值。 - 作用
:定义 Flash 扇区被擦除后,每个字节的默认值。 - 图中配置
: 4294967295。这是一个 32 位的值,对应十六进制的0xFFFFFFFF。这表示 Flash 擦除后,每个字节都是0xFF。 Fls Expected Hw Id
- 含义
:预期的硬件 ID。 - 作用
:用于验证当前驱动是否与预期的 Flash 硬件匹配。 - 图中配置
: 0。表示未指定特定的硬件 ID,或者硬件 ID 验证被禁用。 Fls Specified Erase Cycles
- 含义
:指定的擦除周期数。 - 作用
:定义 Flash 扇区的预期擦除寿命(即可以擦除多少次)。这个值用于磨损均衡算法(如果上层模块如 Fee 支持的话)。 - 图中配置
: 100000。表示该 Flash 扇区预计可以承受 10 万次擦除操作。 Fls Write Time
- 含义
:写入时间。 - 作用
:定义写入(编程)一个数据单元(通常是字或页)所需的典型时间(单位:秒)。 - 图中配置
: 1.2E-4。即 0.00012 秒,或 120 微秒。这表示写入一个数据单元预计需要 120μs。
夜雨聆风