痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU啟動那些事(11.B)- FlexSPI NOR連接方式大全(RT1060/1064(SIP))
大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是恩智浦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項目很有幫助。
- Note1 : i.MXRT1060 可啟動 NOR Flash 僅能掛載在 FlexSPI1 上,在系統映射地址空間分配上,給 FlexSPI1 分配的起始地址是 0x60000000,因此 XIP 應用程序需要從 0x60000000 之后的空間開始鏈接
- Note2 : i.MXRT1064 內部封裝的 NOR Flash 掛載在 FlexSPI2 上,在系統映射地址空間分配上,給 FlexSPI2 分配的起始地址是 0x70000000,因此 XIP 應用程序需要從 0x70000000 之后的空間開始鏈接
一、關于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。
二、涉及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(適用全系列封裝):
i.MXRT1064內置了一片QSPI Flash,這片Flash固定連在FlexSPI2 PortA上,具體PAD是在GPIO_SPI分組里,但是你在芯片手冊里根本找不到GPIO_SPI分組,因為這是芯片封裝內部的I/O,沒有引到外部BGA196封裝上。為了充分利用片內Flash,其BootROM指定了僅從片內Flash所連接的FlexSPI2啟動。
下表適用于i.MXRT1064(適用全系列封裝):
2.2 BootROM未指定
在此也列出不在BootROM指定的FlelxSPI NOR引腳,方便后續設計雙Flash時參考。
下表適用于i.MXRT106x(適用全系列封裝):
三、單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的最大意義所在。
四、雙Flash連接方式
i.MXRT1050/1020僅含單FlexSPI模塊,最大可以同時掛4片QSPI Flash,i.MXRT106x的兩個FlexSPI模塊當然理論上可以同時掛8片Flash。僅考慮接兩片Flash的話,選擇真的是太多了。
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種組合方式:
| 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 |
? | ||||
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具體型號,但其實這也不是秘密,自己網上搜一搜相關信息吧,痞子衡就不在這里透露了。
| 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主要用意
最后再簡單介紹一下雙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主頁、微信公眾號 平臺上。
微信搜索"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。

最后歡迎關注痞子衡個人微信公眾號【痞子衡嵌入式】,一個專注嵌入式技術的公眾號,跟著痞子衡一起玩轉嵌入式。
衡杰(痞子衡),目前就職于恩智浦(NXP)半導體MCU系統應用部門,擔任高級嵌入式系統應用工程師。
專欄內所有文章的轉載請注明出處:http://www.rzrgm.cn/henjay724/
與痞子衡進一步交流或咨詢業務合作請發郵件至 hengjie1989@foxmail.com
可以關注痞子衡的Github主頁 https://github.com/JayHeng,有很多好玩的嵌入式項目。
關于專欄文章有任何疑問請直接在博客下面留言,痞子衡會及時回復免費(劃重點)答疑。
痞子衡郵箱已被私信擠爆,技術問題不推薦私信,堅持私信請先掃碼付款(5元起步)再發。
浙公網安備 33010602011771號