SFUD

串行 Flash 万能驱动库
授权协议 MIT
开发语言 C/C++
所属分类 Web应用开发、 Flash开发包
软件类型 开源软件
地区 国产
投 递 者 刘承悦
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

SFUD (Serial Flash Universal Driver)  串行 Flash 万能驱动库


0、SFUD 是什么

SFUD 是一款开源的串行 SPI Flash 通用驱动库。由于现有市面的串行 Flash 种类居多,各个 Flash 的规格及命令存在差异, SFUD 就是为了解决这些 Flash 的差异现状而设计,让我们的产品能够支持不同品牌及规格的 Flash,提高了涉及到 Flash 功能的软件的可重用性及可扩展性,同时也可以规避 Flash 缺货或停产给产品所带来的风险。

  • 主要特点:面向对象(同时支持多个 Flash 对象)、可灵活裁剪、扩展性强、支持 4 字节地址

  • 资源占用

    • 标准占用:RAM:0.2KB ROM:5.5KB

    • 最小占用:RAM:0.1KB ROM:3.6KB

  • 设计思路:这里要首先跟大家介绍一个标准: SFDP ,它是 JEDEC (固态技术协会)制定的串行 Flash 功能的参数表标准,最新版 V1.6B (点击这里查看)。该标准规定了,每个 Flash 中会存在一个参数表,该表中会存放 Flash 容量、写粗粒度、擦除命令、地址模式等 Flash 规格参数。目前,除了部分厂家旧款 Flash 型号会不支持该标准,其他绝大多数新出厂的 Flash 均已支持 SFDP 标准。所以该库在初始化时会优先读取 SFDP 表参数,如果该 Flash 不支持 SFDP,则查询配置文件 ( /sfud/inc/sfud_flash_def.h ) 中提供的 Flash 参数信息表 中是否支持该款 Flash。如果不支持,则可以在配置文件中添加该款 Flash 的参数信息(添加方法详细见 2.5 添加库目前不支持的 Flash)。获取到了 Flash 的规格参数后,就可以实现对 Flash 的全部操作。

1、为什么选择 SFUD

  • 避免项目因 Flash 缺货、Flash 停产或产品扩容而带来的风险;

  • 越来越多的项目将固件存储到串行 Flash 中,例如:ESP8266 的固件、主板中的 BIOS 及其他常见电子产品中的固件等等,但是各种 Flash 规格及命令不统一。使用 SFUD 即可避免,在相同功能的软件平台基础下,无法适配不同 Flash 种类的硬件平台的问题,提高软件的可重用性;

  • 简化软件流程,降低开发难度。现在只需要配置好 SPI 通信,即可畅快的开始玩串行 Flash 了;

  • 可以用来制作 Flash 编程器/烧写器

2、SFUD 如何使用

2.1 已支持 Flash

下表为所有在 Demo 平台上进行过真机测试的 Flash。目前 SFUD 提供的 Flash 参数信息表 只包括下表中 不支持 SFDP 标准的 Flash,其他不支持 SFDP 标准的 Flash 需要大家以后 共同来完善和维护 (Github|OSChina) 。如果觉得这个开源项目很赞,可以点击 项目主页 右上角的 Star ,同时把它推荐给更多有需要的朋友。

型号 制造商 容量 最高速度 SFDP 备注
W25Q40BV Winbond 4Mb 50Mhz 不支持 已停产
W25Q80DV Winbond 8Mb 104Mhz 支持
W25Q16CV Winbond 16Mb 104Mhz 支持
W25Q32BV Winbond 32Mb 104Mhz 支持
W25Q64CV Winbond 64Mb 80Mhz 支持
W25Q128BV Winbond 128Mb 104Mhz 支持
MX25L3206E Macronix 32Mb 86MHz 支持
KH25L3206E Macronix 32Mb 86Mhz 支持
SST25VF016B Microchip 16Mb 50MHz 不支持 SST 已被 Microchip 收购
M25P32 Micron 32Mb 75Mhz 不支持
EN25Q32B EON 32Mb 104MHz 不支持
GD25Q64B GigaDevice 64Mb 120Mhz 不支持
S25FL216K Cypress 16Mb 65Mhz 不支持
A25LQ64 AMIC 64Mb 104Mhz 支持
A25L080 AMIC 8Mb 100Mhz 不支持
F25L004 ESMT 4Mb 100Mhz 不支持
PCT25VF016B PCT 16Mb 80Mhz 不支持 SST 授权许可,会被识别为 SST25VF016B
AT45DB161E ADESTO 16Mb 85MHz 不支持 ADESTO 收购 Atmel 串行闪存产品线

更多 API 说明 及 配置方法详见源码中的说明文档及 https://github.com/armink/SFUD

目前以支持如下平台下的 Demo

路径 平台描述
/demo/stm32f10x_non_os STM32F10X 裸机平台
/demo/stm32f2xx_rtt STM32F2XX + RT-Thread 操作系统平台


  • 本文搬运自SFUD开源项目的相关说明,仅供学习、参考,不涉及任何商业行为。此外,向所有曾参与该开源项目的开发者致敬。 0、SFUD 是什么 SFUD(Serial Flash Universal Driver) 是一款开源的串行 SPI Flash 通用驱动库。由于现有市面的串行 Flash 种类居多,各个 Flash 的规格及命令存在差异, SFUD 就是为了解决这些 Flash 的差异现状而设

  • 基础资料 基于Air105开发板:Air105 - LuatOS 文档 上手:开发上手 - LuatOS 文档 探讨重点 官方SFUD库操作-外置flash demo相关内容的学习及探讨。 扩展: 合宙Air103|SDIO (扩展) |LuatOS-SOC接口|官方demo|学习(15-3):SDIO - 文件读写操作_打酱油的工程师的博客-CSDN博客 合宙Air105|fs| io操作(扩展

  • 目录 概述 一、使用方法 0、SFUD 是什么 1、为什么选择 SFUD 2、SFUD 如何使用 2.2 API 说明 2.3 配置方法 2.4 移植说明 2.5 添加库目前不支持的 Flash 2.6 Demo 2.7 许可 二、STM32CubeMx配置  三、Examples 四、运行结果 五、总结 概述          本篇文章介绍如何使用STM32HAL库,移植SFUD开源库。 Git

  • 前言 本文是一个初学者的学习记录,可能有误。 SFUD是针对flash的一种通用的组件,简单来说就是使用SFUD再加上RTT的SPI驱动,基本可以兼容大多数的FLASH,而不用自己再去写驱动。 一、kconfig的配置 1.配置对应的SPI和SFUD 代码如下(示例): menu "Onboard Peripheral Drivers" menuconfig BSP_USING_SPI_FLA

  • 准备 潘多拉,打开板载 spi flash 示例代码 简单的进行测试: #include <rtthread.h> #include <rtdevice.h> #include <board.h> #include <spi_flash_sfud.h> int main(void) { sfud_err result; uint8_t *read_data;//读取到的数据

 相关资料
  • SFUD 是一款开源的串行 SPI Flash 通用驱动库。由于现有市面的串行 Flash 种类居多,各个 Flash 的规格及命令存在差异, SFUD 就是为了解决这些 Flash 的差异现状而设计,让我们的产品能够支持不同品牌及规格的 Flash,提高了涉及到 Flash 功能的软件的可重用性及可扩展性,同时也可以规避 Flash 缺货或停产给产品所带来的风险。 在使用 SFUD 时候需要进行

  • 启动Flash® Player   若想在网络浏览接口上显示Macromedia® Flash® 之内容,需先与网络联机,完成认证程序。请遵循画面指示,正确操作。网络联机的详细说明,请参阅(网络设定) > [Infrastructure模式]。 提示 修改此项设定后,若要隐藏Flash®内容,请选择(网络) > (网络浏览接口) > [工具] > [设定] > [显示设置],变更原先的设定。

  • 问题内容: 有一天,我怀疑我将不得不学习hadoop并将所有这些数据传输到非结构化数据库中,但是我感到惊讶的是,在如此短的时间内,性能如此显着下降。 我有一个只有不到600万行的mysql表。我正在对该表进行非常简单的查询,并相信我已经安装了所有正确的索引。 查询是 解释返回 因此,据我所知,我使用的索引正确,但是此查询需要11秒钟才能运行。 数据库是MyISAM,而phpMyAdmin表示该表是

  • 驱动程序版本为: 我的问题是,当我使用api find和一些来自java的过滤器时,操作需要15秒。 我检查了mongo服务器日志文件,发现跟踪是一个命令,而不是一个查询: 2015-09-01T12:11:47.496+0200I命令[conn503]命令b.$CMD命令:计数{count:“logs”,查询:{timestamp:{$GTE:新日期(1433109600000)},aplica

  • 驱动是一个允许 LCUI 应用程序与操作系统接口交互的模块,它针对操作系统提供的接口做了一层抽象,提供了一套适合 LCUI 运行机制的接口,使我们在编写 LCUI 应用程序时无需考虑操作系统适配问题即可实现跨平台编译运行。 让 LCUI 应用程序能够正常工作的驱动有事件循环驱动、键盘驱动、鼠标驱动、视频驱动和触控驱动,接下来让我们深入了解这些驱动的工作方式和开发方式。

  • V9中新增加了万能字段,用户可以通过万能字段来实现一些常规字段无法实现的表单布局类型与功能 例如: 例如: 一、如何添加万能字段? 后台->内容 -> 内容相关设置 -> 模型管理 选择字段管理,添加/编辑字段,在字段类型中选择万能字段 例如我有如下字段 这里还要设置这些字段为:万能字段的附属字段! 那么我可以这样设置来实现,上面图例的效果 二、高级使用 - 函数的支持 很多时候,虽然万能字段支持