SFUD - 串行 Flash 万能驱动库


MIT
跨平台
C/C++

软件简介

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](http://microchip.ua/esp8266/W25Q40BV\(EOL\).pdf) Winbond 4Mb 50Mhz 不支持 已停产
[W25Q80DV](http://www.winbond.com/resource-files/w25q80dv_revg_07212015.pdf) Winbond 8Mb 104Mhz 支持
[W25Q16CV](http://www.winbond.com/resource-files/da00-w25q16cvf1.pdf) Winbond 16Mb 104Mhz 支持
[W25Q32BV](http://www.winbond.com/resource- files/w25q32bv_revi_100413_wo_automotive.pdf) Winbond 32Mb 104Mhz 支持
[W25Q64CV](http://www.winbond.com/resource- files/w25q64cv_revh_052214%5B2%5D.pdf) Winbond 64Mb 80Mhz 支持
[W25Q128BV](http://www.winbond.com/resource- files/w25q128bv_revh_100313_wo_automotive.pdf) Winbond 128Mb 104Mhz 支持
[MX25L3206E](http://www.macronix.com/Lists/DataSheet/Attachments/3199/MX25L3206E,%203V,%2032Mb,%20v1.5.pdf) Macronix 32Mb 86MHz 支持
[KH25L3206E](http://www.macronix.com.hk/Lists/Datasheet/Attachments/131/KH25L3206E.pdf) Macronix 32Mb 86Mhz 支持
[SST25VF016B](http://ww1.microchip.com/downloads/en/DeviceDoc/20005044C.pdf) Microchip 16Mb 50MHz 不支持 SST 已被 Microchip 收购
[M25P32](https://www.micron.com/~/media/documents/products/data-sheet/nor- flash/serial-nor/m25p/m25p32.pdf) Micron 32Mb 75Mhz 不支持
[EN25Q32B](http://www.kean.com.au/oshw/WR703N/teardown/EN25Q32B%2032Mbit%20SPI%20Flash.pdf) EON 32Mb 104MHz 不支持
[GD25Q64B](http://www.gigadevice.com/product/download/24.html) GigaDevice 64Mb 120Mhz 不支持
[S25FL216K](http://www.cypress.com/file/197346/download) Cypress 16Mb 65Mhz 不支持
[A25LQ64](http://www.amictechnology.com/datasheets/A25LQ64.pdf) AMIC 64Mb 104Mhz 支持
[A25L080](http://www.amictechnology.com/datasheets/A25L080.pdf) AMIC 8Mb 100Mhz 不支持
[F25L004](http://www.esmt.com.tw/db/manager/upload/f25l004.pdf) ESMT 4Mb 100Mhz 不支持
[PCT25VF016B](http://pctgroup.com.tw/attachments/files/files/248_25VF016B-P.pdf) PCT 16Mb 80Mhz 不支持 SST 授权许可,会被识别为 SST25VF016B
[AT45DB161E](http://www.adestotech.com/wp-content/uploads/doc8782.pdf) ADESTO 16Mb 85MHz 不支持 ADESTO 收购 Atmel 串行闪存产品线

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

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

路径 平台描述
[/demo/stm32f10x_non_os](https://github.com/armink/SFUD/tree/master/demo/stm32f10x_non_os) STM32F10X 裸机平台
[/demo/stm32f2xx_rtt](https://github.com/armink/SFUD/tree/master/demo/stm32f2xx_rtt) STM32F2XX + [RT-Thread](http://www.rt-thread.org/) 操作系统平台