搜索
bottom↓
回复: 180

【开源】万能 SPI Flash 驱动库 SFUD 正式发布

  [复制链接]

出0入198汤圆

发表于 2016-7-26 21:27:27 | 显示全部楼层 |阅读模式
本帖最后由 sunnydragon 于 2016-7-26 21:27 编辑

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|Coding) 。如果觉得这个开源项目很赞,可以点击 项目主页 右上角的 Star ,同时把它推荐给更多有需要的朋友。

[td]
型号
制造商
容量
最高速度
SFDP
备注
Winbond
4Mb
50Mhz
不支持
已停产
Winbond
8Mb
104Mhz
支持

Winbond
16Mb
104Mhz
支持

Winbond
32Mb
104Mhz
支持

Winbond
64Mb
80Mhz
支持

Winbond
128Mb
104Mhz
支持

Macronix
32Mb
86MHz
支持

Macronix
32Mb
86Mhz
支持

Microchip
16Mb
50MHz
不支持
SST 已被 Microchip 收购
Micron
32Mb
75Mhz
不支持

EON
32Mb
104MHz
不支持

GigaDevice
64Mb
120Mhz
不支持

Cypress
16Mb
65Mhz
不支持

AMIC
64Mb
104Mhz
支持

AMIC
8Mb
100Mhz
不支持

ESMT
4Mb
100Mhz
不支持

PCT
16Mb
80Mhz
不支持
SST 授权许可,会被识别为 SST25VF016B
ADESTO
16Mb
85MHz
不支持
ADESTO 收购 Atmel 串行闪存产品线
更多 API 说明 及 配置方法详见源码中的说明文档及 https://github.com/armink/SFUD

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

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

项目采用 MIT 开源协议


再晒几张这些日子测试环境的图片:

ART-WiFi 开发板及 Flash 测试座。在这里要感谢 RT-Thread 开发团队提供的 ART-WiFi 开发板。


Flash 全家福。为了保证库的通用性及测试覆盖率,选购了尽可能多的各种品牌及型号的 SPI Flash。


全系列华邦 SPI Flash 模块


本坛下载:

最新版请关注 GitHub :https://github.com/armink/SFUD



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入198汤圆

 楼主| 发表于 2016-7-27 08:41:08 | 显示全部楼层
li.wen 发表于 2016-7-26 21:47
使用过楼主的Easyflash;非常好用!

也欢迎多多尝试 SFUD 。开发这个库实际上还有一个原因,就是我当时想给 EasyFlash 制作 SPI Flash Demo 时,没有找到合适用的通用的 SPI Flash 库。所以有了 SFUD 之后,也能很大层面上降低 EasyFlash 在 SPI Flash 上的入门使用难度。

出0入198汤圆

 楼主| 发表于 2016-7-27 08:41:53 | 显示全部楼层
JohnsonTan 发表于 2016-7-26 21:47
非常好,有没有SDRAM的驱动库呀

这个暂时没有~

出0入198汤圆

 楼主| 发表于 2016-7-27 08:43:23 | 显示全部楼层
zxq6 发表于 2016-7-26 21:52
关注一个,最近可能要用到。


太好了,欢迎成为 SFUD 的首批试用用户,到时候有任何问题可以随时与我联系。

出0入198汤圆

 楼主| 发表于 2016-7-27 08:52:30 | 显示全部楼层
JJKwong 发表于 2016-7-26 22:22
差距好大,每次LZ 开源,都是新知识,发现LZ面好广

过奖了,实际上我开源的很多软件,都是围绕着 EasyFlash 展开的。要感谢广大网友们的建议与支持,才使得我能认识这么多朋友,接触到这么多新知识。

出0入198汤圆

 楼主| 发表于 2016-7-27 08:58:29 | 显示全部楼层
aozima 发表于 2016-7-26 22:52
支持,挺累人的活。

虽然有标准,但还是得要一个个测一下才能确保正确。 ...

还是吴兄理解啊。真正费时的工作确实是在调试测试阶段。因为要对自己的软件负责,所以软件质量一直是我放在第一位要求,这样也能让广大用户少遇到点坑。

出0入198汤圆

 楼主| 发表于 2016-7-27 09:03:35 | 显示全部楼层
lfgc 发表于 2016-7-27 07:35
这个真需要支持,对于这样的产品,可靠方便的真少。

多谢支持,也希望大家多多试用 SFUD ,多多吐槽,一起来完善它。国内的开源环境需要大家一起来构建。

出0入198汤圆

 楼主| 发表于 2016-7-27 09:16:21 | 显示全部楼层
zhousun 发表于 2016-7-27 08:31
楼主出面,必有精品;楼主什么时候给我普及下提高软件技术的讲座

学习(基础要扎实,可以读一些软件设计方面书籍)->动手(Coding any where)->交流(论坛、QQ群、GitHub)->思考(不要浮躁,看问题要看本质)->总结(总结为改变提供方向)->改变(不停的重构你的软件)    我就是用的这个闭环

出0入198汤圆

 楼主| 发表于 2016-7-27 21:00:20 | 显示全部楼层
闪客 发表于 2016-7-27 09:45
太棒了!
有此SFUD库,配合EasyFlash,很大部分应用可以摒弃臃肿的文件系统了。 ...

哈哈~这还得感谢你的建议,也就是在准备给 EasyFlash 做 SPI Flash Demo 时,找不到合适的 SPI Flash 通用驱动库,从而产生了开源 SFUD 的动机。

有了 SFUD ,再来做给 EasyFlash 做 SPI Flash Demo 就非常简单了,争取这周就把 EasyFlash 的 外部 SPI Flash 环境变量 功能 Demo 做好。

出0入198汤圆

 楼主| 发表于 2016-7-27 21:03:13 | 显示全部楼层
AlertTao 发表于 2016-7-27 10:16
楼主对文档的整理,真心佩服!!非常干净,清爽!!

呵呵,过奖了~我对用户体验还是蛮重视的。也希望这样吸引更多的朋友来了解 SFUD ,更快的上手使用 SFUD ,还有其他建议也欢迎再提哈。

出0入198汤圆

 楼主| 发表于 2016-7-27 21:15:21 | 显示全部楼层
honami520 发表于 2016-7-27 10:33
兄弟看来很热衷于开源项目啊!每次搞出来的都还挺不错。

业余兴趣爱好。有机会一起交流。

出0入198汤圆

 楼主| 发表于 2016-7-29 08:08:51 | 显示全部楼层
目前 EasyFlash 已经提供了针对 SPI Flash 的裸机平台 Demo ,位于 /demo/env/stm32f10x/non_os_spi_flash 目录下,大家可以直接去其 GitHub: https://github.com/armink/EasyFlash  ,OSChina: http://git.oschina.net/armink/EasyFlash ,Coding: https://coding.net/u/armink/p/EasyFlash/git 进行下载,也可以直接下载我这里刚下载好了版本

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入198汤圆

 楼主| 发表于 2016-8-16 17:09:01 | 显示全部楼层
maxiang1985 发表于 2016-8-16 16:09
这个楼主有在STM32F407,F4板移植好的Demo?

暂时没有,不过 F4 和 F2 的 API 很接近,你可以借鉴下 STM32F20X 的那个 Demo 。

出0入198汤圆

 楼主| 发表于 2016-8-27 20:34:47 | 显示全部楼层
coolhorse 发表于 2016-8-27 10:25
//软件版本号定义
const char sw_ver_name[] @ ".version" = "swver";
const char sw_ver_value[] @ ".vers ...

这里定义了两个字符串 sw_ver_name 及 sw_ver_value (软件版本号内容),和平时定义字符串的区别是这两个字符串是放在 ROM 的 ".version" 段内的。

而 ".version" 段可以固定在 ROM 的某个固定地址,这样上位机软件、BootLoader 软件获取到了软件 bin 后,可以访问 bin 文件的固定地址内容来获取此 bin 文件对应的软件版本号,以便于在更新软件时的对版本信息进行检查与确认。

出0入198汤圆

 楼主| 发表于 2016-8-28 22:56:28 | 显示全部楼层
maimaige 发表于 2016-8-27 22:35
楼主,你的代码这么规范,是遵循的什么原则啊,有文档和资料或者书,参考一下不,或者遵循什么编码规范 ...

主要是借鉴的 RT-Thread 操作系统编程的规范。

出0入198汤圆

 楼主| 发表于 2016-8-28 22:57:32 | 显示全部楼层

刚才又推送更新了,建议选中 watch 项目,及时关注项目更新信息。

出0入198汤圆

 楼主| 发表于 2016-8-28 23:03:15 | 显示全部楼层
最近对软件主要做了以下两项更新,强烈建议大家将核心源码更新下。

1、【修复】采用 SFDP 参数在某些条件下,擦除命令选择不合适的问题;
2、【增加】全片擦除方法。

更多信息详见:

GitHub:https://github.com/armink/SFUD
OSChina:http://git.oschina.net/Armink/SFUD
Coding:https://coding.net/u/armink/p/SFUD/git

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入198汤圆

 楼主| 发表于 2016-9-29 08:03:16 | 显示全部楼层
coolhorse 发表于 2016-9-28 11:06
楼主你好,我移植了你的代码到RT THREAD,SPI FLASH挂载在/目录下,SPI FLASH创建了/SD目录,SD卡挂载在/SD ...

是不是用最新源码测试的?当时一楼位置源码存在一个“采用 SFDP 参数在某些条件下,擦除命令选择不合适的问题”,后来修复了。

你可以在 GitHub : https://github.com/armink/SFUD 下载最新源码,并更换核心源码再试试。有结果了再跟帖留言。

出0入198汤圆

 楼主| 发表于 2016-9-29 08:31:07 | 显示全部楼层
coolhorse 发表于 2016-9-28 11:06
楼主你好,我移植了你的代码到RT THREAD,SPI FLASH挂载在/目录下,SPI FLASH创建了/SD目录,SD卡挂载在/SD ...

SFUD 本身只是驱动库,所有具体操作都要听从于上层应用的安排,所以它自己初始化时候是不会执行擦除的操作。

你这个现象倒是让我想到了,之前由于 EasyFlash 的 Log 功能还没有与 SPI Flash 对接好,所以当 EasyFlash 在 使用 SFUD 作为底层驱动时,Log 功能每次初始化在初始化过程中都会错误的擦除部分 Flash 区域。

不过这个 Bug 也很快修复了,如果使用了 EasyFlash ,建议也对其源码进行更新。

出0入198汤圆

 楼主| 发表于 2016-9-29 09:23:02 | 显示全部楼层
coolhorse 发表于 2016-9-29 09:11
问题解决了,是我驱动写错了,现在上传文件系统驱动

解决完成就好,不过还是建议定期关注项目首页,及时采用最新源码。

出0入198汤圆

 楼主| 发表于 2016-9-29 09:23:56 | 显示全部楼层
coolhorse 发表于 2016-9-29 09:14
#include
#include
#include

多谢分享哈~~

出0入198汤圆

 楼主| 发表于 2016-9-29 09:26:05 | 显示全部楼层
coolhorse 发表于 2016-9-29 09:22
测试两款芯片:N25Q032A13ESE40F(支持SFUD)  SST25VF032B(不支持SFUD) 通过,  SST26VF032B (支持SFUD)不 ...

SST26VF032B (支持SFUD)不通过,具体是什么现象?

出0入198汤圆

 楼主| 发表于 2016-9-29 09:38:26 | 显示全部楼层
coolhorse 发表于 2016-9-29 09:22
测试两款芯片:N25Q032A13ESE40F(支持SFUD)  SST25VF032B(不支持SFUD) 通过,  SST26VF032B (支持SFUD)不 ...


你的括号里面写的 “支持 SFUD” 或 “不支持SFUD”,应该指的是 SFDP 参数表吧。SFUD 是万能 SPI Flash 驱动库的名称,两个单词差一个字母

出0入198汤圆

 楼主| 发表于 2016-9-29 10:49:54 | 显示全部楼层
coolhorse 发表于 2016-9-29 10:18
是的,不好意思啊,支持 SFUD” 或 “不支持SFUD”,指的是 SFDP 参数表,SST26VF032B支持参数表的,上面打 ...

你用用 RT-Thread Demo 里面那个 sf 命令测试下这个 Flash 试试,命令教程在这里:https://github.com/armink/SFUD/tree/master/demo/stm32f2xx_rtt#111-flash-操作命令

先定位下问题,确实不好找,你再寄给我样品,不过要等国庆以后才能帮你测试了。

出0入198汤圆

 楼主| 发表于 2016-9-29 11:09:27 | 显示全部楼层
本帖最后由 sunnydragon 于 2016-9-29 11:11 编辑
coolhorse 发表于 2016-9-29 10:18
是的,不好意思啊,支持 SFUD” 或 “不支持SFUD”,指的是 SFDP 参数表,SST26VF032B支持参数表的,上面打 ...


对了,SST 的 Flash 是不是上电都默认是写保护的?我记得我测试 SST25 的时候就有这个问题, 同时 SST25 写数据还是很奇葩的 AAI 模式,所以我针对 支持 AAI 模式的 Flash 在初始化时,做了去除写保护处理,如图:



所以 SST26 系列,你可以这样尝试,两种方法:

第一种:使用 RT-Thread  Demo 可以使用我提供的
  1. flash_status <read|write> <device_index> [<1:volatile|0:non-volatile> <status>]
复制代码

命令,在 MSH 终端中输入:
  1. flash_status write 1 0
复制代码
,再进行写数据试试。

第二种:执行完 sfud_err sfud_init(void) 后,再增加  sfud_write_status(flash, true, 0x00); 代码,保证 Flash 被去除写保护

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入198汤圆

 楼主| 发表于 2016-10-10 21:26:13 | 显示全部楼层
coolhorse 发表于 2016-9-29 10:18
是的,不好意思啊,支持 SFUD” 或 “不支持SFUD”,指的是 SFDP 参数表,SST26VF032B支持参数表的,上面打 ...

SST26VF032B 无法执行写操作的问题解决了吗?跟大家分享下进展吧。

出0入198汤圆

 楼主| 发表于 2016-10-11 21:19:04 | 显示全部楼层
FireHe 发表于 2016-10-11 17:12
我已经用在了项目上,FLASH是WINBOND的 W25Q64FV

因为SFUD的软件做得非常好,所以几乎没有啥移植工作,直 ...

多谢你的反馈,写的非常仔细认真,我来逐条回复下:

1、这点我确实也感觉到了,大概一个月前把全片擦除 API:sfud_chip_erase 加入进去了。以后可以常去 GitHub ,关注项目进展哈:lol:} ;(建议点击 GitHub 项目右上角的 watch 按钮,这样项目有更新会邮件通知你)

2、已修改,详见 GitHub 最新代码;

3、这点没有搞太明白,是说代码中的 SFUD_FLASH_CHIP_TABLE 没有包含支持 SFDP 参数表的 Flash 芯片吗?

4、刚才也对文档做了更新,在这里: https://www.zybuluo.com/armink/note/363414 ,你看下还有没有要完善的。没问题的话,我就推送至 GitHub 了。

还有其他建议或想法也欢迎随时反馈。

出0入198汤圆

 楼主| 发表于 2016-10-12 07:49:31 | 显示全部楼层
FireHe 发表于 2016-10-11 23:15
第三点说的是,在说明文档 readme.md 中,有提到很多型号,但在代码的数组列表里面并没有这些型号。用户 ...


我明白你的意思了,那可能是不是我文档中写的不够明确,SFUD_FLASH_CHIP_TABLE 数组里只包含了不支持 JEDEC SFDP 参数表的 Flash 芯片。

如果这块 Flash 芯片支持 JEDEC 的 SFDP 参数表,那么用户是不需要对这块 Flash 芯片做任何参数配置,只要开启了本库的 SFDP 模式(即打开 SFUD_USING_SFDP 宏定义),本库是可以自动读取存放在 Flash 芯片中的 SFDP 参数表,实现对 Flash 自动初始化,非常省事的。

出0入198汤圆

 楼主| 发表于 2016-10-12 08:00:49 | 显示全部楼层
huarana 发表于 2016-10-11 23:35
有没有 spi nandflash的 版本= =


暂时还没有,主要是 SPI 接口的 NandFlash 使用场景感觉太小,当时就没有开发。不过当时也做过部分调研,想要增加 SPI NandFlash 工作量也并不会很大。有没有兴趣我来协助你尝试下?

出0入198汤圆

 楼主| 发表于 2016-10-12 11:51:53 | 显示全部楼层
huarana 发表于 2016-10-12 08:35
spi nand应用场景还是有的。

要求可靠性的场合下,tf卡 sd卡都不是好的解决方案。 而并口的nand对单片机 ...

只驱动 SPI Nand 读写,难度并不大,这会是 SFUD 的主要工作。

就像你说的难度更大的是如何做好 FTL ,这块学问还是挺深的。你们现在是自己在写 FTL 还是用现成的?

出0入198汤圆

 楼主| 发表于 2016-10-12 11:58:32 | 显示全部楼层
FireHe 发表于 2016-10-12 09:13
原来是这样

刚刚看了代码,确实是有自动读取配置的部分,之前阅读不仔细,没看到这个。


是的,如果你的 Flash 支持 SFDP 参数表,甚至可以把 SFUD_USING_FLASH_INFO_TABLE 宏定义关闭,SFUD_FLASH_CHIP_TABLE 这个数组的配置就不需要了,这样代码量还能再降低。

关于芯片更换问题,如果你换的芯片依然支持 JEDEC SFDP 参数表,那么肯定没有任何影响,所有代码都不用改。如果新换的 Flash 不支持 JEDEC SFDP 参数表,就需要开启 SFUD_USING_FLASH_INFO_TABLE ,手动在里面添加 Flash 芯片参数来使用。

出0入198汤圆

 楼主| 发表于 2016-10-13 21:11:06 | 显示全部楼层
FireHe 发表于 2016-10-12 09:13
原来是这样

刚刚看了代码,确实是有自动读取配置的部分,之前阅读不仔细,没看到这个。


新改的文档看了吗?  https://www.zybuluo.com/armink/note/363414

出0入198汤圆

 楼主| 发表于 2016-10-14 08:30:23 | 显示全部楼层
FireHe 发表于 2016-10-14 01:04
看啦

新的文档详细很多。很多细节都讲清楚了。这样更容易上手了

1、is_volatile 的参数含义为该状态写入以后是否需要设置为易闪失的,即设置完的状态掉电后保不保存,true 则不保存。这块你觉得在文档中需要怎么完善下才更好的理解?

2、Flash 写保护是这样的,可以全片也保护,也可以按照扇区写保护,不同的芯片,按照扇区保护的命令、数据差异非常大,所以这也是我一直没法统一的一个原因,最后就提供 sfud_write_status  方法还有 flash->spi.wr 方法给上层用户,用户自己参考芯片手册进行设置更为灵活。

3、初始化成功后 在 flash->chip 结构体中存放的芯片所有参数

  1. /* flash chip information */
  2. typedef struct {
  3.     char *name;                                  /**< flash chip name */
  4.     uint8_t mf_id;                               /**< manufacturer ID */
  5.     uint8_t type_id;                             /**< memory type ID */
  6.     uint8_t capacity_id;                         /**< capacity ID */
  7.     uint32_t capacity;                           /**< flash capacity (bytes) */
  8.     uint16_t write_mode;                         /**< write mode  @see sfud_write_mode */
  9.     uint32_t erase_gran;                         /**< erase granularity (bytes) */
  10.     uint8_t erase_gran_cmd;                      /**< erase granularity size block command */
  11. } sfud_flash_chip;
复制代码


如果芯片支持 SFDP ,还可以通过 flash->sfdp 看到更加全面的参数信息

  1. /**
  2. * the SFDP (Serial Flash Discoverable Parameters) parameter info which used on this library
  3. */
  4. typedef struct {
  5.     bool available;                              /**< available when read SFDP OK */
  6.     uint8_t major_rev;                           /**< SFDP Major Revision */
  7.     uint8_t minor_rev;                           /**< SFDP Minor Revision */
  8.     uint16_t write_gran;                         /**< write granularity (bytes) */
  9.     uint8_t erase_4k;                            /**< 4 kilobyte erase is supported throughout the device */
  10.     uint8_t erase_4k_cmd;                        /**< 4 Kilobyte erase command */
  11.     bool sr_is_non_vola;                         /**< status register is supports non-volatile */
  12.     uint8_t vola_sr_we_cmd;                      /**< volatile status register write enable command */
  13.     bool addr_3_byte;                            /**< supports 3-Byte addressing */
  14.     bool addr_4_byte;                            /**< supports 4-Byte addressing */
  15.     uint32_t capacity;                           /**< flash capacity (bytes) */
  16.     struct {
  17.         uint32_t size;                           /**< erase sector size (bytes). 0x00: not available */
  18.         uint8_t cmd;                             /**< erase command */
  19.     } eraser[SFUD_SFDP_ERASE_TYPE_MAX_NUM];      /**< supported eraser types table */
  20.     //TODO lots of fast read-related stuff (like modes supported and number of wait states/dummy cycles needed in each)
  21. } sfud_sfdp, *sfud_sfdp_t;
复制代码


不过这块可能需要文档描述下, 否则大家都不知道

出0入198汤圆

 楼主| 发表于 2016-10-14 13:26:47 | 显示全部楼层
FireHe 发表于 2016-10-14 10:12
1、哦,那个状态是可以保存在FLASH里面,掉电不丢失的。是吧?也可以写寄存器的方式,但掉电就会丢失?嗯 ...

1、就是这样的

2、当Flash 不使用时,打开写保护是最好的,避免的外部信号干扰对芯片造成影响。接下来,我打算独立出 Flash 全片写保护开启及关闭方法;增加空闲时自动开启写保护的宏定义,开启后必须先执行关闭写保护的方法后,才可以正确执行擦写操作,执行完擦写操作后将会自动对 Flash 开启写保护。另外,出于进一步提高可靠性的考虑,建议用户对关闭保护操作增加授权、校验操作,避免程序跑飞等其他异常场景导致 Flash 被错误的取消保护。

3、现在用户是可以通过 Flash 对象直接读取的。没有封装起来是什么意思,你的意思在写个方法来返回给用户吗?

出0入198汤圆

 楼主| 发表于 2016-10-20 13:40:16 | 显示全部楼层
shentqlf 发表于 2016-10-20 01:03
楼主我的代码上传下,ebox下支持了sfud,
支持软件SPI和硬件SPI。
支持单条总线挂载多个FLASH。(eBox底层 ...

多谢分享~

刚看了下,使用 ebox 来做为底层驱动确实简单了不多。。。

另外软件模拟 SPI 代码在哪里?

出0入198汤圆

 楼主| 发表于 2016-10-20 15:22:30 | 显示全部楼层
shentqlf 发表于 2016-10-20 14:15
也在里面呢啊。吧硬件SPI那部分屏蔽了,然后把软件SPI那些取消屏蔽就行了

...

这个注释我看到了,我指的是 SoftSpi 里具体的实现代码。

出0入198汤圆

 楼主| 发表于 2017-5-30 18:25:24 | 显示全部楼层
FireHe 发表于 2017-5-29 12:52
这两天一个新项目又用上了SFUD,真的非常好用,快速开发。再次感谢  sunnydragon

再反馈一个细节:

什么场景下不需要 info 日志的输出呢?目前我们产品出货时,info 日志也是必须开启的。

出0入198汤圆

 楼主| 发表于 2017-5-31 13:28:29 | 显示全部楼层
FireHe 发表于 2017-5-31 09:54
比如串口要用来作为其他用途的时候,这个跟调试的时候需要打印并不冲突

我是先将基础环境搭好,配置好硬 ...

好的,已经改好了。快从 GitHub: https://github.com/armink/SFUD 上下载下来试试吧,多谢你的反馈。

出0入198汤圆

 楼主| 发表于 2017-11-9 10:54:39 | 显示全部楼层
游在云间 发表于 2017-11-9 06:48
想把代码移植到freertos中,spi_lock可以用freertos中什么替代?

mutex or sem

出0入198汤圆

 楼主| 发表于 2017-11-27 08:24:34 | 显示全部楼层
擦鞋匠 发表于 2017-11-10 17:41
大神是不是参与写过rtthread?署名armink?

嗯,我也是 RT-Thread 开发者。

出0入198汤圆

 楼主| 发表于 2017-11-27 08:25:54 | 显示全部楼层
tianxiaoMCU 发表于 2017-11-25 22:41
楼主,这个驱动怎么添加Dual SPI或者Quad SPI支持呢


https://github.com/armink/SFUD/b ... sfud_port.c#L55-L67

这个文件里有详细的说明,底层 SPI 是不需要 SFUD 关注的。

出0入198汤圆

 楼主| 发表于 2018-11-9 18:25:55 | 显示全部楼层
q457344370 发表于 2018-11-9 11:21
测试了两天,发现一个问题,如果在SPI Flash忙碌时MCU发生复位,重启后初始化是不响应查询SFUD信息命令的, ...

确实会有这个可能呀,SPI 的时序对不上,你有什么解决方法没?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 09:38

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表