乐于分享
好东西不私藏

EB Tresos Fls模块配置说明

EB Tresos Fls模块配置说明
General

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 的标准驱动

  1. 它通过 Fee_JobEndNotification 紧密服务于 Fee 模块。
  2. 它区分了“快速”和“普通”两种模式,通过限制 Max Write/Read 长度来防止 Flash 操作卡死 CPU,保证系统的实时性。
  3. 它默认运行在慢速/省电模式下。

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: 0
    • Index 1: 2048 (0x800)
    • Index 2: 4096 (0x1000)
    • ...
    • 含义
      :扇区起始地址。
    • 作用
      :该扇区在 MCU 内存映射中的物理起始地址(十六进制)。
    • 图中配置
    • 解读
      :地址是连续递增的,增量正好等于扇区大小(2048)。这说明这段 Flash 区域是由多个大小相等的 2KB 扇区紧密排列组成的。

总结

这个配置表实际上是在告诉驱动程序:“如果你需要操作逻辑扇区 9,请去物理地址 0x4788 那里,它的大小是 2048 字节,写入时请注意每次写 8 字节。”这种抽象层的设计,使得上层软件无需关心底层硬件的具体物理地址,只需通过索引号即可操作 Flash。

FlsPublishedInformation

这个配置容器主要用于定义与 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。