你们好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给你们介绍的是恩智浦i.MX RT1060/1064(SIP)两款MCU的FlexSPI NOR启动的链接方式。html
上一篇文章《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项目颇有帮助。微信
咱们知道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。性能
前面讲了,既然i.MXRT1060与i.MXRT1050是Pin2Pin兼容的,那么它们的BootROM在FlexSPI NOR启动的支持上是否是也同样的呢?你猜对了,虽然i.MXRT1060有两个FlexSPI模块,可是它的BootROM仅指定了从FlexSPI1启动,与i.MXRT1050是彻底一致的。
咱们能够在i.MXRT1060芯片参考手册System Boot这一章节找到BootROM指定的FlexSPI NOR引脚,痞子衡整理以下:flex
下表适用于i.MXRT1060(适用全系列封装):spa
i.MXRT1064内置了一片QSPI Flash,这片Flash固定连在FlexSPI2 PortA上,具体PAD是在GPIO_SPI分组里,可是你在芯片手册里根本找不到GPIO_SPI分组,由于这是芯片封装内部的I/O,没有引到外部BGA196封装上。为了充分利用片内Flash,其BootROM指定了仅从片内Flash所链接的FlexSPI2启动。
下表适用于i.MXRT1064(适用全系列封装):.net
在此也列出不在BootROM指定的FlelxSPI NOR引脚,方便后续设计双Flash时参考。设计
下表适用于i.MXRT106x(适用全系列封装):3d
参考上一篇文章《FlexSPI NOR启动链接方式(RT1015/1020/1050)》 的 《3、单Flash链接方式(3种)》章节,在这方面,i.MXRT1060与i.MXRT1050是同样的。htm
单Flash链接方式对于i.MXRT1064来讲就是一种,直接使用内部QSPI Flash,用户板级设计根本不须要再考虑外挂Flash。这也是i.MXRT1064相比i.MXRT1060的最大意义所在。blog
i.MXRT1050/1020仅含单FlexSPI模块,最大能够同时挂4片QSPI Flash,i.MXRT106x的两个FlexSPI模块固然理论上能够同时挂8片Flash。仅考虑接两片Flash的话,选择真的是太多了。
参考上一篇文章《FlexSPI NOR启动链接方式(RT1015/1020/1050)》 的 《4、双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种组合方式:
Num | FlexSPI1 1st Option BootROM指定 |
FlexSPI2 BootROM未指定 |
||||||
---|---|---|---|---|---|---|---|---|
A_SS0 | A_DATA[3:0] A_SCLK |
A_SS0 | A_SS1 | A_DATA[3:0] A_SCLK |
B_SS0 | B_SS1 | B_DATA[3:0] B_SCLK |
|
1 | ✔ Code |
✔ | ✔ Data |
✔ | ||||
2 | ✔ Code |
✔ | ✔ Data |
✔ | ||||
3 | ✔ Code |
✔ | ✔ Data |
✔ | ||||
4 | ✔ Code |
✔ | ✔ Data |
✔ |
i.MXRT1064片内Flash固定为Code Flash,所以咱们只须要外挂一片Data Flash就行。因此对于i.MXRT1064来讲,双Flash方案须要从头设计,有了前面的基础,我们按葫芦画瓢吧:
Note:下面组合方案中第17种方案,由于涉及跟内部QSPI共信号,因此外挂Flash需跟内部QSPI Flash型号保持一致。恩智浦并无公布i.MXRT1064内部QSPI具体型号,但其实这也不是秘密,本身网上搜一搜相关信息吧,痞子衡就不在这里透露了。
Num | FlexSPI 1st Option | FlexSPI 2nd Option | FlexSPI2 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BootROM未指定 | BootROM指定 | BootROM未指定 | |||||||||||||||||
A_SS0 | A_SS1 | A_DATA[3:0] A_SCLK |
B_SS0 | B_SS1 | B_SCLK | B_DATA[3:0] | A_SS1 | B_SS0 | A_SS0 | A_SS1 | A_DATA[3:0] A_SCLK |
B_DATA[3:0] | A_SS0 | A_DATA[3:0] A_SCLK |
A_SS1 | B_SS0 | B_SS1 | B_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的主要用意,咱们知道对于一些带LCD屏的i.MXRT项目,经常须要大的显存,芯片内部虽有高达1MB的RAM,但每每也捉襟见肘,因此咱们通常还须要外挂一片RAM。在i.MXRT1050上咱们是经过SEMC接口来接SDRAM,而到了i.MXRT1060上,除了接SDRAM以外,咱们还能够经过FlexSPI接口连HyperRAM,HyperRAM相比SDRAM在I/O占用上要少一些,这样咱们就能够省出更多的I/O用做其余设计。这才是双FlexSPI的核心价值。
至此,恩智浦i.MX RT1060/1064(SIP)两款MCU的FlexSPI NOR启动的链接方式痞子衡便介绍完毕了,掌声在哪里~~~
文章会同时发布到个人 博客园主页、CSDN主页、微信公众号 平台上。
微信搜索"痞子衡嵌入式"或者扫描下面二维码,就能够在手机上第一时间看了哦。