IT教程 ·

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.1)- FlexSPI NOR衔接体式格局大全(RT1015/1020/1050)

NIO-WindowsSelectorImpl源码分析

人人好,我是痞子衡,是正派搞手艺的痞子。本日痞子衡给人人引见的是恩智浦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代码里。
我们能够在芯片参考手册System Boot这一章节找到BootROM指定的FlexSPI NOR引脚,痞子衡整顿以下:

下表实用于i.MXRT105x:

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.1)- FlexSPI NOR衔接体式格局大全(RT1015/1020/1050) IT教程 第1张

下表实用于i.MXRT102x和i.MXRT1015:

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.1)- FlexSPI NOR衔接体式格局大全(RT1015/1020/1050) IT教程 第2张

上面的表格基本上已给我们指清楚明了方向,如今我们晓得了哪些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和其他三根片选,那些信号线后续是不是能够应用?

在下面文章的内容里,痞子衡会一一为人人剖析这些疑问:

二、单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衔接里为人人诠释。

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.1)- FlexSPI NOR衔接体式格局大全(RT1015/1020/1050) IT教程 第3张

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

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.1)- FlexSPI NOR衔接体式格局大全(RT1015/1020/1050) IT教程 第4张

第三种Flash衔接体式格局就是应用FlexSPI 2nd Option里的6根PORTA信号线衔接四线QSPI Flash,详细接法跟第一种体式格局很像,然则此处没有关于片选的疑虑,由于2nd Option只要一个片选。

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.1)- FlexSPI NOR衔接体式格局大全(RT1015/1020/1050) IT教程 第5张

引见完三种单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的走线长度在芯片内部不一样。总之不引荐这么用。
解答4:FlexSPI Reset信号是与1st、2nd Option无关的,所以两个Option下均能够用,不过Reset信号经常使用于八线Flash。

三、双Flash衔接体式格局(14种)

许多现实体系设想中,经常有既在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里一共8个片选,按排列组合来讲应当有 C(8,2) = 28种组合体式格局,但要斟酌以下非常:

非常1:1st A_SS0-2nd A_SS0、1st A_SS1-2nd A_SS1、1st B_SS0-2nd B_SS0、1st B_SS1-2nd B_SS1互联这4种状况需消除
非常2:1st A_SS0-2nd A_SS1、1st A_SS1-2nd A_SS0、1st B_SS0-2nd B_SS1、1st B_SS1-2nd B_SS0衔接这四种状况,DATA线有两种遴选,所以要增添4种组合

斟酌进上述非常状况后,照样存在28种衔接组合,那末这28种组合是不是是都可行呢?固然不是!要在这28种组合中剔撤除不包括1st A_SS0或许2nd A_SS0的组合。即下图中标浅绿色的Flash A0在双Flash组合中是一定要存在的,由于BootROM上电永远是从Flash A0中猎取FDCB以及启动代船埠(IVT, BootData),所以Flash A0就是Code Flash

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.1)- FlexSPI NOR衔接体式格局大全(RT1015/1020/1050) IT教程 第6张

剖析到了这里,我们就晓得以下相符前提的14种包括Flash A0的组合体式格局,个中标记Code的片选信号应当衔接寄存运用程序代码的Code Flash,标记Data的片选信号则衔接寄存用户数据的Data Flash:

Note:有一个处所要注重,假如两个Flash挂在统一范例PORT上(都是PORTA或都是PORTB),即下面的第1、4、5、8、9、12种组应时,这两片Flash最好是统一个型号,如许电气特征轻易保持一致。

NumFlexSPI 1st OptionFlexSPI 2nd OptionComments
A_SS0A_SS1A_DATA[3:0]
A_SCLK
B_SS0B_SS1B_DATA[3:0]
B_SCLK
A_SS0A_SS1A_DATA[3:0]
A_SCLK
B_SS0B_SS1B_DATA[3:0]
B_SCLK
1CodeDataBootROM直接支撑
Data Flash的设置
2CodeData
3CodeData
4DataCode
5DataCode
6DataCode
7DataCode
8CodeData仅实用RT1050
用户完成Data Flash设置
9CodeData
10CodeData
11CodeData
12CodeData
13CodeData
14CodeData

引见完14种双Flash衔接计划,如今来解答一些前面列出的疑问。

解答5:能够挂两片QSPI Flash启动,一共有14种衔接体式格局。两片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:运用程序代码里的FlexSPI驱动直接运用BootROM API(代码是在ROM空间运转的)。

这三种要领里首推要领3,既能完成需求,又能省Code Flash空间(FlexSPI驱动代码说小不小)。要领1现实上是不引荐的,毕竟Cache是种玄学,岂是你想掌握就掌握的。

4.2 RWW的中心意义

末了再说一下,挂两片Flash(或一片RWW Flash)究竟比拟挂一片非RWW Flash有什么优点?这就触及到RWW的中心意义了,实在痞子衡前面已讲过了,虽然不能实如今Code Flash中原地实行擦写操纵相干代码,然则在Data Flash擦写守候时期,CPU能够继承从Code Flash取代码实行,这意味着此时不须要锐意关闭体系全局中断,因而不影响体系相应的及时性。

至此,恩智浦i.MX RT1015/1020/1050三款MCU的FlexSPI NOR启动的衔接体式格局痞子衡便引见终了了,掌声在那里~~~

(数据科学学习手札78)基于geopandas的空间数据分析——基础可视化

参与评论