大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是导致串行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家族里 W25QxxJVW25QxxJW 系列都是新型号,全部支持SFDP;而 W25QxxFVW25QxxFW 系列属于老型号,大多没有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支持:

  1. J-Link下载算法源工程,可以参考 /boards/msft_rt600_xproject/flash_algo_b0_silicon/Keil_JLink 这个源工程
  2. MCUBootUtility v2.3更新,参看文章 《MCUBootUtility v2.3发布,这次不再放过任何一款Flash》 第2.3节

  至此,导致串行NOR Flash在i.MXRT下无法正常下载/启动的常见因素之SFDP痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

文章会同时发布到我的 博客园主页CSDN主页知乎主页微信公众号 平台上。

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:导致串行NOR Flash在i.MXRT下无法正常下载/启动的常见因素之SFDP的更多相关文章

  1. 痞子衡嵌入式:串行NAND Flash的两大特性导致其在i.MXRT FlexSPI下无法XiP

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是串行NAND Flash的两大特性导致其在i.MXRT FlexSPI下无法XiP. 在嵌入式世界里,当我们提起XiP设备(支持代码原地 ...

  2. 痞子衡嵌入式:串行NOR Flash的Continuous read模式下软复位后i.MXRT无法启动问题解决方案之RESET#

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT上使能NOR Flash的Continuous read模式在软复位后无法正常启动问题的解决经验. 前一篇文章 <在i ...

  3. 痞子衡嵌入式:串行NOR Flash的DQS信号功能简介

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是串行NOR Flash的DQS信号功能. 串行NOR Flash在嵌入式里的应用相当广泛,既可用作数据存储也可以用作代码(XiP)存储, ...

  4. 痞子衡嵌入式:串行NOR Flash的页编程模式对于量产时间的影响

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是串行NOR Flash的页编程模式对于量产时间的影响. 任何嵌入式产品最终都绕不开量产效率话题,尤其是对于主控是非内置 Flash 型 ...

  5. 痞子衡嵌入式:RT-MFB - 一种灵活的i.MXRT下多串行NOR Flash型号选择的量产方案

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是一种灵活的i.MXRT下多串行NOR Flash型号选择的量产方案. 对于以 i.MXRT 这类没有内部 NVM (Non-Volati ...

  6. 痞子衡嵌入式:串行EEPROM接口事实标准及SPI EEPROM简介

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是EEPROM接口标准及SPI EEPROM. 痞子衡之前写过一篇文章 <SLC Parallel NOR简介>,介绍过并行N ...

  7. 痞子衡嵌入式:16MB以上NOR Flash使用不当可能会造成软复位后i.MXRT无法正常启动

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT上使用16MB以上NOR Flash软复位无法正常启动问题的分析解决经验. 痞子衡这几天在支持一个i.MXRT1050客户项 ...

  8. 痞子衡嵌入式:借助Serial Plot软件测量i.MXRT系列FlexSPI驱动Flash页编程执行时间

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT系列FlexSPI驱动Flash页编程执行时间. 痞子衡之前写过一篇文章 <串行NOR Flash的页编程模式对于量产 ...

  9. 痞子衡嵌入式:RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天给大家带来的是痞子衡的开源项目 RT-UFL. 痞子衡在近两年多的i.MXRT客户项目支持过程中,遇到的一个相当高频的问题就是制作i.MXRT下载算法.我们 ...

随机推荐

  1. XSSFWorkbook

    支持2007以后的 此类与HSSFWorkbook(支持2007之前) 类似,读取文件时把全部的内容都存放到内存中,关闭输入流后. 内存与硬盘完全是毫无关系的两份数据,所有的操作都是对内存的操作,最后 ...

  2. RNN神经网络产生梯度消失和梯度爆炸的原因及解决方案

    1.RNN模型结构 循环神经网络RNN(Recurrent Neural Network)会记忆之前的信息,并利用之前的信息影响后面结点的输出.也就是说,循环神经网络的隐藏层之间的结点是有连接的,隐藏 ...

  3. JS中的数组复制问题

    JS中的数组复制问题 前言 首先提到复制,也就是拷贝问题,就必须要明确浅拷贝和深拷贝. 浅拷贝:B由A复制而来,改变B的内容,A也改变 深拷贝:B由A复制而来,改变B的内容,A的内容不会改变 总的来说 ...

  4. win7(64位)使用DEBUG

    win7 64位好像是不能直接打开DOS进行DEUBG的,于是查找相应解决方案 开始看其他人的帖子,写得语焉不详,后来一查,居然是抄百度的.....自己不觉得low吗... 参考百度经验的回答http ...

  5. 【av68676164(p25-p30)】同步和P-V操作

    4.5 同步和P-V操作 4.5.1 同步和互斥的概念 进程的互斥关系 例子 进程的互斥关系 多个进程由于共享了独占性资源,必须协调个进程对资源的存取顺序:确保没有两个或以上的进程同时进行存取操作. ...

  6. 微信公众号如何将PDF上传到公众号?

    微信公众号如何将PDF上? 我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件. 以下是公众号添加 ...

  7. 在Linux系统中安装Tomcat详细教程

    首先在官网下载jdk和Tomcat的压缩包 这里下载jdk-8u241-linux-x64 .tar.gz 和apache-tomcat-8.5.50.tar.gz 然后解压jdk压缩包 tar –z ...

  8. dom4j基本操作

    DOM4J与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml. ...

  9. MySQL数据库——查询数据

    增加数据: insert into "表名" values( '字段'',字段'); 或insert into '表名'( '字段'',字段')  values( '字段'',字段 ...

  10. Win10系统Jmeter+maven+Jenkins接口自动化环境搭建(一)

    Jmeter+maven+Jenkins实现接口自动化,需要使用idea或eclipse配置maven项目,这里我使用的是idea.具体步骤如下: 1.安装jmeter+jdk jmeter安装之前需 ...