• 痞子衡嵌入式:恩智浦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下载贵州快三开奖 多伦县 | 棋牌 | 方城县 | 林周县 | 十堰市 | 株洲县 | 松江区 | 九龙城区 | 高青县 | 称多县 | 大余县 | 永善县 | 平定县 | 长垣县 | 汉源县 | 莎车县 | 海林市 | 永丰县 | 河源市 | 武胜县 | 庄浪县 | 石嘴山市 | 贵德县 | 宣威市 | 沅江市 | 南京市 | 门源 | 襄垣县 | 民乐县 | 中山市 | 涟水县 | 湟源县 | 德化县 | 白银市 | 临朐县 | 望都县 | 商水县 | 景泰县 | 杨浦区 | 雷州市 | 饶阳县 | 余姚市 | 东阿县 | 广州市 | 金川县 | 仪陇县 | 来宾市 | 米易县 | 安龙县 | 广汉市 | 漯河市 | 宁国市 | 清徐县 | 贵南县 | 钟山县 | 利津县 | 西盟 | 莱芜市 | 阿瓦提县 | 建瓯市 | 措美县 | 穆棱市 | 乡城县 | 平谷区 | 浦江县 | 潮安县 | 元阳县 | 澎湖县 | 商都县 | 凤城市 | 平阳县 | 开化县 | 汤原县 | 牡丹江市 | 乌拉特中旗 | 新乡市 | 通州市 | 怀仁县 | 同德县 | 江口县 | 孟州市 | 吕梁市 | 威信县 | 集贤县 | 玉门市 | 祁门县 | 嵩明县 | 太原市 | 镇平县 | 淳化县 | 大同市 | 平阴县 | 德昌县 | 西宁市 | 张北县 | 蛟河市 | 顺昌县 | 南城县 | 洛阳市 | 辉县市 | 东山县 | 沛县 | 奎屯市 | 会泽县 | 威海市 | 海兴县 | 工布江达县 | 云浮市 | 长海县 | 汉源县 | 嘉定区 | 永仁县 | 无为县 | 武定县 | 阿拉善盟 | 兴山县 | 白银市 | 宁安市 | 内乡县 | 西昌市 | 彩票 | 鹿泉市 | 额尔古纳市 | 内乡县 | 老河口市 | 新乡县 | 新蔡县 | 泰和县 | 克山县 | 红桥区 | 江川县 | 武陟县 | 鄂托克旗 | 元朗区 | 潼南县 | 阜宁县 | 尖扎县 | 安庆市 | 同心县 | 西华县 | 庆城县 | 景德镇市 | 曲水县 | 承德市 | 禹城市 | 德格县 | 称多县 | 汽车 | 黔南 | 都安 | 晋州市 | 定州市 | 山西省 | 图片 | 波密县 | 安岳县 | 正阳县 | 新沂市 | 洛浦县 | 六枝特区 | 宁阳县 | 博野县 | 始兴县 | 唐海县 | 梓潼县 | 兴隆县 | 汕尾市 | 九龙城区 | 扬州市 | 威远县 | 容城县 | 长汀县 | 永顺县 | 九龙坡区 | 水富县 | 灵台县 | 新竹县 | 阿勒泰市 | 威宁 | 新竹市 | 武威市 | 祥云县 | 韶关市 | 连云港市 | 家居 | 竹溪县 | 洪泽县 | 囊谦县 | 鲁山县 | 托克逊县 | 周口市 | 东光县 | 沈丘县 | 甘泉县 | 杭锦后旗 | 醴陵市 | 日喀则市 | 车致 | 孝义市 | 瑞安市 | 孟津县 | 梅州市 | 镇巴县 | 延安市 | 长沙县 | 沈阳市 | 南木林县 |