目录
0. 协议文档
JEDEC JESD216A-2013 Serial Flash Discoverable Parameters (SFDP) - 道客巴巴
1.简介
对于串行FLASH来说,其生产厂商数量非常之多,但是对于一些FLASH本身的东西,各家厂商却是“各自为战”,没有一个完全统一的标准,发展期间有几家规模较大的起到了带头作用,但是还是没能做到完全统一。这对于FLASH的使用者来说并不友好,需要仔细研读FLASH使用手册,增加了开发的难度与周期,随着市场竞争的愈发激烈,各FLASH厂商都想提高自己产品的核心竞争力,此时,JEDEC联合几家规模较大的厂商制定了SFDP(Serial Flash Discoverable Parameter)标准,从此,FLASH的用户对于FLASH相关的开发可谓事半功倍,尤其是对驱动开发者而言,厂商之间的差异性不再是对FLASH驱动开发的限制。
2.SFDP发展史
SFDP又名JESD216,从2011年开始至今已有近十年的发展史,迭代了6个版本之多,以下是SFDP的修订历史:
时间 标准
2011 JESD216
2013.7 JESD216A
2014.5 JESD216B
2018.8 JESD216C
2018.11 JESD216D
2019.8 JESD216D.01
3.JESD216 (SFDP)的功能和结构
SFDP是JEDEC发布的JESD216的一个新标准,目前的版本号是V1.0。简而言之,SFDP(Serial Flash Discoverable Parameters)就相当于一张存储了FLASH部分属性的表,此表是不占用FLASH本身的存储空间的。SFDP中的信息自出厂就被固定,只供读取,开发人员可通过发送操作指令0x5A来读取当前FLASH的SFDP相关内容,这有利于开发人员了解FLASH之间的差异,提高开发效率,缩短整个开发周期。
在SFDP结构方面,SFDP标准强制规范必须要有SFDP标题、1st参数标题档和对应的FLASH基本参数表格(如下图所示)。
假设我们此前并不知晓当前的FLASH是否支持SFDP,可使用0x5a指令尝试获取FLASH的签名信息(也就是上图中的SFDP标题档),正常情况下,读取到的签名内容应该是0x50444653(也就是’S’ ‘F’ ‘D’ 'P’的ASCII值)。当然了,能读到签名,也并不意味着你所使用的FLASH就完全支持SFDP,你可以继续尝试解析后面表格里的内容,你可能会从你使用的FLASH中,得到意想不到的结果-。从FLASH中读到了签名之后,你就可以对你所使用的FLASH的SFDP的相关内容一探究竟了,什么扇区大小,设备容量,操作指令…都可以随意获取。
4.参数解析示例
请看上图,表格里面详细显示了每个字节,每个比特,分别都代表的是什么内容,我在这里简单选几个做个简要说明。请看“SFDP Header”栏,第一行的SFDP就不用说了,我们看第二行的[7h:4h],由低位到高位分别代表的是:次版本号,主版本号,参数个数(简而言之就是这个参数限定了在解析的过程中,下面会出现几个像1st Parameter这样的表),最后是访问协议。在这需要特别提及的就是,在读手册的时候一定要细致,有一些版本向后兼容的内容需要注意一下,有一些内容也是相当繁琐的,需要悉心研读。
5.其他
并不是说所有的FLASH都遵循该标准,可以这么讲,在2011之后或者说由一些新兴厂商设计生产的版本,几乎都是支持SFDP的。举个例子来说,用过的应该都知道,华邦作为一个老牌的串行FLASH厂商,在他们的产品里面必然就会出现新老版本共存的问题,显然,新版本支持,老版本就可能不支持。华邦 NOR Flash 家族里 W25QxxJV 和 W25QxxJW 系列都是新型号,全部支持 SFDP;而 W25QxxFV 和 W25QxxFW 系列属于老型号,大多没有 SFDP,但是也有如下部分型号支持 SFDP: