i.MXRT1060是緊接着i.MXRT1050之後推出的增強型,在IP數量上進一步增多,尤其是本文重點關注的IP - FlexSPI,i.MXRT1060内部內建了兩個FlexSPI子產品(均是雙通道8bit),相比于i.MXRT1050的單FlexSPI子產品,i.MXRT1060在雙Flash啟動連接配接的支援上要更豐富一些。而i.MXRT1064因為有内置Flash,其在單Flash啟動方式則是定死的,永遠從内部Flash啟動,無法選擇從外部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項目很有幫助。
- 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_SS1 | B_SS0 | B_SS1 | B_DATA[3:0] B_SCLK | ||
1 | ✔ Code | Data | |||||
2 | |||||||
3 | |||||||
4 |
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具體型号,但其實這也不是秘密,自己網上搜一搜相關資訊吧,痞子衡就不在這裡透露了。
FlexSPI 1st Option | FlexSPI 2nd Option | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BootROM未指定 | BootROM指定 | |||||||||||||||||
B_SCLK | ||||||||||||||||||
5 | ||||||||||||||||||
6 | ||||||||||||||||||
7 | ||||||||||||||||||
8 | ||||||||||||||||||
9 | ||||||||||||||||||
10 | ||||||||||||||||||
11 | ||||||||||||||||||
12 | ||||||||||||||||||
13 | ||||||||||||||||||
14 | ||||||||||||||||||
15 | ||||||||||||||||||
16 | ||||||||||||||||||
17 | ||||||||||||||||||
18 | ||||||||||||||||||
19 |
五、雙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首頁、微信公衆号 平台上。
微信搜尋"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。
最後歡迎關注痞子衡個人微信公衆号【痞子衡嵌入式】,一個專注嵌入式技術的公衆号,跟着痞子衡一起玩轉嵌入式。
衡傑(痞子衡),目前就職于恩智浦MCU系統部門,擔任嵌入式系統應用工程師。
專欄内所有文章的轉載請注明出處:http://www.cnblogs.com/henjay724/
與痞子衡進一步交流或咨詢業務合作請發郵件至 [email protected]
可以關注痞子衡的Github首頁 https://github.com/JayHeng,有很多好玩的嵌入式項目。
關于專欄文章有任何疑問請直接在部落格下面留言,痞子衡會及時回複免費(劃重點)答疑。
痞子衡郵箱已被私信擠爆,技術問題不推薦私信,堅持私信請先掃碼付款(5元起步)再發。