跳转至

sfc_v2

SFC (Serial Flash Controller) 提供对串行 Flash 的初始化配置、读写擦除操作及 DMA (Direct Memory Access) 传输功能,支持标准/双线/四线 SPI (Serial Peripheral Interface) 模式与连续读模式。

头文件清单

#include "include/driver/sfc_v2.h"

接口清单

接口名称 功能简述
uapi_sfc_init 初始化并配置SFC,设置Flash读写模式与映射参数
uapi_sfc_deinit 去初始化SFC,释放资源
uapi_sfc_read 以寄存器模式读取Flash数据
uapi_sfc_write 以寄存器模式写入Flash数据
uapi_sfc_erase 以寄存器模式擦除Flash指定区域
uapi_sfc_erase_chip 以寄存器模式擦除整片Flash
uapi_sfc_other_flash_opt 以寄存器模式读写Flash属性
uapi_sfc_get_flash_info 获取Flash属性信息
uapi_sfc_dma_read 以DMA模式读取Flash数据
uapi_sfc_dma_write 以DMA模式写入Flash数据
uapi_sfc_suspend 挂起SFC控制器
uapi_sfc_resume 恢复SFC控制器
uapi_sfc_enable_continue_read 使能连续读模式
uapi_sfc_disable_continue_read 去使能连续读模式
uapi_sfc_read_unique_id 读取Flash唯一ID

Functions

uapi_sfc_init

errcode_t uapi_sfc_init(uint8_t sfc_id, sfc_flash_config_t *config)

头文件清单

#include "include/driver/sfc_v2.h"

功能说明

  • 初始化并配置SFC控制器,设置Flash读写SPI模式与映射地址参数
  • 未识别的Flash默认采用单线读写512KB的配置
  • 初始化时会读取Flash ID并匹配对应操作参数,若Flash不在支持列表中则回退默认配置

前置条件

  • 调用时序约束:当前接口必须在SFC模块尚未初始化时调用,重复调用返回ERRCODE_SFC_ALREADY_INIT
  • 依赖关系:入参config不为NULL,且指向的sfc_flash_config_t结构体成员已正确赋值
  • 调用上下文约束:需在主线程调用,禁止在中断上下文中调用

入参

名称 参数类型 详细说明 约束取值范围
sfc_id uint8_t SFC控制器编号 SFC_ID_0(0) / SFC_ID_MAX(1)
config sfc_flash_config_t * 初始化参数,包含读写SPI类型、映射地址与大小 非NULL,参考sfc_flash_config_t

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 SFC初始化成功
ERRCODE_SFC_INVALID_PARAM(0x8000133F) 参数无效 sfc_id超出范围或config为NULL
ERRCODE_SFC_ALREADY_INIT(0x8000134A) 已初始化 重复初始化
ERRCODE_SFC_ADDRESS_OVERSTEP(0x80001342) 地址越界 mapping地址超出SFC总线空间
ERRCODE_SFC_CMD_NOT_SUPPORT(0x80001346) 命令不支持 Flash不支持指定的读写SPI模式
ERRCODE_SFC_FLASH_NOT_SUPPORT(0x80001341) Flash不支持 Flash不在支持列表中,回退默认配置
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_SFC_SUPPORT_COMPLECT 特性宏 支持SFC补全特性 n
CONFIG_SFC_SUPPORT_LPM 特性宏 支持SFC低功耗模式特性 n
CONFIG_SFC_ALREADY_INIT 特性宏 支持SFC已初始化特性 n

uapi_sfc_deinit

void uapi_sfc_deinit(uint8_t sfc_id)

头文件清单

#include "include/driver/sfc_v2.h"

功能说明

  • 去初始化SFC控制器,释放已占用的资源
  • 若连续读模式已使能,会先禁用连续读模式再执行去初始化

前置条件

  • 调用时序约束:当前接口必须在uapi_sfc_init()成功返回后调用
  • 调用上下文约束:需在主线程调用,禁止在中断上下文中调用

入参

名称 参数类型 详细说明 约束取值范围
sfc_id uint8_t SFC控制器编号 SFC_ID_0(0) / SFC_ID_MAX(1)

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_SUPPORT_SFC_CONTINUE_READ 特性宏 支持SFC连续读特性 n
CONFIG_SFC_ALREADY_INIT 特性宏 支持SFC已初始化特性 n

uapi_sfc_read

errcode_t uapi_sfc_read(uint8_t sfc_id, uint32_t flash_addr, uint8_t *read_buffer, uint32_t read_size)

头文件清单

#include "include/driver/sfc_v2.h"

功能说明

  • 以寄存器模式从Flash读取数据,按字节存入read_buffer中
  • 读取数据按ASSIGN_BYTES对齐分段循环读取
  • 不允许在中断中调用

前置条件

  • 调用时序约束:当前接口必须在uapi_sfc_init()成功返回后调用
  • 依赖关系:入参read_buffer不为NULL,且指向内存空间已申请成功,长度不小于read_size
  • 调用上下文约束:需在主线程调用,禁止在中断上下文中调用

入参

名称 参数类型 详细说明 约束取值范围
sfc_id uint8_t SFC控制器编号 SFC_ID_0(0) / SFC_ID_MAX(1)
flash_addr uint32_t 数据所在的Flash首地址 [0, flash_len)
read_buffer uint8_t * 用于接收数据的buffer 非NULL
read_size uint32_t 读取的字节数 > 0,且flash_addr + read_size不超过Flash大小

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 读取数据成功
ERRCODE_SFC_INVALID_PARAM(0x8000133F) 参数无效 sfc_id超出范围
ERRCODE_SFC_NOT_INIT(0x80001340) 未初始化 SFC模块未初始化
ERRCODE_INVALID_PARAM(0x80000001) 地址越界 flash_addr + read_size超出Flash范围
Other 其他错误码,参考errcode_t 执行失败

参考案例

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_SUPPORT_SFC_CONTINUE_READ 特性宏 支持SFC连续读特性 n

uapi_sfc_write

errcode_t uapi_sfc_write(uint8_t sfc_id, uint32_t flash_addr, uint8_t *write_data, uint32_t write_size)

头文件清单

#include "include/driver/sfc_v2.h"

功能说明

  • 以寄存器模式向Flash写入数据,按字节从write_data写入
  • 自动处理非对齐地址与跨页写入
  • 不允许在中断中调用

前置条件

  • 调用时序约束:当前接口必须在uapi_sfc_init()成功返回后调用
  • 依赖关系:入参write_data不为NULL,且指向内存空间已申请成功,长度不小于write_size;Flash对应区域已执行擦除操作
  • 调用上下文约束:需在主线程调用,禁止在中断上下文中调用

入参

名称 参数类型 详细说明 约束取值范围
sfc_id uint8_t SFC控制器编号 SFC_ID_0(0) / SFC_ID_MAX(1)
flash_addr uint32_t 目标Flash首地址 [0, flash_len)
write_data uint8_t * 预计写入的数据 非NULL
write_size uint32_t 写入数据的字节数 > 0,且flash_addr + write_size不超过Flash大小

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 写入数据成功
ERRCODE_SFC_INVALID_PARAM(0x8000133F) 参数无效 sfc_id超出范围
ERRCODE_SFC_NOT_INIT(0x80001340) 未初始化 SFC模块未初始化
ERRCODE_INVALID_PARAM(0x80000001) 地址越界 flash_addr + write_size超出Flash范围
ERRCODE_SFC_CMD_NOT_SUPPORT(0x80001346) 命令不支持 Flash不支持当前写操作命令
ERRCODE_SFC_IN_CONTINUE_READ(0x8000134C) 连续读模式中 连续读模式已使能时调用
Other 其他错误码,参考errcode_t 执行失败

参考案例

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_SUPPORT_SFC_CONTINUE_READ 特性宏 支持SFC连续读特性 n
CONFIG_SUPPORT_DATA_CACHE 特性宏 支持数据缓存特性 n

uapi_sfc_erase

errcode_t uapi_sfc_erase(uint8_t sfc_id, uint32_t flash_addr, uint32_t erase_size)

头文件清单

#include "include/driver/sfc_v2.h"

功能说明

  • 以寄存器模式擦除Flash指定区域,采用贪心算法选择最优擦除粒度
  • 未使能写回时强制要求地址和大小按扇区(4KB)对齐
  • 使能写回时自动备份并回写非对齐区域数据
  • 不允许在中断中调用

前置条件

  • 调用时序约束:当前接口必须在uapi_sfc_init()成功返回后调用
  • 依赖关系:flash_addr与erase_size需在Flash有效地址范围内
  • 调用上下文约束:需在主线程调用,禁止在中断上下文中调用

入参

名称 参数类型 详细说明 约束取值范围
sfc_id uint8_t SFC控制器编号 SFC_ID_0(0) / SFC_ID_MAX(1)
flash_addr uint32_t 擦除的首地址 [0, flash_len),未使能写回时需4KB对齐
erase_size uint32_t 擦除的Flash空间大小 > 0,未使能写回时需4KB对齐

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 擦除成功
ERRCODE_SFC_INVALID_PARAM(0x8000133F) 参数无效 sfc_id超出范围
ERRCODE_SFC_NOT_INIT(0x80001340) 未初始化 SFC模块未初始化
ERRCODE_INVALID_PARAM(0x80000001) 地址越界 flash_addr + erase_size超出Flash范围或未对齐
ERRCODE_SFC_IN_CONTINUE_READ(0x8000134C) 连续读模式中 连续读模式已使能时调用
ERRCODE_SFC_ERASE_FORM_ERROR(0x80001347) 擦除格式错误 擦除区域无法匹配任何擦除命令
Other 其他错误码,参考errcode_t 执行失败

参考案例

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_SFC_ALLOW_ERASE_WRITEBACK 特性宏 支持SFC擦除写回特性 n
CONFIG_SFC_SUPPORT_COMPLECT 特性宏 支持SFC补全特性 n
CONFIG_SUPPORT_DATA_CACHE 特性宏 支持数据缓存特性 n
CONFIG_SUPPORT_SFC_CONTINUE_READ 特性宏 支持SFC连续读特性 n

uapi_sfc_erase_chip

errcode_t uapi_sfc_erase_chip(uint8_t sfc_id)

头文件清单

#include "include/driver/sfc_v2.h"

功能说明

  • 以寄存器模式对整片Flash进行擦除

前置条件

  • 调用时序约束:当前接口必须在uapi_sfc_init()成功返回后调用,且连续读模式未使能
  • 调用上下文约束:需在主线程调用,禁止在中断上下文中调用

入参

名称 参数类型 详细说明 约束取值范围
sfc_id uint8_t SFC控制器编号 SFC_ID_0(0) / SFC_ID_MAX(1)

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 整片擦除成功
ERRCODE_SFC_INVALID_PARAM(0x8000133F) 参数无效 sfc_id超出范围
ERRCODE_SFC_NOT_INIT(0x80001340) 未初始化 SFC模块未初始化
ERRCODE_SFC_IN_CONTINUE_READ(0x8000134C) 连续读模式中 连续读模式已使能时调用
Other 其他错误码,参考errcode_t 执行失败

参考案例

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_SUPPORT_SFC_CONTINUE_READ 特性宏 支持SFC连续读特性 n
CONFIG_SUPPORT_DATA_CACHE 特性宏 支持数据缓存特性 n

uapi_sfc_other_flash_opt

errcode_t uapi_sfc_other_flash_opt(uint8_t sfc_id, sfc_flash_op_t cmd_type, uint8_t cmd, uint8_t *buffer, uint32_t length)

头文件清单

#include "include/driver/sfc_v2.h"

功能说明

  • 以寄存器模式对Flash属性进行读写操作
  • 可用于读取或配置Flash状态寄存器等属性
  • 不允许在中断中调用

前置条件

  • 调用时序约束:当前接口必须在uapi_sfc_init()成功返回后调用
  • 依赖关系:入参buffer不为NULL
  • 调用上下文约束:需在主线程调用,禁止在中断上下文中调用

入参

名称 参数类型 详细说明 约束取值范围
sfc_id uint8_t SFC控制器编号 SFC_ID_0(0) / SFC_ID_MAX(1)
cmd_type sfc_flash_op_t 设置指令的读写类型 READ_TYPE(0x0) / WRITE_TYPE(0x1)
cmd uint8_t SPI指令 有效的Flash SPI指令
buffer uint8_t * 数据缓冲区 非NULL
length uint32_t 读/写的数据长度 < 4

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 操作成功
ERRCODE_SFC_INVALID_PARAM(0x8000133F) 参数无效 sfc_id超出范围或buffer为NULL
ERRCODE_SFC_NOT_INIT(0x80001340) 未初始化 SFC模块未初始化
ERRCODE_SFC_IN_CONTINUE_READ(0x8000134C) 连续读模式中 连续读模式已使能时调用
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_SUPPORT_SFC_CONTINUE_READ 特性宏 支持SFC连续读特性 n

uapi_sfc_get_flash_info

errcode_t uapi_sfc_get_flash_info(uint8_t id, sfc_info_t *info)

头文件清单

#include "include/driver/sfc_v2.h"

功能说明

  • 获取Flash属性信息,包括Flash ID和Flash大小
  • 会读取Flash ID并返回当前配置的Flash大小

前置条件

  • 调用时序约束:当前接口必须在uapi_sfc_init()成功返回后调用
  • 依赖关系:入参info不为NULL

入参

名称 参数类型 详细说明 约束取值范围
id uint8_t SFC控制器编号 SFC_ID_0(0) / SFC_ID_MAX(1)
info sfc_info_t * 获取到的Flash属性信息 非NULL,参考sfc_info_t

出参

名称 数据类型 输出说明
info sfc_info_t * 返回Flash ID和Flash大小

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 获取信息成功
ERRCODE_SFC_INVALID_PARAM(0x8000133F) 参数无效 id超出范围或info为NULL
ERRCODE_SFC_IN_CONTINUE_READ(0x8000134C) 连续读模式中 连续读模式已使能时调用
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_SUPPORT_SFC_CONTINUE_READ 特性宏 支持SFC连续读特性 n

uapi_sfc_dma_read

errcode_t uapi_sfc_dma_read(uint8_t sfc_id, uint32_t flash_addr, uint8_t *read_buffer, uint32_t read_size)

头文件清单

#include "include/driver/sfc_v2.h"

功能说明

  • 以DMA模式从Flash读取数据,按字节存入read_buffer中
  • 不允许在中断中调用

前置条件

  • 调用时序约束:当前接口必须在uapi_sfc_init()成功返回后调用
  • 依赖关系:入参read_buffer不为NULL,且指向内存空间已申请成功,长度不小于read_size
  • 调用上下文约束:需在主线程调用,禁止在中断上下文中调用

入参

名称 参数类型 详细说明 约束取值范围
sfc_id uint8_t SFC控制器编号 SFC_ID_0(0) / SFC_ID_MAX(1)
flash_addr uint32_t 数据所在的Flash首地址 [0, flash_len)
read_buffer uint8_t * 用于接收数据的buffer 非NULL
read_size uint32_t 读取的字节数 > 0,且flash_addr + read_size不超过Flash大小

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 读取数据成功
ERRCODE_SFC_INVALID_PARAM(0x8000133F) 参数无效 sfc_id超出范围
ERRCODE_SFC_NOT_INIT(0x80001340) 未初始化 SFC模块未初始化
ERRCODE_INVALID_PARAM(0x80000001) 地址越界 flash_addr + read_size超出Flash范围
ERRCODE_SFC_IN_CONTINUE_READ(0x8000134C) 连续读模式中 连续读模式已使能时调用
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_SFC_SUPPORT_DMA 功能宏 支持SFC DMA模式 y

uapi_sfc_dma_write

errcode_t uapi_sfc_dma_write(uint8_t sfc_id, uint32_t flash_addr, uint8_t *write_buffer, uint32_t write_size)

头文件清单

#include "include/driver/sfc_v2.h"

功能说明

  • 以DMA模式向Flash写入数据,按字节从write_buffer写入
  • 不允许在中断中调用

前置条件

  • 调用时序约束:当前接口必须在uapi_sfc_init()成功返回后调用
  • 依赖关系:入参write_buffer不为NULL,且指向内存空间已申请成功,长度不小于write_size;Flash对应区域已执行擦除操作
  • 调用上下文约束:需在主线程调用,禁止在中断上下文中调用

入参

名称 参数类型 详细说明 约束取值范围
sfc_id uint8_t SFC控制器编号 SFC_ID_0(0) / SFC_ID_MAX(1)
flash_addr uint32_t 目标Flash首地址 [0, flash_len)
write_buffer uint8_t * 预计写入的数据 非NULL
write_size uint32_t 写入数据的字节数 > 0,且flash_addr + write_size不超过Flash大小

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 写入数据成功
ERRCODE_SFC_INVALID_PARAM(0x8000133F) 参数无效 sfc_id超出范围
ERRCODE_SFC_NOT_INIT(0x80001340) 未初始化 SFC模块未初始化
ERRCODE_INVALID_PARAM(0x80000001) 地址越界 flash_addr + write_size超出Flash范围
ERRCODE_SFC_CMD_NOT_SUPPORT(0x80001346) 命令不支持 Flash不支持当前写操作命令
ERRCODE_SFC_IN_CONTINUE_READ(0x8000134C) 连续读模式中 连续读模式已使能时调用
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_SFC_SUPPORT_DMA 功能宏 支持SFC DMA模式 y
CONFIG_SUPPORT_DATA_CACHE 特性宏 支持数据缓存特性 n

uapi_sfc_suspend

errcode_t uapi_sfc_suspend(uint8_t sfc_id, uintptr_t arg)

头文件清单

#include "include/driver/sfc_v2.h"

功能说明

  • 挂起SFC控制器,用于低功耗模式场景
  • 挂起后SFC控制器停止工作

前置条件

  • 调用时序约束:当前接口必须在uapi_sfc_init()成功返回后调用
  • 依赖关系:已使能CONFIG_SFC_SUPPORT_LPM

入参

名称 参数类型 详细说明 约束取值范围
sfc_id uint8_t SFC控制器编号 SFC_ID_0(0) / SFC_ID_MAX(1)
arg uintptr_t 挂起预留参数 预留,当前未使用

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 挂起成功
Other 其他错误码,参考errcode_t 挂起失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_SFC_SUPPORT_LPM 功能宏 支持SFC低功耗模式 n

uapi_sfc_resume

errcode_t uapi_sfc_resume(uint8_t sfc_id, uintptr_t arg)

头文件清单

#include "include/driver/sfc_v2.h"

功能说明

  • 恢复SFC控制器,从低功耗模式恢复工作
  • 恢复时会重新配置Flash四线模式并执行4字节地址模式切换

前置条件

  • 调用时序约束:当前接口必须在uapi_sfc_suspend()成功返回后调用
  • 依赖关系:已使能CONFIG_SFC_SUPPORT_LPM

入参

名称 参数类型 详细说明 约束取值范围
sfc_id uint8_t SFC控制器编号 SFC_ID_0(0) / SFC_ID_MAX(1)
arg uintptr_t 恢复预留参数 预留,当前未使用

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 恢复成功
Other 其他错误码,参考errcode_t 恢复失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_SFC_SUPPORT_LPM 功能宏 支持SFC低功耗模式 n

uapi_sfc_enable_continue_read

errcode_t uapi_sfc_enable_continue_read(uint8_t id)

头文件清单

#include "include/driver/sfc_v2.h"

功能说明

  • 使能连续读模式,使能后只能通过总线读Flash,不允许有其他Flash操作
  • 要求Flash当前读模式为Dual I/O或Quad I/O SPI模式
  • 要求Flash支持连续读特性
  • 不允许在中断中调用

前置条件

  • 调用时序约束:当前接口必须在uapi_sfc_init()成功返回后调用,且Flash读模式为Dual I/O或Quad I/O SPI模式
  • 依赖关系:Flash支持连续读特性;已使能CONFIG_SUPPORT_SFC_CONTINUE_READ
  • 调用上下文约束:需在主线程调用,禁止在中断上下文中调用

入参

名称 参数类型 详细说明 约束取值范围
id uint8_t SFC控制器编号 SFC_ID_0(0) / SFC_ID_MAX(1)

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 使能连续读成功
ERRCODE_SFC_INVALID_PARAM(0x8000133F) 参数无效 id超出范围
ERRCODE_SFC_NOT_INIT(0x80001340) 未初始化 SFC模块未初始化
ERRCODE_SFC_CMD_NOT_SUPPORT(0x80001346) 命令不支持 Flash读模式不是Dual I/O或Quad I/O,或不支持连续读特性

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_SUPPORT_SFC_CONTINUE_READ 功能宏 支持SFC连续读模式 n

uapi_sfc_disable_continue_read

void uapi_sfc_disable_continue_read(uint8_t id)

头文件清单

#include "include/driver/sfc_v2.h"

功能说明

  • 去使能连续读模式,恢复Flash的正常读写操作
  • 不允许在中断中调用

前置条件

  • 调用时序约束:当前接口必须在uapi_sfc_enable_continue_read()使能连续读模式后调用
  • 依赖关系:已使能CONFIG_SUPPORT_SFC_CONTINUE_READ
  • 调用上下文约束:需在主线程调用,禁止在中断上下文中调用

入参

名称 参数类型 详细说明 约束取值范围
id uint8_t SFC控制器编号 SFC_ID_0(0) / SFC_ID_MAX(1)

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_SUPPORT_SFC_CONTINUE_READ 功能宏 支持SFC连续读模式 n

uapi_sfc_read_unique_id

errcode_t uapi_sfc_read_unique_id(uint8_t id, uintptr_t *unique_id, uint16_t *len)

头文件清单

#include "include/driver/sfc_v2.h"

功能说明

  • 读取Flash唯一ID(Unique ID)
  • 首次读取时会通过SPI命令读取Flash Unique ID并缓存,后续调用直接返回缓存值
  • 不允许在中断中调用

前置条件

  • 调用时序约束:当前接口必须在uapi_sfc_init()成功返回后调用
  • 依赖关系:入参unique_id不为NULL,入参len不为NULL;Flash支持Unique ID读取
  • 调用上下文约束:需在主线程调用,禁止在中断上下文中调用

入参

名称 参数类型 详细说明 约束取值范围
id uint8_t SFC控制器编号 SFC_ID_0(0) / SFC_ID_MAX(1)
unique_id uintptr_t * Unique ID存储地址指针 非NULL
len uint16_t * Unique ID长度指针 非NULL

出参

名称 数据类型 输出说明
unique_id uintptr_t * 返回Flash Unique ID的存储地址
len uint16_t * 返回Unique ID的长度

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 读取Unique ID成功
ERRCODE_SFC_NOT_INIT(0x80001340) 未初始化 SFC模块未初始化
ERRCODE_SFC_IN_CONTINUE_READ(0x8000134C) 连续读模式中 连续读模式已使能时调用
ERRCODE_SFC_FLASH_NOT_SUPPORT(0x80001341) Flash不支持 Flash不支持Unique ID读取
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
SUPPORT_SFC_READ_UNIQUE_ID 功能宏 支持SFC读取Flash唯一ID n
CONFIG_SUPPORT_SFC_CONTINUE_READ 特性宏 支持SFC连续读特性 n
CONFIG_SFC_SUPPORT_COMPLECT 特性宏 支持SFC补全特性 n

Enumerations

sfc_read_if_t

typedef enum sfc_read_if {
    STANDARD_READ = 0x0,               /*!< 以标准SPI模式执行读操作(指令一般为0x03)。 */
    FAST_READ = 0x1,                   /*!< 以标准SPI模式执行快速读操作(指令一般为0x0B)。 */
    FAST_READ_DUAL_OUTPUT = 0x2,       /*!< 以双线Out SPI模式执行读操作(指令一般为0x3B)。 */
    FAST_READ_DUAL_IO = 0x3,           /*!< 以双线In/Out SPI模式执行读操作(指令一般为0xBB)。 */
    FAST_READ_QUAD_OUTPUT = 0x4,       /*!< 以四线Out SPI模式执行读操作(指令一般为0x6B)。 */
    FAST_READ_QUAD_IO = 0x5            /*!< 以四线In/Out SPI模式执行读操作(指令一般为0xEB)。 */
} sfc_read_if_t;
枚举成员 取值 描述
STANDARD_READ 0x0 标准SPI模式读操作
FAST_READ 0x1 标准SPI快速读操作
FAST_READ_DUAL_OUTPUT 0x2 双线Output SPI模式读操作
FAST_READ_DUAL_IO 0x3 双线I/O SPI模式读操作
FAST_READ_QUAD_OUTPUT 0x4 四线Output SPI模式读操作
FAST_READ_QUAD_IO 0x5 四线I/O SPI模式读操作

sfc_write_if_t

typedef enum sfc_write_if {
    WRITE_DISABLE = 0x0,               /*!< 写操作禁止。 */
    PAGE_PROGRAM = 0x1,                /*!< 以标准SPI模式执行写操作。 */
    DUAL_INPUT_PAGE_PROGRAM = 0x2,     /*!< 以双线In SPI模式执行写操作。 */
    DUAL_IO_PAGE_PROGRAM = 0x3,        /*!< 以双线I/O SPI模式执行写操作。 */
    QUAD_INPUT_PAGE_PROGRAM = 0x4,     /*!< 以四线In SPI模式执行写操作。 */
    QUAD_IO_PAGE_PROGRAM = 0x5         /*!< 以四线In/Out SPI模式执行写操作。 */
} sfc_write_if_t;
枚举成员 取值 描述
WRITE_DISABLE 0x0 写操作禁止
PAGE_PROGRAM 0x1 标准SPI模式写操作
DUAL_INPUT_PAGE_PROGRAM 0x2 双线Input SPI模式写操作
DUAL_IO_PAGE_PROGRAM 0x3 双线I/O SPI模式写操作
QUAD_INPUT_PAGE_PROGRAM 0x4 四线Input SPI模式写操作
QUAD_IO_PAGE_PROGRAM 0x5 四线I/O SPI模式写操作

sfc_id_t

typedef enum {
    SFC_ID_0,
    SFC_ID_MAX
} sfc_id_t;
枚举成员 取值 描述
SFC_ID_0 0 SFC控制器0
SFC_ID_MAX 1 SFC控制器数量上限

sfc_flash_op_t

typedef enum sfc_flash_op {
    READ_TYPE = 0x0,                   /*!< 读取Flash相关信息。 */
    WRITE_TYPE = 0x1                   /*!< 配置Flash状态。 */
} sfc_flash_op_t;
枚举成员 取值 描述
READ_TYPE 0x0 读取Flash属性
WRITE_TYPE 0x1 配置Flash状态

Structures

sfc_flash_config_t

typedef struct sfc_flash_config {
    sfc_read_if_t read_type;           /*!< 读操作SPI类型。 */
    sfc_write_if_t write_type;         /*!< 写操作SPI类型。 */
    uint32_t mapping_addr;             /*!< Flash映射基地址,对应为Flash的0地址。
                                         *   需要映射在SFC内部总线空间,仅高16位有效。 */
    uint32_t mapping_size;             /*!< Flash映射的大小,可自定义映射空间。
                                         *   参数形式必须为64KB * 2^n,其中n >= 0。
                                         *   尾地址需要在SFC内部总线空间。
                                         *   超出了表单配置的Flash大小时会将大小置为表单中配置的大小。 */
} sfc_flash_config_t;

成员说明

成员名称 数据类型 描述
read_type sfc_read_if_t 读操作SPI类型
write_type sfc_write_if_t 写操作SPI类型
mapping_addr uint32_t Flash映射基地址,仅高16位有效
mapping_size uint32_t Flash映射大小,格式为64KB * 2^n,n >= 0,最小64KB

sfc_info_t

typedef struct {
    uint32_t flash_id;                 /*!< Flash ID。 */
    uint32_t flash_size;               /*!< Flash大小。 */
} sfc_info_t;

成员说明

成员名称 数据类型 描述
flash_id uint32_t Flash ID
flash_size uint32_t Flash大小

Type definitions

errcode_t [SDK公共基础类型]

typedef uint32_t errcode_t;

使用说明

作为SFC模块对外接口的通用返回值类型,0表示成功,非0表示失败。

Macros

NULL_FLASH

#define NULL_FLASH   0