# SFUD (Serial Flash Universal Driver) 串行 Flash 通用驱动库
---
## 0、SFUD 是什么
[SFUD](https://github.com/armink/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 ([点击这里查看](https://www.jedec.org/standards-documents/docs/jesd216b))。该标准规定了,每个 Flash 中会存在一个参数表,该表中会存放 Flash 容量、写粗粒度、擦除命令、地址模式等 Flash 规格参数。目前,除了部分厂家旧款 Flash 型号会不支持该标准,其他绝大多数新出厂的 Flash 均已支持 SFDP 标准。所以该库在初始化时会优先读取 SFDP 表参数,如果该 Flash 不支持 SFDP,则查询配置文件 ( `/sfud/inc/sfud_flash_def.h` ) 中提供的 **Flash 参数信息表** 中是否支持该款 Flash。如果不支持,则可以在配置文件中添加该款 Flash 的参数信息(添加方法详细见 [2.5 添加库目前不支持的 Flash](#25-添加库目前不支持的-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](https://github.com/armink/SFUD)|[OSChina](http://git.oschina.net/armink/SFUD)|[Coding](https://coding.net/u/armink/p/SFUD/git))** 。如果觉得这个开源项目很赞,可以点击 [项目主页](https://github.com/armink/SFUD) 右上角的 **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[2].pdf)|Winbond|64Mb|80Mhz|支持||
|[W25Q128BV](http://www.winbond.com/resource-files/w25q128bv_revh_100313_wo_automotive.pdf)|Winbond|128Mb|104Mhz|支持||
|[W25Q256FV](http://www.winbond.com/resource-files/w25q256fv%20revi%2002262016%20kms.pdf)|Winbond|256Mb|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|不支持||
|[S25FL164K](http://www.cypress.com/file/196886/download)|Cypress|64Mb|108Mhz|支持||
|[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 串行闪存产品线|
### 2.2 API 说明
#### 2.2.1 初始化 SFUD 库
```C
sfud_err sfud_init(void)
```
#### 2.2.2 获取 Flash 设备对象
在 SFUD 配置文件中会定义 Flash 设备表,负责存放所有将要使用的 Flash 设备对象,所以 SFUD 支持多个 Flash 设备同时驱动。设备表的配置在 `/sfud/inc/sfud_cfg.h` 中 `SFUD_FLASH_DEVICE_TABLE` 宏定义,详细配置方法参照 [2.3 配置方法 Flash](#23-配置方法))。本方法通过 Flash 设备位于设备表中索引值来返回 Flash 设备对象,超出设备表范围返回 `NULL` 。
```C
sfud_flash *sfud_get_device(size_t index)
```
|参数 |描述|
|:----- |:----|
|index |Flash 设备位于 FLash 设备表中的索引值|
#### 2.2.3 获取 Flash 设备总数
返回 Flash 设备表的总长度。
```C
size_t sfud_get_device_num(void)
```
#### 2.2.4 获取 Flash 设备表
```C
const sfud_flash *sfud_get_device_table(void)
```
#### 2.2.5 读取 Flash 数据
```C
sfud_err sfud_read(const sfud_flash *flash, uint32_t addr, size_t size, uint8_t *data)
```
|参数 |描述|
|:----- |:----|
|flash |Flash 设备对象|
|addr |起始地址|
|size |读取数据的大小|
|data |读取到的数据|
#### 2.2.6 擦除 Flash 数据
```C
sfud_err sfud_erase(const sfud_flash *flash, uint32_t addr, size_t size)
```
|参数 |描述|
|:----- |:----|
|flash |Flash 设备对象|
|addr |起始地址|
|size |擦除数据的大小|
#### 2.2.7 擦除 Flash 全部数据
```C
sfud_err sfud_chip_erase(const sfud_flash *flash)
```
|参数 |描述|
|:----- |:----|
|flash |Flash 设备对象|
#### 2.2.8 往 Flash 写数据
```C
sfud_err sfud_write(const sfud_flash *flash, uint32_t addr, size_t size, const uint8_t *data)
```
|参数 |描述|
|:----- |:----|
|flash |Flash 设备对象|
|addr |起始地址|
|size
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【作品名称】:基于mpu9250/6050和舵机的两轴云台,采用ebox和C++编程,Stm32f103单片机 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: servo_pan_tilt 基于mpu9250/6050和舵机的两轴云台,采用ebox和C++编程,Stm32f103单片机
资源推荐
资源详情
资源评论
收起资源包目录
基于mpu9250/6050和舵机的两轴云台,采用ebox和C++编程,Stm32f103单片机 (583个子文件)
os_cpu_a.asm 12KB
os_cpu_a.asm 6KB
keilkill.bat 372B
build 807B
build_test 293B
ff.c 146KB
tasks.c 140KB
stm32f10x_tim.c 104KB
os_core.c 85KB
queue.c 78KB
stm32f10x_flash.c 59KB
os_flag.c 54KB
os_task.c 50KB
stm32f10x_rcc.c 49KB
stm32f10x_adc.c 45KB
os_tmr.c 45KB
stm32f10x_i2c.c 43KB
stm32f10x_can.c 43KB
os_q.c 40KB
stm32f10x_usart.c 36KB
os_mutex.c 36KB
system_stm32f10x.c 35KB
stm32f10x_fsmc.c 34KB
timers.c 33KB
os_mbox.c 30KB
stm32f10x_spi.c 29KB
stm32f10x_dma.c 28KB
os_sem.c 28KB
port.c 28KB
stm32f10x_sdio.c 27KB
usb_regs.c 27KB
cJSON.c 27KB
sfud.c 27KB
port.c 27KB
port.c 27KB
event_groups.c 23KB
stm32f10x_gpio.c 22KB
port.c 21KB
os_mem.c 19KB
test1.c 18KB
stm32f10x_dac.c 18KB
heap_5.c 18KB
core_cm3.c 16KB
heap_4.c 16KB
heap.c 16KB
croutine.c 15KB
mbascii.c 15KB
sfud_sfdp.c 15KB
os_cpu_c.c 15KB
mb.c 13KB
os.c 12KB
mbrtu.c 12KB
port.c 12KB
port.c 12KB
mbfuncholding.c 12KB
heap_2.c 12KB
os_dbg.c 11KB
stm32f10x_cec.c 11KB
os_time.c 11KB
list.c 11KB
MQTTPacket.c 10KB
mbfunccoils.c 9KB
stm32f10x_pwr.c 8KB
MQTTFormat.c 8KB
stm32f10x_rtc.c 8KB
stm32f10x_bkp.c 8KB
portserial.c 7KB
crc.c 7KB
heap_1.c 7KB
misc.c 7KB
test.c 7KB
stm32f10x_exti.c 7KB
MQTTConnectClient.c 6KB
mbtcp.c 5KB
stm32f10x_wwdg.c 5KB
diskio.c 5KB
mbcrc.c 5KB
MQTTSerializePublish.c 5KB
heap_3.c 5KB
stm32f10x_dbgmcu.c 5KB
mbutils.c 5KB
mbfuncinput.c 5KB
MQTTConnectServer.c 5KB
stm32f10x_iwdg.c 5KB
mbfuncdisc.c 4KB
porttimer.c 4KB
pub0sub1_nb.c 4KB
MQTTSubscribeClient.c 4KB
pub0sub1.c 4KB
MQTTDeserializePublish.c 3KB
MQTTSubscribeServer.c 3KB
mbfuncother.c 3KB
MQTTUnsubscribeClient.c 3KB
stm32f10x_crc.c 3KB
MQTTUnsubscribeServer.c 3KB
itoa.c 3KB
sfud_port.c 3KB
cpu.c 2KB
qos0pub.c 2KB
portevent.c 2KB
共 583 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
MarcoPage
- 粉丝: 4304
- 资源: 8839
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功