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

03/01 17:28
阅读数 37

  大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦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。

<img src="http://henjay724.com/image/cnblogs/i.MXRT_Boot_FlexNOR_Pinmux_1050_alt0-7.PNG" style="zoom:100%" />

<img src="http://henjay724.com/image/cnblogs/i.MXRT_Boot_FlexNOR_Pinmux_1060_alt0-9.PNG" style="zoom:100%" />

二、涉及FlexSPI引脚

2.1 BootROM指定

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

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

<img src="http://henjay724.com/image/cnblogs/i.MXRT_Boot_FlexNOR_Pinmux_1060.PNG" style="zoom:100%" />

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

<img src="http://henjay724.com/image/cnblogs/i.MXRT_Boot_FlexNOR_Pinmux_1064.PNG" style="zoom:100%" />

2.2 BootROM未指定

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

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

<img src="http://henjay724.com/image/cnblogs/i.MXRT_Boot_FlexNOR_Pinmux_106x_other.PNG" style="zoom:100%" />

三、单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的最大意义所在。

<img src="http://henjay724.com/image/cnblogs/i.MXRT_Boot_FlexNOR_Pinmux_1064_InternalFlash.PNG" style="zoom:100%" />

四、双Flash连接方式

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

<img src="http://henjay724.com/image/cnblogs/i.MXRT_Boot_FlexNOR_Pinmux_106x_2flashes_v2.PNG" style="zoom:100%" />

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

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

<table><tbody> <tr> <th rowspan="2">Num</th> <th colspan="2">FlexSPI1 1st Option<br> BootROM指定</th> <th colspan="6">FlexSPI2<br> BootROM未指定</th> </tr> <tr> <th>A_SS0</th> <th>A_DATA[3:0]<br> A_SCLK</th> <th>A_SS0</th> <th>A_SS1</th> <th>A_DATA[3:0]<br> A_SCLK</th> <th>B_SS0</th> <th>B_SS1</th> <th>B_DATA[3:0]<br> B_SCLK</th> </tr> <tr> <td>1</td> <td>✔<br> Code</td> <td>✔</td> <td>✔<br> Data</td> <td></td> <td>✔</td> <td></td> <td></td> <td></td> </tr> <tr> <td>2</td> <td>✔<br> Code</td> <td>✔</td> <td></td> <td>✔<br> Data</td> <td>✔</td> <td></td> <td></td> <td></td> </tr> <tr> <td>3</td> <td>✔<br> Code</td> <td>✔</td> <td></td> <td></td> <td></td> <td>✔<br> Data</td> <td></td> <td>✔</td> </tr> <tr> <td>4</td> <td>✔<br> Code</td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> <td>✔<br> Data</td> <td>✔</td> </tr> </table>

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具体型号,但其实这也不是秘密,自己网上搜一搜相关信息吧,痞子衡就不在这里透露了。

<table><tbody> <tr> <th rowspan="3">Num</th> <th colspan="9">FlexSPI 1st Option</th> <th colspan="4">FlexSPI 2nd Option</th> <th colspan="6">FlexSPI2</th> </tr> <tr> <th colspan="13">BootROM未指定</th> <th colspan="2">BootROM指定</th> <th colspan="4">BootROM未指定</th> </tr> <tr> <th>A_SS0</th> <th>A_SS1</th> <th>A_DATA[3:0]<br> A_SCLK</th> <th>B_SS0</th> <th>B_SS1</th> <th>B_SCLK</th> <th>B_DATA[3:0]</th> <th>A_SS1</th> <th>B_SS0</th> <th>A_SS0</th> <th>A_SS1</th> <th>A_DATA[3:0]<br> A_SCLK</th> <th>B_DATA[3:0]</th> <th>A_SS0</th> <th>A_DATA[3:0]<br> A_SCLK</th> <th>A_SS1</th> <th>B_SS0</th> <th>B_SS1</th> <th>B_DATA[3:0]<br> B_SCLK</th> </tr> <tr> <td>1</td> <td>✔<br> Data</td> <td></td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td>✔<br> Code</td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>2</td> <td></td> <td>✔<br> Data</td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td>✔<br> Code</td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>3</td> <td></td> <td></td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> <td>✔<br> Data</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td>✔<br> Code</td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>4</td> <td></td> <td></td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td>✔<br> Data</td> <td></td> <td></td> <td></td> <td>✔<br> Code</td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>5</td> <td></td> <td></td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td>✔<br> Data</td> <td></td> <td></td> <td>✔<br> Code</td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>6</td> <td>✔<br> Data</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td>✔</td> <td></td> <td>✔<br> Code</td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>7</td> <td></td> <td>✔<br> Data</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td>✔</td> <td></td> <td>✔<br> Code</td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>8</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td>✔<br> Data</td> <td></td> <td></td> <td></td> <td>✔</td> <td></td> <td>✔<br> Code</td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>9</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td>✔<br> Data</td> <td></td> <td>✔</td> <td></td> <td>✔<br> Code</td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>10</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td>✔<br> Data</td> <td>✔</td> <td></td> <td>✔<br> Code</td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>11</td> <td></td> <td></td> <td></td> <td>✔<br> Data</td> <td></td> <td>✔</td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td>✔<br> Code</td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>12</td> <td></td> <td></td> <td></td> <td></td> <td>✔<br> Data</td> <td>✔</td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td>✔<br> Code</td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>13</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td>✔</td> <td>✔</td> <td></td> <td>✔<br> Data</td> <td></td> <td></td> <td></td> <td></td> <td>✔<br> Code</td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>14</td> <td></td> <td></td> <td></td> <td>✔<br> Data</td> <td></td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td>✔</td> <td>✔<br> Code</td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>15</td> <td></td> <td></td> <td></td> <td></td> <td>✔<br> Data</td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td>✔</td> <td>✔<br> Code</td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>16</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td>✔</td> <td></td> <td></td> <td>✔<br> Data</td> <td></td> <td></td> <td></td> <td>✔</td> <td>✔<br> Code</td> <td>✔</td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>17</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td>✔<br> Code</td> <td>✔</td> <td>✔<br> Data</td> <td></td> <td></td> <td></td> </tr> <tr> <td>18</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td>✔<br> Code</td> <td>✔</td> <td></td> <td>✔<br> Data</td> <td></td> <td>✔</td> </tr> <tr> <td>19</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td>✔<br> Code</td> <td>✔</td> <td></td> <td></td> <td>✔<br> Data</td> <td>✔</td> </tr> </table>

五、双FlexSPI主要用意

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

<img src="http://henjay724.com/image/cnblogs/i.MXRT_Boot_FlexNOR_Pinmux_106x_flash-hyperram.PNG" style="zoom:100%" />

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

欢迎订阅

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

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

原文出处:https://www.cnblogs.com/henjay724/p/12390823.html

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部