SFUD Demo
文档编号:AN0008
版本 |
日期 |
作者 |
修改说明 |
|---|---|---|---|
1.0 |
2025-06-06 |
初始版本 |
文档概述
文档目的
本文档作为基于 SFUD(Serial Flash Universal Driver)库 的 Demo 开发指南,详细说明如何通过统一接口实现对 NOR Flash 的读写操作,适用于嵌入式开发工程师及固件调试人员。
适用范围
硬件平台:ETEB-6002PV-V10 开发板(ARM Cortex-M7 内核)
软件环境:SFUD 开源驱动库(v1.1.0)
目标器件:支持 SPI 接口的 NOR Flash(如华邦 W25QXX、兆易创新 GD25QXX 系列)
功能与特性
功能概述
本 Demo 基于 SFUD 串行 Flash 通用驱动库,实现以下核心功能:
NOR Flash 基础操作:读取设备 ID、擦除(扇区 / 块 / 全片擦除)、页编程、连续读写。
驱动兼容性:通过 SFUD 库统一接口,支持不同厂商的 SPI Flash 芯片(如华邦 W25QXX、兆易创新 GD25QXX 等)。
参数自适配:优先通过 SFDP 标准 自动获取 Flash 参数,无 SFDP 支持时通过预设参数表匹配。
SFUD 特性
支持多种品牌和规格的 SPI Flash
提供统一的读写接口
自动识别 Flash 参数(通过 SFDP 或预设表)
提高软件可重用性和可扩展性
降低因 Flash 缺货/停产带来的风险
SFDP 标准
SFDP (Serial Flash Discoverable Parameters) 是 JEDEC 制定的串行 Flash 参数表标准 (JESD216B 标准文档)。
主要特性:
参数表包含容量、写粒度、擦除命令等关键参数
绝大多数新款 Flash 支持此标准
仅部分旧型号可能不支持
SFDP 表读取流程
Demo 实现
硬件平台
组件
说明
开发板
ETEB-6002PV-V10(基于 ET6002 芯片,ARM Cortex-M7 内核)
NOR Flash 型号
W25Q32JV(华邦电子,32Mbit,支持 SFDP)
通信接口
SPI0( 单线模式:MOSI/MISO/CLK/CS)
关键引脚
CS(片选,低电平有效)、WP(写保护,接 GND 禁用写保护)
硬件连接
ETEB-6002PV-V10 开发板与 NOR Flash 的通过J3处跳线帽进行链接。
SPI 接口配置
本 Demo 基于 ETEB-6002PV-V10 开发板实现,使用 SPI0 接口与 NOR Flash 通信。
配置示例:
typedef struct {
SPI_Type *SPIx; // SPI 实例
uint32_t bitRate; // 波特率 (Hz)
GPIO_PinNumber cs_pin; // CS
uint8_t cs_pin_mode;
GPIO_PinNumber clk_pin; // CLK
uint8_t clk_pin_mode;
GPIO_PinNumber do_pin; // MISO
uint8_t do_pin_mode;
GPIO_PinNumber di_pin; // MOSI
uint8_t di_pin_mode;
} spi_user_type, *spi_user_type_t;
修改说明:
如需更改 SPI 接口或多 Flash 配置,请修改
sfud/port/sfud_port.c调整
sfud_spi_port_init()中的初始化代码
Flash 配置
1. 如果该 Flash 支持 SFDP 标准,SFUD 会通过 SPI 接口读取 SFDP 表参数,获取到 Flash 的规格参数。 成功识别后,串口会输出参数信息,例如:
The flash device manufacturer ID is 0xEF, memory type ID is 0x40, capacity ID is 0x16. [SFUD](../../../sfud/src/sfud_sfdp.c:132) Check SFDP header is OK. The reversion is V1.5, NPN is 0. [SFUD](../../../sfud/src/sfud_sfdp.c:175) Check JEDEC basic flash parameter header is OK. The table id is 0, reversion is V1.5, length is 16, parameter table pointer is 0x000080.
2. 如果该 Flash 不支持 SFDP 标准,SFUD 会查询配置文件 ( /sfud/inc/sfud_flash_def.h ) 中提供的 Flash 参数信息表中是否支持该款 Flash。
如果不支持,则可以在配置文件中添加该款 Flash 的参数信息,配置方式如下:
下载对应 flash 数据手册,获取到 flash 的规格参数,包括:制造商 ID | 类型 ID | 容量 ID | 容量 | 写模式 | 擦除粒度(擦除的最小单位) | 擦除粒度对应的命令 | 。
进入 /sfud/inc/sfdu_flash_def.h ,找到 SFUD_FLASH_CHIP_TABLE 宏定义,
根据获取到的规格参数,依次填入:| 名称 | 制造商 ID | 类型 ID | 容量 ID | 容量 | 写模式 | 擦除粒度(擦除的最小单位) | 擦除粒度对应的命令 | 。
常见问题与排查
读取 Flash ID 失败
CS 引脚未正确拉低或跳线帽未连接(检查 J3 处连接)。
SPI 波特率过高,超出 Flash 支持范围(降低至 1MHz 测试)。
Flash 写保护功能启用(WP 引脚接地时启用,需接 VCC 禁用)。
数据校验失败
读写数据长度不匹配。
读写数据地址超出 Flash 容量范围。
擦除不彻底(未先擦除就写入,NOR Flash 需先擦除至全 1)。
读写速度慢
SPI 波特率过低,提高至 10MHz 或 20MHz 测试。
Flash 写入速度慢,建议使用页编程或扇区擦除,避免全片擦除。
- demo工程链接:
- SFUD开源仓库链接: