参考文档(国内):SFUD 参考文档
一、概述
SFUD,即 Serial Flash Universal Driver,是一款开源的串行 SPI Flash 通用驱动库。
具体的描述可以查看上面的参考手册。
二、SFDP
SFDP 是 JEDEC(固态技术协会)制定的串行 Flash 功能的参数表标准。
该标准规定了,每个 Flash 中会存在一个 参数表 ,该表中会存放 Flash 容量、写粒度、擦除命令、地址模式等 Flash 规格参数。
如果要知道当前你所使用的 SPI Flash 是否支持 SFDP,则可以查阅对应的技术手册。
在这里,以 W25Q128 为例,在技术手册的 “FEATURES” 的 “Advanced Security Features” 中可以找到这样的一句话:Discoverable Parameters (SFDP) Register。
三、SFUD 的初始化过程
在这里,以 W25Q128 为例,我们先来看下初始化的代码。
/* 将 qpsi10 设备绑定到 qspi1 总线上 */
stm32_qspi_bus_attach_device("qspi1", "qspi10", RT_NULL, 4, w25qxx_enter_qspi_mode, RT_NULL);
/* 初始化 w25q128 */
rtt_dev_w25q128 = rt_sfud_flash_probe("W25Q128", "qspi10");
1、 rt_sfud_flash_probe 函数
/* components/drivers/spi/spi_flash_sfud.c */
/**
* 在这里,我们需要注意一下输入的形参:
* spi_flash_dev_name = "W25Q128"
* spi_dev_name = "qspi10"
**/
rt_spi_flash_device_t rt_sfud_flash_probe(const char *spi_flash_dev_name, const char *spi_dev_name)
{
...
/* 找到 spi 设备 "qspi10" */
rtt_dev->rt_spi_device = (struct rt_spi_device *) rt_device_find(spi_dev_name);
...
/* 配置 spi 设备 */
rt_spi_configure(rtt_dev->rt_spi_device, &cfg);