三款MCU的FlexSPI NOR启动的连接方式
0 2023-03-16

作者:痞子衡嵌入式

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1015/1020/1050三款MCU的FlexSPI NOR启动的连接方式。

由于i.MXRT内部没有非易失性存储器,因此在系统设计时为i.MXRT搭配一块存放应用程序代码的存储器是头等大事。i.MXRT支持启动的外部存储器类型众多,其中通过FlexSPI接口连接串行NOR Flash是首选。

就i.MXRT芯片引脚本身来说,其FlexSPI模块支持的Pinmux选择较多,这在芯片参考手册Chip IO一章可以找到具体信息。但是并不是所有FlexSPI Pinmux组合都能被用来连接串行NOR Flash去启动。

i.MXRT1050/1020/1015是i.MXRT系列MCU家族比较早亮相的型号,也是客户当前使用较多的i.MXRT芯片。它们三兄弟内部均只有一个双通道8bit的FlexSPI模块,在FlexSPI NOR启动连接方式支持上是相似的。今天痞子衡就来跟大家好好聊一聊到底哪些FlexSPI NOR连接方式是可以用作启动的。

一、涉及FlexSPI引脚

提及启动,就不得不提i.MXRT芯片内部BootROM,BootROM是固化在芯片内部ROM空间的一段代码,芯片上电永远是BootROM先运行,由BootROM从外部存储器去加载应用程序执行。因此FlexSPI NOR连接方式其实是由BootROM决定的,更直白点说,其实FlexSPI NOR连接方式是写死在BootROM代码里。

1.1 BootROM指定

我们可以在芯片参考手册System Boot这一章节找到BootROM指定的FlexSPI NOR引脚,痞子衡整理如下:

下表适用于i.MXRT105x(适用全系列封装):


下表适用于i.MXRT102x和i.MXRT1015(对于LQFP144封装,所有引脚均适用。对于LQFP100封装,只有1st Option里ALT为1的12根线可用):


上面的表格基本上已经给我们指明了方向,目前我们知道了哪些Pin可以用作FlexSPI NOR启动连接,但是似乎还是有一些不清楚的地方:

疑问1:1st Option里一共有4根片选信号(SSx)和2根DQS信号,而Flash只需要一个片选和一个DQS,是不是所有片选 DQS组合都可以?

疑问2:1st Option里一共8根数据线,除了连接八线Octal/Hyper Flash之外,是否可以单连四线QSPI Flash?PortA和PortB是不是都可以连QSPI Flash?

疑问3:是否可以从1st和2nd Option里分别挑选信号线和数据线来连接Flash?比如1st Option里的PortA_DATA[1:0]和2nd Option里的PORTA_DATA[3:2]组成四线。

疑问4:那根FlexSPI Reset信号对于1st和2nd Option是不是都适用?

疑问5:是否可以挂两片QSPI Flash启动?具体怎么挂?两片Flash能否实现在一片Flash中执行代码去擦写另一片Flash?

疑问6:2nd Option里只有PortA和一根片选,但RT1050 Pinmux表里其也支持PortB和其他片选,那些信号线后续是否可以利用?

在后面的内容里,痞子衡会逐一为大家解析这些疑问。

1.2 BootROM未指定

在此也列出不在BootROM指定的FlelxSPI NOR引脚,方便后续设计双Flash时参考。

下表适用于i.MXRT105x(适用全系列封装):


下表适用于i.MXRT102x和i.MXRT1015(适用全系列封装):


二、单Flash连接方式(3种)

在系统设计时使用一片Flash是最常用的情况,这片Flash负责存放应用程序代码(即所谓的Code Flash),i.MXRT既可以在Flash中原地执行,也可以将应用程序拷贝到内部RAM中执行。

相信大家做板级设计一定会参考官方EVK,在RT1050-EVKB中,官方给出了如下两种单Flash的连接方式,这也是最推荐的两种方式:

第一种Flash连接方式就是利用FlexSPI 1st Option里的6根PORTA信号线连接四线QSPI Flash,此处需要注意的是片选信号仅能选PORTA_SS0,你可能会疑问PORTA_SS1明明也在BootROM支持列表里,为何不能用?关于这一点痞子衡会在后面双Flash连接里为大家解释。


第二种Flash连接方式就是利用FlexSPI 1st Option里的7根PORTA信号线和5根PORTB信号线连接八线Octal/Hyper Flash,此处仍需注意的是片选和DQS信号仅能选PORTA_SS0、PORTA_DQS。此种Flash接法还利用了FlexSPI Reset信号。


第三种Flash连接方式就是利用FlexSPI 2nd Option里的6根PORTA信号线连接四线QSPI Flash,具体接法跟第一种方式很像,但是此处没有关于片选的疑虑,因为2nd Option只有一个片选。


介绍完三种单Flash连接方案,现在来解答一些前面列出的疑问。

解答1:1st Option里一共4根片选信号(SSx)和2根DQS信号并不是随意组合都可以,无论是四线还是八线单Flash连接方案,均只有PORTA_SS0、PORTA_DQS这一种组合可用。其他组合主要用在双Flash连接方案中。

解答2:1st Option中仅PORTA可以单独接四线QSPI Flash,不支持PORTB单独接四线QSPI Flash。

解答3:不支持从1st和2nd Option里分别挑选数据线来连接Flash(不过就FlexSPI模块本身而言,理论上是支持的,但这么用的话需要解决数据线信号等长问题,因为这两个Option的走线长度在芯片内部不一样,总之不推荐这么用)。但是支持1st Option里取信号线,2nd Option里取数据线类似这种组合方式来连接Flash。

解答4:FlexSPI Reset信号是与1st、2nd Option无关的,所以两个Option下均可以用,不过Reset信号常用于八线Flash。

三、双Flash连接方式(18种)

很多实际系统设计中,常常有既在Flash中存放用户应用程序,也在Flash中存放用户数据的场景,当然我们可以将一片Flash分成Code区和Data区来实现,但更好的方案是选用两片Flash(一片Code Flash、一片Data Flash)同时挂在FlexSPI上,这样可以避免数据误操作,而且最重要的是在擦除或者编程Data Flash的等待期间(这个时间可不短),CPU可以继续从Code Flash取代码执行或响应中断。此处我们暂不讨论支持RWW特性的Flash。

i.MXRT支持挂两片Flash去启动,此处仅以两片四线QSPI Flash为例。下图给出了多片Flash的连接方式,理论上一个FlexSPI最多可以挂四片Flash,因为最大有4个片选。但仅考虑接两片Flash的话,1st Option以及2nd Option里所有片选按排列组合来说应该有近30多种组合方式,那么这30多种组合是不是都可行呢?当然不是!要在这些组合中剔除掉不包含1st A_SS0或者2nd A_SS0的组合。即下图中标浅绿色的Flash A0在双Flash组合中是一定要存在的,因为BootROM上电永远是从Flash A0中获取FDCB以及启动代码头(IVT, BootData),所以Flash A0就是Code Flash。


分析到了这里,我们就知道如下符合条件的18种包含Flash A0的组合方式,其中标记Code的片选信号应该连接存放应用程序代码的Code Flash,标记Data的片选信号则连接存放用户数据的Data Flash:

Note1:如果两个Flash挂在同一类型PORT上(都是PORTA或都是PORTB),即下面的第1、2、3、10、11、12种组合时,这两片Flash最好是同一个型号,这样电气特性容易保持一致。

Note2:如果组合中所有引脚选择全部在BootROM指定范围里,那么BootROM直接支持Data Flash的配置。如果有引脚不在BootROM指定范围,那么需要用户在Code Flash用代码去实现Data Flash配置。


介绍完18种双Flash连接方案,现在来解答一些前面列出的疑问。

解答5:可以挂两片QSPI Flash启动,一共有18种连接方式。两片Flash的方案还是不可以实现在Code Flash里原地执行代码去擦写Data Flash这种用法,但可以实现RWW的核心意义,下一节会单独展开讲这个。

解答6:不在BootROM指定的2nd Option PortB信号可以用于连接Data Flash,但是Data Flash的配置需要由Code Flash里的用户应用程序代码来完成,BootROM无法直接配置Data Flash。

四、关于RWW的注意事项

现在市面上大部分Flash(尤其是普通四线QSPI)是不支持RWW(Read-While-Write)特性的,就是在单片Flash上无法实现同时读写。但如果我们在i.MXRT1015/1020/1050系统设计中采用一片支持RWW特性的Flash或者直接使用两片Flash,是否可以实现在Code Flash(或RWW Flash中的Code分区)中原地执行代码去擦写Data Flash(或RWW Flash中的Data分区)这种需求。答案其实还是不可以,这是由FlexSPI模块本身特性限制的,这个特性就是同一个FlexSPI模块下的AHB command和IP command是互斥的。

4.1 FlexSPI异类命令互斥特性

下图是FlexSPI模块框图,可以这么简单理解,CPU去Code Flash取程序代码指令走的是64bit AHB Bus(即AHB command),Code Flash里的程序代码里调用FlexSPI驱动去擦除或编程Data Flash走的是32bit IPS Bus(即IP command),这两种不同类型的command会经过ARB_CTL模块去仲裁,同一时间只有一种command胜出成为ARB command去实际操作Flash。


那FlexSPI模块这个限制到底怎么破?有以下四种方式可以来帮忙:

方法1:在MPU里设置Code Flash对应的映射地址区域,使能Cache,并且保证应用程序代码里调用FlexSPI驱动去擦写Data Flash的关键部分(触发IP CMD执行)始终缓存在Cache里。

方法2:将应用程序代码里调用FlexSPI驱动去擦写Data Flash的关键部分搬运到RAM空间去运行,可以直接借助IDE特性去完成(比如IAR,可以用__ramfunc去修饰关键函数)。

方法3:在写Data Flash的时候借助DMA来搬运数据,不让CPU干预,具体可以参考官方《AN12564 Implement RWW on i.MX RT Series》

方法4:应用程序代码里的FlexSPI驱动直接使用BootROM API(代码是在ROM空间运行的)。

这四种方法里首推方法4,既能实现需求,又能省Code Flash空间(FlexSPI驱动代码说小不小)。方法1其实是不推荐的,毕竟Cache是种玄学,岂是你想控制就控制的。

4.2 RWW的核心意义

最后再说一下,挂两片Flash(或一片RWW Flash)到底相比挂一片非RWW Flash有什么好处?这就涉及到RWW的核心意义了,其实痞子衡前面已经讲过了,虽然不能实现在Code Flash中原地执行擦写操作相关代码,但是在Data Flash擦写等待期间,CPU可以继续从Code Flash取代码执行,这意味着此时不需要刻意关闭系统全局中断,因此不影响系统响应的实时性。 

声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • 工业
  • 安防
  • 航空
  • CAN
  • 详解SerDes的原理

    01SerDes简介首先我们要了解什么是SerDes,SerDes的应用场景又是什么呢?SerDes又有哪些

    8小时前
  • Linux文件系统深度剖析,还不会算我输!

    Linux 文件系统体系结构是一个对复杂系统进行抽象化的有趣例子。通过使用一组通用的 API 函数,Linu

    8小时前
  • 弱电工程常用网络知识?

    我们现在做的弱电工程,经常用到网络知识,比如vlan、三层交换机、网关、DNS、子网掩码、MAC地址等方面的知识,作为从业人员,我们对这些知识了解并熟知的. 一、什么是VLAN VLAN中文是“虚拟局域网”。LAN可以是由少数几台家用计算机构成的网络,也可以是数以

    昨天
  • 继电器电路原理

    是时候关注我们一波了继电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通

    昨天
  • 发电机工作原理与作用-常见故障及解决办法

    汽车上蓄电池的电能有限,在它放电以后必须及时进行补充充电,因此汽车上还必须装备充电系统。充电系统由发电机、调节器和充电状态指示装置组成。

    前天
  • 详解LIN总线技术

    LIN是CAN和SAE J1850协议的补充性协议,针对时间要求不高或不需要精确容错的应用。

    06-06
  • 电机烫得不行?怎么办?

    本文介绍电机温度过高的原因和解决方法。\x0a

    06-06
  • CAN节点发送错误不成功,怎么办?

    CAN总线上的每个节点往总线上发送数据的同时,会读取总线上的数据,并与自己发送的数据作对比。

    06-06
  • 无刷电机霍尔信号的滤波电路

    如图1是无刷电机霍尔信号的滤波电路,为了保证波形质量,简单的阻容滤波并不能完全解决实际复杂的工作环境所带来的

    06-05
  • LED驱动器中I2C的LED控制方式

    现在大街上随处可见的LED显示屏,还有装饰用的LED彩灯以及LED车灯,处处可见LED灯的身影,LED已经融入到生活中的每一个角落。LED无疑是当前最热的一个应

    06-02
  • 电平有关集成逻辑电路和rs232串口的基本知识

    [导读]手机串口一般是CMOS电平,当把android手机当做开发板上的一个器件(比如利用android系统自带的GPRS模块,wifi模块,语音视频模块等等)

    06-02
  • 如何评估CAN信号的质量?

    CAN总线广泛应用于汽车电子、现代工业及军工航空等安全要求较高的领域,优质的CAN信号是各节点稳定通信的基础,那么,如何判断总线信号质量的优劣呢?我们可以对信号

    05-31
下载排行榜
更多
广告