你們好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給你們介紹的是恩智浦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主頁、微信公衆號 平臺上。
微信搜索"痞子衡嵌入式"或者掃描下面二維碼,就能夠在手機上第一時間看了哦。