痞子衡嵌入式:恩智浦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主頁微信公眾號 平台上。

微信搜索"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM