【重要】为什么串行NAND Flash不支持XiP?

news2024/12/23 15:25:28

并行/串行NOR Flash都支持XIP,但是串行NAND Flash不支持。

今天给大家介绍的是串行NAND Flash的两大特性导致其在i.MXRT FlexSPI下无法XiP。


在嵌入式世界里,当我们提起XiP设备(支持代码原地执行的存储器),首先想到的应该是NOR Flash。比如中低端MCU内部通常会集成小容量并行NOR Flash(一般2MB以内),用于存放应用程序;而高性能MCU,往往内部不会集成Flash,需要在板级设计时外挂一片稍大容量的NOR Flash(大部分是串行NOR,一般8MB以上)。


恩智浦i.MXRT系列属于高性能MCU,需要外挂Flash。i.MXRT本身可以支持串/并行NOR、串/并行NAND四类设备作为启动设备,但在官方参考设计板EVK上,推荐的都是串行NOR Flash型号。官方没有推荐并行NOR/NAND,这是可以理解的,毕竟相比串行接口Flash,引脚占用略多,这对I/O资源紧张的MCU项目来说不太讨喜。那官方为何不推荐串行NAND作为启动设备呢?这主要是串行NAND在i.MXRT下无法XiP,这对项目软件设计来说有一些限制。NAND无法XiP的原因有两点,既跟NAND自身特性有关,也跟FlexSPI外设特性有关,且听痞子衡细说:


一、FlexSPI对于NAND的支持
我们知道在i.MXRT中是FlexSPI外设负责实现串行NOR/NAND Flash设备的读写访问支持,痞子衡写过一篇文章 《从头开始认识i.MXRT启动头FDCB里的lookupTable》,文章详述了FlexSPI是如何通过lookupTable来支持串行NOR Flash设备XiP启动的(这里主要是读访问支持)。


在lookupTable设计里,其实AHB读访问并不是NOR Flash设备的专利,或者这么说,FlexSPI外设本身并不在乎连接得是什么类型的设备,它就是完全根据用户在lookupTable里填入的命令时序按部就班工作而已。


对于四线QSPI NOR,仅需要在lookupTable里填入一条命令时序(Read有很多种,但都能在一条Sequence里实现)就可以支持AHB读。而HyperFlash、HyperRAM和串行NAND等设备,lookupTable里一条命令时序搞不定完整读操作,需要多条命令时序组合完成。


FlexSPI外设支持在lookupTable中联合多条命令时序去实现AHB读,通过FlexSPI->FLSHxxCR2寄存器里的如下两处功能位来实现。ARDSEQID位指明读访问时序在lookupTable中的起始位置(index),ARDSEQNUM位指明读访问时序共占用几条命令时序(这也意味着几条命令时序要按序放在一起)。

比如Micron MT29FxG01串行NAND系列,就需要如下三条命令时序(Page Read + Get Feature + Random Data Read)组合完成读操作。但是理想很丰满,现实却骨感,即使组合这三条命令时序也无法在FlexSPI下实现NAND的XiP。


实际应用时,对于NAND的读访问,都是在程序代码中先通过IPCMD方式手动发送Page Read和Get Feature命令,然后借助lookupTable中的Random Data Read命令实现仅一个Page空间大小的AHB读,做不到全部NAND空间的自动AHB读(当然如果你觉得一个Page空间的AHB读太鸡肋,完全可以直接用IPCMD方式去读Page数据)。


Note: 关于NAND仅一个Page空间的AHB读支持再作下详细解释。比如NAND的Page大小为2KB,那么系统里仅需给NAND分配0x60000000 - 0x600007FF的AHB映射空间,每次对这个空间进行AHB读之前,都需要先通过IPCMD发送Page Read和Get Feature,确保NAND处于Page数据输出的Ready状态,底下FlexSPI就可以完成这个Page内的任意AHB读访问支持。而一旦切到新Page访问,需要重复上述过程,因此NAND所有Page的访问都可以在这个2KB的映射空间里完成的。

二、串行NAND阻碍XiP的两大特性
到底串行NAND的什么特性阻碍了XiP,现在痞子衡来揭秘,在揭秘前大家先看一下痞子衡的旧文 《Raw NAND简介》,先对NAND型Flash有个初步了解。下面痞子衡以Micron MT29FxG01型号串行NAND为例介绍其阻碍XiP的两大特性:


2.1 坏块导致的非线性存储
凡是NAND型Flash都绕不开坏块(Bad Block)问题,这也是NAND Flash区别于NOR Flash的一个重要特点。NAND技术上允许坏块的存在,这降低了NAND生产工艺要求,因此NAND单位容量价格比NOR低。


NAND内部按粒度从大到小划分依次为Plane、Block、Page、Byte(如下图所示),因为坏块导致了一些Block无法有效存储数据,这些Block会被标记拉黑,所以从主设备访问角度来看,NAND中的数据并不是按地址连续存储的,坏块占据的地址均为无效地址,这就是所谓的非线性存储,而非线性存储设备显然无法作为XiP设备。


非线性存储器,对于写入操作,无法保证应用程序一定放在指定链接的地址(即在Flash中的对应偏移地址),写入过程中遇到坏块,会跳过坏块,而那些坏块占据的无效地址极有可能就是应用程序实际链接地址。

2.2 ECC校验导致的Page Read等待
我们现在假设一种理想情况,NAND中不存在任何坏块,可以强行把NAND当作线性存储设备,这种情况下是不是就可以被用作XiP设备了呢?很遗憾,FlexSPI外设还是不能正面支持(有替代方法来支持)。


我们来看串行NAND的完整读时序,0x13(Page Read)是FlexSPI发送的第一个命令,用于通知NAND主设备想要访问Page了,随后发送列地址,指明要读的Page位置,此时NAND便会将内部状态寄存器里Busy位标志起来并进入忙状态。


在忙状态时间里,NAND会从内存块里将指定的Page数据全部拷贝到临时缓存区(Cache memory),对这一整个Page数据进行ECC校验,校验完成后将状态寄存器里相应ECC标志起来以及将Busy位清除掉,然后结束忙状态,进入数据输出准备状态。


由于不知道NAND什么时候会结束忙状态,因此FlexSPI需要不断发送0x0F(Get Feature命令)去读取状态寄存器的值,直到状态寄存器里Busy位被清零才能去读取Page数据,这种逻辑判断行为在lookupTable里无法自动实现(NOR读时序里无需逻辑判断)。

如果特意省略读状态寄存器的步骤,避免逻辑判断行为,在lookupTable直接填入Dummy周期来代替行不行呢?理论上倒是可以的。我们来算一下,比如NAND典型的50MHz时钟频率,一个Dummy Cycle周期耗时20ns,NAND Page Read等待典型值是45us,即2250个Dummy Cycle,lookupTable有16条Sequence,每个Seqence支持8个instruction,每个instruction如果都设为DUMMY_SDR,参数设最大255,则9个instruction就能满足这个等待时间。

但即使这么做能勉强实现NAND Flash的XiP,代码实际执行效率也是非常低下的,毕竟涉及到跨Page的指令长跳转(暂不讨论Cache因素)就需要等待45us,这在嵌入式世界里是不短的时间,系统实时性无法保证,又有什么意义呢?
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/954382.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从传统到智能化:汽车内部通信的安全挑战与SecOC解决方案

01/需求背景 Demand background 在传统的汽车电子结构中,车内的电控单元(ECU)数量和复杂性受到限制,通信带宽也受到限制。因此,人们普遍认为车内各个ECU之间的通信是可靠的。只要ECU节点接收到相应的消息&#xff0c…

SQL高阶语句

1、概念 1.1、概述 在MySQL中,高阶语句是指一些复杂、高级的查询语句或操作,用于满足更特定和复杂的数据需求。这些高阶语句通常涉及更多的SQL功能和技巧,以扩展MySQL的功能和性能。 在MySQL中,它们扩展了基本的SELECT、INSERT、…

[ROS]虚拟机ubuntu18.04系统里面运行usb_cam

首先安装usb_cam sudo apt-get install ros-melodic-usb-cam 运行: roscore roslaunch usb_cam usb_cam-test.launch 如果一运行报错,首先确认是否存在/dev/video0 可以使用ls /dev/video*查看,如果没有就是没有连接摄像头,…

ChatGPT总结(持续更新)

目录 体验渠道 weTab CSDN-AI助手 其他插件 ChatGPT简介 ChatGPT主要用途 ChatGPT发展历程 GPT-4架构的特点和优势 ChatGPT的工作原理 神经网络和自然语言处理技术 Transformer模型 模型训练优化技巧 ChatGPT对程序员的帮助 与ChatGPT交互和提问技巧 ChatGPT未来…

中国移动携手移远通信等合作伙伴发布 RedCap“1+5+5”创新示范之城

日前,《关于推进5G轻量化(RedCap)技术演进和应用创新发展的通知(征求意见稿)》正式公布,将进一步推进5G RedCap 技术演进、产品研发及产业化,大力推动5G应用规模化发展。 为加快推动RedCap规模…

TSMaster小功能分享—Python小程序如何导入外部库

今天给大家介绍TSMaster功能之Python小程序如何导入外部库。通过在 TSMaster 默认的解析器路径下导入外部库来介绍,以便我们去使用 Python 外部库。TSMaster 默认 Python 解析器下安装外部库。 步骤一 在 TSMaster 工具->系统信息->python 环境设置中选择打开…

Windows安装Nginx及部署vue前端项目操作

先在nginx官网下载windows下安装的包,并解压,到ngnix目录下 双击nginx.exe,会有黑窗闪过。 用cmd命令窗口,cd 到nginx解压目录,./nginx启动。 在浏览器中访问http://localhost:80,出现以下界面说明启动成功(由于笔者电脑80端口被…

windows生成ios证书的方法

使用hbuilderx的uniapp框架开发ios应用,在测试阶段和发布阶段,需要ios证书进行打包,云打包的界面提供了生成ios证书的教程,但是教程令人很失望,它只能使用mac电脑来生成ios证书。假如没有mac电脑,就无法安照…

RK3562 VS RK3566 性能解析

RK3562是深圳触觉智能最新推出的一款高性能核心板及其开发套件,采用四核A53Mali G52架构,主频2GHz,内置1T NPU算力以及13M ISP,拥有丰富的外围接口。其次在解码方面,支持H.264 1080P60fps、H.265 4K30fps;编…

解决css样式中last-child不生效的问题

需求 项目中需要使用v-for指令来渲染一个图片列表, 现状 发现,最后一个格子并没有跟下面绿色线对齐。 最后发现 是因为 每个格子都给了 margin-right:36px,影响到了最后一个格子 所以使用last-child 将最后一个格子的margin 属性…

Java版企业电子招标采购系统源码—企业战略布局下的采购寻源

统一供应商门户 便捷动态、呈现丰富 供应商门户具备内外协同的能力,为外部供应商集中推送展示与其相关的所有采购业务信息(历史合作、考察整改,绩效评价等),支持供应商信息的自助维护,实时风险自动提示。…

Python学习 -- 异常分类

在编写Python代码时,异常处理是至关重要的一部分,它能够帮助我们更好地应对意外情况,提高程序的健壮性。本文将详细介绍Python中常见的异常类型,包括AttributeError、FileNotFoundError、IndexError、KeyError、NameError、TypeEr…

K8S - 架构、常用K8S命令、yaml资源清单部署、Ingress、故障排查、存储卷

K8S K8S官网文档:https://kubernetes.io/zh/docs/home/学习东西还是要从官方文档入手;用于管理、扩展、自动部署容器; 其实就是 对多个跨机器的Docker集群; K8S特性 服务发现和负载均衡 Kubernetes 可以使用 DNS 名称或自己的 …

思路灰度传感器及红外传感器线序

四路红外传感器 黑线读取数据为0 白线读取数据为1 四路灰度传感器 黑线读取数据为1 白线读取数据为0

03-MySQL

1、什么是BufferPool? 1.1、Buffer Pool基本概念 Buffer Pool:缓冲池,简称BP。其作用是用来缓存表数据与索引数据,减少磁盘IO操作,提升效率。 Buffer Pool由缓存数据页(Page)和 对缓存数据页进行描述的控制块 组成,…

5个IT事件管理的最佳实践

什么是IT事件? IT事件是一个影响很大的紧急问题,通常会影响整个组织或其主要部分。重大事件几乎总是导致组织的服务变得不可用,这导致组织的业务受到打击,并最终影响其财务状况。以下是5个重大IT事件管理的最佳实践: …

信息化发展12

数字民生 数字民生建设重点通常强调: 1 ) 普惠: 充分开发利用信息技术体系, 扩大民生保障覆盖范围, 助力普惠型民生建设, 解决民生资源配置不均衡等问题。 2) 赋能: 信息技术体系与…

好用的备份还原软件推荐【2023】

Windows10内置备份功能怎么样? Windows 7集成了备份与还原功能,专门用以备份操作系统和用户文件。在Windows 10中,这一功能得以保留,并被称为“备份与还原(Windows 7)”。 如果您只打算在Windows 10中…

想知道期权买认购和卖认沽有何不同?赶快来看!

期权买认购和卖认沽这个都是做多的意思,看涨做多的意思,买认购是买方做多,无保证金,没有爆仓风险,涨跌幅无限制,卖认沽是卖方做多,需要保证金交易,会爆炸,收益是锁定的&a…

视频监控/视频云存储EasyCVR平台接入华为ivs3800平台提示400报错,如何解决?

开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,视频云存储/安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频…