i.MXRT1060是緊接著i.MXRT1050之後推出的增強型,在IP數量上進一步增多,尤其是本文重點關註的IP - FlexSPI,i.MXRT1060內部集成了兩個FlexSPI模塊(均是雙通道8bit),相比於i.MXRT1050的單FlexSPI模塊,i.MXRT1060在雙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。
二、涉及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主頁、微信公眾號 平臺上。
微信搜索"痞子衡嵌入式"或者掃描下麵二維碼,就可以在手機上第一時間看了哦。