• 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU啟動那些事(11.2)- 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項目很有幫助。

    一、關于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主頁微信公眾號 平臺上。

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

    posted @ 2020-03-01 17:28  痞子衡  閱讀(...)  評論(...編輯  收藏
    2018.05.30至今訪問人數:
    UV
    2018.05.30至今總訪問量:
    PV
    流量統計來自 https://www.amazingcounters.com/

    2018.07.02至今各歸屬地訪問人數:
    Flag Counter
    歸屬地統計來自 https://www.flagcounter.com/ 贵州快三平台贵州快三主页贵州快三网站贵州快三官网贵州快三娱乐贵州快三开户贵州快三注册贵州快三是真的吗贵州快三登入贵州快三快三贵州快三时时彩贵州快三手机app下载贵州快三开奖 格尔木市 | 池州市 | 镇巴县 | 湾仔区 | 旬邑县 | 鸡泽县 | 会昌县 | 津南区 | 固始县 | 三河市 | 吉安市 | 屏南县 | 达孜县 | 麦盖提县 | 成安县 | 区。 | 荆州市 | 北安市 | 怀来县 | 靖宇县 | 井陉县 | 从化市 | 四会市 | 灵寿县 | 新宁县 | 丰原市 | 卢氏县 | 佳木斯市 | 贺州市 | 静乐县 | 宁津县 | 江达县 | 榆社县 | 芮城县 | 新巴尔虎右旗 | 荥阳市 | 松溪县 | 康马县 | 邻水 | 平远县 | 平阴县 | 广灵县 | 开远市 | 屯昌县 | 富宁县 | 宜昌市 | 玉田县 | 叙永县 | 金坛市 | 永平县 | 长丰县 | 万山特区 | 同江市 | 江北区 | 伊宁县 | 灵山县 | 临洮县 | 德清县 | 沁阳市 | 祁东县 | 肇庆市 | 宜宾县 | 茂名市 | 田林县 | 贵港市 | 柘城县 | 慈溪市 | 五原县 | 沾益县 | 内乡县 | 保定市 | 垫江县 | 大庆市 | 五台县 | 阳山县 | 沁源县 | 仁怀市 | 宁武县 | 汤阴县 | 米脂县 | 上饶县 | 江口县 | 丰原市 | 扎鲁特旗 | 婺源县 | 公安县 | 博罗县 | 潮安县 | 韶山市 | 高安市 | 伊春市 | 安达市 | 宁国市 | 新乐市 | 砚山县 | 天门市 | 满洲里市 | 梁河县 | 休宁县 | 泽普县 | 盐源县 | 锦州市 | 阳东县 | 娄烦县 | 贵溪市 | 贞丰县 | 三江 | 繁峙县 | 大庆市 | 禹城市 | 茶陵县 | 新田县 | 清远市 | 沅陵县 | 古丈县 | 瑞安市 | 九江市 | 平邑县 | 同江市 | 霍城县 | 华池县 | 四会市 | 昆山市 | 济宁市 | 辽宁省 | 长阳 | 思南县 | 鄂伦春自治旗 | 文化 | 晋城 | 十堰市 | 宁陕县 | 盘锦市 | 桐柏县 | 湄潭县 | 斗六市 | 开原市 | 九台市 | 建宁县 | 奉新县 | 于都县 | 鹰潭市 | 连城县 | 寿光市 | 崇仁县 | 五大连池市 | 黄山市 | 汽车 | 南川市 | 宝丰县 | 大同县 | 定安县 | 永安市 | 秦安县 | 南漳县 | 临泽县 | 东台市 | 阳江市 | 宜川县 | 奈曼旗 | 芦溪县 | 陆河县 | 荥经县 | 庄浪县 | 伽师县 | 佛坪县 | 牟定县 | 绥阳县 | 合江县 | 湘潭县 | 洛宁县 | 东丰县 | 庆阳市 | 中方县 | 苏尼特右旗 | 本溪 | 岑溪市 | 洪洞县 | 金川县 | 靖宇县 | 开平市 | 彰化县 | 青田县 | 东方市 | 奎屯市 | 扎兰屯市 | 信宜市 | 甘孜县 | 阿图什市 | 临泉县 | 保康县 | 汝城县 | 钟山县 | 内江市 | 靖西县 | 平远县 | 乐陵市 | 营口市 | 灵寿县 | 泸水县 | 万盛区 | 红安县 | 二连浩特市 | 乌兰县 | 樟树市 | 黑水县 | 清水河县 |