痞子衡嵌入式:导致串行NOR Flash在i.MXRT下无法正常下载/启动的常见因素之SFDP
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是导致串行NOR Flash在i.MXRT下无法正常下载/启动的常见因素之SFDP。
i.MXRT系列MCU发布已两年多了,基于i.MXRT的客户产品也越来越多,可以说是全面开花了。痞子衡作为i.MXRT产品线的系统应用工程师,早期的时候还可以尽情做参考设计,现在基本大量时间都被客户支持占据了。
因为i.MXRT系列都没有内置Flash(RT1064, RT1024等SIP型号除外),因此为其搭配一块串行NOR Flash去启动是客户项目的第一个头等大事,而串行NOR Flash厂商非常多,客户选择余地很大,因此我们不得不与客户一起同茫茫Flash型号打交道,痞子衡也常常调侃自己已沦为Flash测试工程师。
痞子衡在支持客户解决串行NOR Flash下载启动问题过程中主要遇到几个常见因素,这几个因素可能会影响Flash在i.MXRT下无法正常使用,今天痞子衡就重点跟大家聊聊SFDP这个因素。
一、SFDP标准简介
SFDP又叫JESD216,是JEDEC协会于2011年开始推出的串行Flash接口标准,类似于CFI在并行NOR Flash上的标准。SFDP发展至今已经诞生了如下版本:
| 时间 | 标准 |
|---|---|
| 2011 | JESD216 |
| 2013.07 | JESD216A |
| 2014.05 | JESD216B |
| 2018.08 | JESD216C |
| 2018.11 | JESD216D |
| 2019.08 | JESD216D.01 |
我们知道串行Flash厂商非常多,在2011年之前,大家都是各自玩,没有明确的统一标准(虽然几个领头厂商起了示范作用,但各家在具体细节上还是会有差异),这对于Flash用户来说就比较麻烦了,需要把各家Flash手册仔细研读,不能漏掉任何一个细节。
随着串行Flash市场需求越来越强烈,各个厂商也在铆足劲给自家Flash加特性,这时候JEDEC站出来了,拉了几个主要的Flash厂商一起订个SFDP标准,有了这个标准,Flash用户就方便多了,尤其是软件设计人员,开发Flash驱动从此有标准可依,甚至一套驱动可以用在所有支持SFDP标准的Flash上,实现各厂商Flash之间轻松切换。
二、部分Flash型号不支持SFDP
因为SFDP标准是2011年才开始推出,新兴Flash厂商(比如兆易创新)的产品基本都是支持SFDP标准的,而部分老牌Flash厂商(比如华邦)则存在老型号和新型号共存的问题。老型号都是2011年前设计生产的,不支持SFDP;2011年之后设计的新型号基本都是支持SFDP的。
华邦目前是串行Flash第一大厂商,痞子衡遇到好几个i.MXRT客户,选用的华邦NOR Flash,但Flash里不支持SFDP,因此客户支持稍微复杂一些。关于SFDP支持问题,痞子衡特别联系过华邦销售人员,得到了他们的答复,华邦NOR Flash家族里 W25QxxJV 和 W25QxxJW 系列都是新型号,全部支持SFDP;而 W25QxxFV 和W25QxxFW 系列属于老型号,大多没有SFDP,但是也有如下部分型号支持SFDP:
虽然我们可以在后续开发的过程中也能正常使用非SFDP标准的Flash以及能通过读SFDP命令查询出芯片是否支持SFDP,但最好在Flash选型前就能明确知道其SFDP情况,这个需要跟Flash厂商销售沟通好。总之,痞子衡推荐大家选用各厂商支持SFDP标准的新型号。
三、不支持SFDP的Flash如何适用i.MXRT下载
如果你认真看过痞子衡写的i.MXRT启动系列文章,你应该知道i.MXRT之所以能够支持市面上几乎所有的串行NOR Flash启动是靠的512 byte的FDCB结构体,这个结构体原型即flexspi_nor_config_t,它可以描述启动所需的所有Flash参数信息。
i.MXRT在启动时首先会用1bit SDR时序模式去获取用户放在Flash开始或偏移0x400处(因i.MXRT型号而异)的FDCB,然后根据FDCB里的信息去进一步配置启动,因此Flash里有无SFDP其实不影响启动,只要在FDCB里描述清楚即可。
但是Flash里有无SFDP非常影响在i.MXRT相关配套工具下的擦写操作(俗称下载),因为所有工具(JLink、各IDE、ROM配套Flashloader、痞子衡的MCUBootUtility)默认都是基于SFDP来设计Flash下载算法的。
仅以ROM配套Flashloader为例,其上位机工具是blhost.exe,它有如下经典的命令序列。这个序列就是利用用户提供简化的串行Flash配置值0xc0000007(描述一般的四线QSPI)来初始化FlexSPI以及Flash,为后续擦写操作做准备。
blhost -u -- fill-memory 0x20202000 4 0xc0000007
blhost -u -- configure-memory 0x9 0x20202000
configure-memory命令底层到底是什么样的逻辑呢?让我们找到任何一个SDK包,在\SDK_2.x.x_MIMXRTxxxx-EVK\middleware\mcu-boot\src\memory\src\flexspi_nor_memory.c里可以找到如下函数flexspi_nor_mem_config(),它就是其底层逻辑,在这个函数里我们可以看到,Flashloader会判断传来的config值到底是简化的serial_nor_config_option_t,还是完整的flexspi_nor_config_t。
如果config是简化的serial_nor_config_option_t,Flashloader会调用flexspi_nor_get_config()函数去自动填充生成完整的flexspi_nor_config_t,你可以继续去看flexspi_nor_get_config()函数的实现,对于普通四线QSPI,其就是根据Flash里读回的SFDP表内容来做的填充,因此这种方式下SFDP不可缺。
status_t flexspi_nor_mem_config(uint32_t *config)
{
status_t status = kStatus_InvalidArgument;
bool isNorConfigOption = false;
serial_nor_config_option_t *option = (serial_nor_config_option_t *)config;
flexspi_nor_config_t *norConfig = (flexspi_nor_config_t *)config;
if (option->option0.B.tag == kSerialNorCfgOption_Tag)
{
status = flexspi_nor_get_config(s_flexspiNorContext.instance, &s_flexspiNorConfigBlock, option);
// ...
isNorConfigOption = true;
}
else if (norConfig->memConfig.tag == FLEXSPI_CFG_BLK_TAG)
{
memcpy(&s_flexspiNorConfigBlock, norConfig, sizeof(flexspi_nor_config_t));
isNorConfigOption = true;
}
// ...
if (isNorConfigOption)
{
status = flexspi_nor_flash_init(s_flexspiNorContext.instance, &s_flexspiNorConfigBlock);
// ...
}
return status;
}
上面这种0xc0000007搞定一切四线QSPI的方式仅适用于含SFDP的Flash,对于不含SFDP的Flash怎么办呢。其实上面已经给了解决方法,那就是直接提供完整的FDCB,因此i.MXRT相关配套工具下载算法都需要相应改一下,痞子衡在两个项目上都做了非SFDP Flash支持:
- J-Link下载算法源工程,可以参考 /boards/msft_rt600_xproject/flash_algo_b0_silicon/Keil_JLink 这个源工程
- MCUBootUtility v2.3更新,参看文章 《MCUBootUtility v2.3发布,这次不再放过任何一款Flash》 第2.3节
至此,导致串行NOR Flash在i.MXRT下无法正常下载/启动的常见因素之SFDP痞子衡便介绍完毕了,掌声在哪里~~~
欢迎订阅
文章会同时发布到我的 博客园主页、CSDN主页、知乎主页、微信公众号 平台上。
微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:导致串行NOR Flash在i.MXRT下无法正常下载/启动的常见因素之SFDP的更多相关文章
- 痞子衡嵌入式:串行NAND Flash的两大特性导致其在i.MXRT FlexSPI下无法XiP
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是串行NAND Flash的两大特性导致其在i.MXRT FlexSPI下无法XiP. 在嵌入式世界里,当我们提起XiP设备(支持代码原地 ...
- 痞子衡嵌入式:串行NOR Flash的Continuous read模式下软复位后i.MXRT无法启动问题解决方案之RESET#
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT上使能NOR Flash的Continuous read模式在软复位后无法正常启动问题的解决经验. 前一篇文章 <在i ...
- 痞子衡嵌入式:串行NOR Flash的DQS信号功能简介
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是串行NOR Flash的DQS信号功能. 串行NOR Flash在嵌入式里的应用相当广泛,既可用作数据存储也可以用作代码(XiP)存储, ...
- 痞子衡嵌入式:串行NOR Flash的页编程模式对于量产时间的影响
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是串行NOR Flash的页编程模式对于量产时间的影响. 任何嵌入式产品最终都绕不开量产效率话题,尤其是对于主控是非内置 Flash 型 ...
- 痞子衡嵌入式:RT-MFB - 一种灵活的i.MXRT下多串行NOR Flash型号选择的量产方案
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是一种灵活的i.MXRT下多串行NOR Flash型号选择的量产方案. 对于以 i.MXRT 这类没有内部 NVM (Non-Volati ...
- 痞子衡嵌入式:串行EEPROM接口事实标准及SPI EEPROM简介
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是EEPROM接口标准及SPI EEPROM. 痞子衡之前写过一篇文章 <SLC Parallel NOR简介>,介绍过并行N ...
- 痞子衡嵌入式:16MB以上NOR Flash使用不当可能会造成软复位后i.MXRT无法正常启动
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT上使用16MB以上NOR Flash软复位无法正常启动问题的分析解决经验. 痞子衡这几天在支持一个i.MXRT1050客户项 ...
- 痞子衡嵌入式:借助Serial Plot软件测量i.MXRT系列FlexSPI驱动Flash页编程执行时间
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT系列FlexSPI驱动Flash页编程执行时间. 痞子衡之前写过一篇文章 <串行NOR Flash的页编程模式对于量产 ...
- 痞子衡嵌入式:RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计
大家好,我是痞子衡,是正经搞技术的痞子.今天给大家带来的是痞子衡的开源项目 RT-UFL. 痞子衡在近两年多的i.MXRT客户项目支持过程中,遇到的一个相当高频的问题就是制作i.MXRT下载算法.我们 ...
随机推荐
- XSSFWorkbook
支持2007以后的 此类与HSSFWorkbook(支持2007之前) 类似,读取文件时把全部的内容都存放到内存中,关闭输入流后. 内存与硬盘完全是毫无关系的两份数据,所有的操作都是对内存的操作,最后 ...
- RNN神经网络产生梯度消失和梯度爆炸的原因及解决方案
1.RNN模型结构 循环神经网络RNN(Recurrent Neural Network)会记忆之前的信息,并利用之前的信息影响后面结点的输出.也就是说,循环神经网络的隐藏层之间的结点是有连接的,隐藏 ...
- JS中的数组复制问题
JS中的数组复制问题 前言 首先提到复制,也就是拷贝问题,就必须要明确浅拷贝和深拷贝. 浅拷贝:B由A复制而来,改变B的内容,A也改变 深拷贝:B由A复制而来,改变B的内容,A的内容不会改变 总的来说 ...
- win7(64位)使用DEBUG
win7 64位好像是不能直接打开DOS进行DEUBG的,于是查找相应解决方案 开始看其他人的帖子,写得语焉不详,后来一查,居然是抄百度的.....自己不觉得low吗... 参考百度经验的回答http ...
- 【av68676164(p25-p30)】同步和P-V操作
4.5 同步和P-V操作 4.5.1 同步和互斥的概念 进程的互斥关系 例子 进程的互斥关系 多个进程由于共享了独占性资源,必须协调个进程对资源的存取顺序:确保没有两个或以上的进程同时进行存取操作. ...
- 微信公众号如何将PDF上传到公众号?
微信公众号如何将PDF上? 我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件. 以下是公众号添加 ...
- 在Linux系统中安装Tomcat详细教程
首先在官网下载jdk和Tomcat的压缩包 这里下载jdk-8u241-linux-x64 .tar.gz 和apache-tomcat-8.5.50.tar.gz 然后解压jdk压缩包 tar –z ...
- dom4j基本操作
DOM4J与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml. ...
- MySQL数据库——查询数据
增加数据: insert into "表名" values( '字段'',字段'); 或insert into '表名'( '字段'',字段') values( '字段'',字段 ...
- Win10系统Jmeter+maven+Jenkins接口自动化环境搭建(一)
Jmeter+maven+Jenkins实现接口自动化,需要使用idea或eclipse配置maven项目,这里我使用的是idea.具体步骤如下: 1.安装jmeter+jdk jmeter安装之前需 ...