其他分享
首页 > 其他分享> > 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.B)- FlexSPI NOR连接方式大全(RT1060/1064(SIP))

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.B)- FlexSPI NOR连接方式大全(RT1060/1064(SIP))

作者:互联网

i.MXRT1060是紧接着i.MXRT1050之后推出的增强型,在IP数量上进一步增多,尤其是本文重点关注的IP - FlexSPI,i.MXRT1060内部集成了两个FlexSPI模块(均是双通道8bit),相比于i.MXRT1050的单FlexSPI模块,i.MXRT1060在双Flash启动连接的支持上要更丰富一些。而i.MXRT1064因为有内置Flash,其在单Flash启动方式则是定死的,永远从内部Flash启动,无法选择从外部Flash启动。


  大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1060/1064(SIP)两款MCU的FlexSPI NOR启动的连接方式。

  上一篇文章《FlexSPI NOR启动连接方式(RT1015/1020/1050)》 写完之后,痞子衡发给了做线上客户支持的同事们审阅,受到了同事们的好评,同事们希望这个系列能把所有i.MXRT家族都写一遍,于是便有了今天的文章。特别提醒阅读本文时需要有上一篇文章的基础,因为有一些重复的内容本文不会赘述。
  今天的主角是i.MXRT1060和i.MXRT1064,说是两款不同的芯片,其实本质上是一款,因为i.MXRT1064是i.MXRT1060的SIP(System In a Package)版本,简单的说就是 i.MXRT1060 + 内置QSPI NOR Flash (4MB, 108MHz) = i.MXRT1064。但要真说是一款芯片吧,其实它们确实是两款不同的芯片,我们今天要聊到的FlexSPI NOR启动特性(尤其是连接方式)上两者又不一样。
  i.MXRT1060是紧接着i.MXRT1050之后推出的增强型,在IP数量上进一步增多,尤其是本文重点关注的IP - FlexSPI,i.MXRT1060内部集成了两个FlexSPI模块(均是双通道8bit),相比于i.MXRT1050的单FlexSPI模块,i.MXRT1060在双Flash启动连接的支持上要更丰富一些。而i.MXRT1064因为有内置Flash,其在单Flash启动方式则是定死的,永远从内部Flash启动,无法选择从外部Flash启动。
  i.MXRT1060集成双FlexSPI的主要用意其实并不是连接两个Flash,而是一个挂Flash,另一个挂HyperRAM。HyperRAM性能与价格现在与SDRAM相差无几,但引脚减少了很多,这对于I/O资源使用紧张的i.MXRT项目很有帮助。

一、关于Pin2Pin兼容

  我们知道i.MXRT1050和i.MXRT1060均是BGA196封装,而且它们是Pin2Pin兼容,这意味着只要你的代码里使用的资源在两个芯片上都存在,那么这个代码原则上既可以跑在i.MXRT1050上,也可以跑在i.MXRT1060上。
  你肯定会觉得奇怪,明明i.MXRT1060比i.MXRT1050多了一些IP模块(比如FlexSPI2),为什么还能做到Pin2Pin兼容,那FlexSPI2模块的Pinmux跑哪里去了?且听痞子衡慢慢解释,Pinmux分配都在IOMUXC模块里,i.MXRT1050上每个GPIO共支持ALT0-ALT7共8个选项,i.MXRT1060上关于ALT0-ALT7的定义与i.MXRT1050是一模一样的,这是Pin2Pin兼容的根本原因,但i.MXRT1060上部分GPIO还拓展了ALT8和ALT9,那些新增的IP模块的Pinmux都在ALT8-ALT9上。
  下表示例了GPIO_EMC[11:9]的ALT定义,可以看到ALT0-ALT7的定义在两个芯片上是一样的,但是i.MXRT1060上多了ALT8定义,这正是FlexSPI2的部分Pinmux。

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

二、涉及FlexSPI引脚

2.1 BootROM指定

  前面讲了,既然i.MXRT1060与i.MXRT1050是Pin2Pin兼容的,那么它们的BootROM在FlexSPI NOR启动的支持上是不是也一样的呢?你猜对了,虽然i.MXRT1060有两个FlexSPI模块,但是它的BootROM仅指定了从FlexSPI1启动,与i.MXRT1050是完全一致的。
  我们可以在i.MXRT1060芯片参考手册System Boot这一章节找到BootROM指定的FlexSPI NOR引脚,痞子衡整理如下:

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

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

  i.MXRT1064内置了一片QSPI Flash,这片Flash固定连在FlexSPI2 PortA上,具体PAD是在GPIO_SPI分组里,但是你在芯片手册里根本找不到GPIO_SPI分组,因为这是芯片封装内部的I/O,没有引到外部BGA196封装上。为了充分利用片内Flash,其BootROM指定了仅从片内Flash所连接的FlexSPI2启动。
  下表适用于i.MXRT1064(适用全系列封装):

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

2.2 BootROM未指定

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

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

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

三、单Flash连接方式

3.1 对于i.MXRT1060(3种)

  参考上一篇文章《FlexSPI NOR启动连接方式(RT1015/1020/1050)》 的 《三、单Flash连接方式(3种)》章节,在这方面,i.MXRT1060与i.MXRT1050是一样的。

3.2 对于i.MXRT1064(1种)

  单Flash连接方式对于i.MXRT1064来说就是一种,直接使用内部QSPI Flash,用户板级设计根本不需要再考虑外挂Flash。这也是i.MXRT1064相比i.MXRT1060的最大意义所在。

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

四、双Flash连接方式

  i.MXRT1050/1020仅含单FlexSPI模块,最大可以同时挂4片QSPI Flash,i.MXRT106x的两个FlexSPI模块当然理论上可以同时挂8片Flash。仅考虑接两片Flash的话,选择真的是太多了。

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

4.1 对于i.MXRT1060(18+4种)

  参考上一篇文章《FlexSPI NOR启动连接方式(RT1015/1020/1050)》 的 《四、双Flash连接方式(18种)》章节,在这方面,i.MXRT1060也同样支持i.MXRT1050所支持的18种连接方式。需要注意的是这18种连接均是基于FlexSPI1。
  除了上述18种连接外,在i.MXRT1060上还可以实现FlexSPI1和FlexSPI2上各连接一个Flash,这是i.MXRT1060相比i.MXRT1050的独特优势,使用两个FlexSPI模块可以天然解决在Code Flash中原地执行代码去擦写Data Flash这个难题。
  所在在i.MXRT1060上又新增了如下4种组合方式:

NumFlexSPI1 1st Option
BootROM指定
FlexSPI2
BootROM未指定
A_SS0A_DATA[3:0]
A_SCLK
A_SS0A_SS1A_DATA[3:0]
A_SCLK
B_SS0B_SS1B_DATA[3:0]
B_SCLK
1
Code

Data




2
Code


Data



3
Code




Data

4
Code





Data

4.2 对于i.MXRT1064(3+16种)

  i.MXRT1064片内Flash固定为Code Flash,因此我们只需要外挂一片Data Flash就行。所以对于i.MXRT1064来说,双Flash方案需要从头设计,有了前面的基础,咱们按葫芦画瓢吧:

Note:下面组合方案中第17种方案,因为涉及跟内部QSPI共信号,所以外挂Flash需跟内部QSPI Flash型号保持一致。恩智浦并没有公布i.MXRT1064内部QSPI具体型号,但其实这也不是秘密,自己网上搜一搜相关信息吧,痞子衡就不在这里透露了。

NumFlexSPI 1st OptionFlexSPI 2nd OptionFlexSPI2
BootROM未指定BootROM指定BootROM未指定
A_SS0A_SS1A_DATA[3:0]
A_SCLK
B_SS0B_SS1B_SCLKB_DATA[3:0]A_SS1B_SS0A_SS0A_SS1A_DATA[3:0]
A_SCLK
B_DATA[3:0]A_SS0A_DATA[3:0]
A_SCLK
A_SS1B_SS0B_SS1B_DATA[3:0]
B_SCLK
1
Data












Code




2

Data











Code




3






Data






Code




4








Data




Code




5









Data



Code




6
Data












Code




7

Data











Code




8







Data





Code




9









Data



Code




10










Data


Code




11



Data








Code




12




Data







Code




13






Data





Code




14



Data








Code




15




Data







Code




16







Data




Code




17













Code

Data



18













Code


Data

19













Code



Data

五、双FlexSPI主要用意

  最后再简单介绍一下双FlexSPI的主要用意,我们知道对于一些带LCD屏的i.MXRT项目,常常需要大的显存,芯片内部虽有高达1MB的RAM,但往往也捉襟见肘,所以我们一般还需要外挂一片RAM。在i.MXRT1050上我们是通过SEMC接口来接SDRAM,而到了i.MXRT1060上,除了接SDRAM之外,我们还可以通过FlexSPI接口连HyperRAM,HyperRAM相比SDRAM在I/O占用上要少一些,这样我们就可以省出更多的I/O用作其他设计。这才是双FlexSPI的核心价值。

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

  至此,恩智浦i.MX RT1060/1064(SIP)两款MCU的FlexSPI NOR启动的连接方式痞子衡便介绍完毕了,掌声在哪里~~~


标签:11,FlexSPI,SIP,Data,Flash,Code,MXRT1050,MXRT1060
来源: https://blog.51cto.com/u_12094353/2713538