大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是自識别特性(Auto Probe)可以讓i.MXRT1060無需FDCB也能從NOR Flash啟動。
接着上篇文章 《了解i.MXRT1060系列ROM中串行NOR Flash啟動初始化流程優化點》 繼續聊。對于i.MXRT1050為代表的第一代型号,Flash裡必須要放置使用者FDCB配置塊,存儲在這顆Flash裡的App才能被正常啟動。這個設計在i.MXRT1060為代表的第二代型号裡有了改良,BootROM中增加了一個新特性,叫Auto Probe(自動識别),這個特性可以在不放置使用者FDCB配置塊的情況下App也能被正常啟動。今天痞子衡就跟大家好好聊聊這個特性:
備注:本文主角是i.MXRT1060,内容也基本适用i.MXRT1170,僅細節微小差别。
先從整體FlexSPI NOR啟動初始化流程圖上來看,自動識别(步驟X)被插入了初始化流程中,安排在FlexSPI外設第一次初始化之後,BootROM此時會盡力嘗試去識别外接的Flash資訊,如果識别成功則會得到一個自識别FDCB配置塊,然後直接跳到FlexSPI NOR第二次初始化流程。如果識别失敗,則繼續按原來方式嘗試讀取使用者FDCB配置塊來擷取外接Flash資訊。
有了Flash自動識别功能,BootROM可以不必再強制客戶在Flash裡放置FDCB塊,很多時候客戶未必特别了解Flash以及這個FDCB塊結構,不用提供FDCB可以為客戶省去很多耗費在Flash上的研發時間,客戶僅需要全心關注App功能設計。

Flash自動識别功能開啟位在fuse_0x450[0](或者BT_CFG[0]引腳),預設是不使能的。想要開啟這個功能需要拉高相關CFG引腳或者燒寫相應Fuse位。
雖說是Flash自動識别,但其實還是依賴Fuse裡一些配置的,一共有如下四處配置,BootROM會根據這四處配置去進入Flash自動識别程式進而得到一個比對的FDCB配置塊,是以其實這個功能更準确的說法應該是FDCB自動生成。
關于FDCB自動生成,其實就是利用了BootROM裡那一套經典的FlexSPI NOR驅動(詳見痞子衡之前的文章 《利用i.MXRT1xxx系列ROM提供的FlexSPI driver API可輕松IAP》 裡的2.2和2.3節),自動識别就是根據配置值組合出一個比對的 serial_nor_config_option_t option參數,經由flexSpiNorDriver->get_config()函數運作後便可得到完整的flexspi_nor_config_t config結構體(即FDCB)。
serial_nor_config_option_t option參數組合規則如下表所示:
FLASH TYPE
FLASH PROBE TYPE
option值
備注
3'b000
3'b111
2'b00
0xc0000001
可進一步dummy cycle設定
2'b01
0xc0603001
2'b10
0xc0403001
2'b11
0xc0803001
3'b001
0xc0100001
0xc0700001
0xc0503001
0xc0903001
3'b010
N/A
0xc0233001
3'b011
0xc0333001
3'b100
0xc0433001
3'b101
0xc0633001
3'b110
未定義
了解了這個自動識别功能細節之後,讓我們在MIMXRT1060-EVK上測試一下,首先需要将BT_CFG[0]引腳拉高(R325電阻焊上去,預設DNP),這就開啟了自動識别功能。
MIMXRT1060-EVK上預設連接配接的是IS25WP064AJBLE,這是一顆經典的133MHz QuadSPI NOR Flash,Fuse裡的初始自動識别配置(FLASH_TYPE = 000 - Device supports 3B read,FLASH BOOT FREQ = 0 - 100MHz)适合這顆Flash,是以無需再燒錄任何Fuse或拉高其他BT_CFG[x]引腳。
随便選一個例程 \SDK\boards\evkmimxrt1060\demo_apps\led_blinky 。編譯這個 led_blinky 工程(可以選擇 flexspi_nor_debug build,工程選項裡XIP_BOOT_HEADER_ENABLE=1現在可以去掉了),使用 NXP-MCUBootUtility 工具将其一鍵下載下傳進Flash中,下載下傳完成後注意擦除掉Flash前1KB的資料(即沒有FDCB),切換啟動模式後複位闆子,可以看到LED正常閃爍,說明自動識别功能生效了。
如果我們将MIMXRT1060-EVK上的Flash改為S26KS512SDPBHI02,這是一顆典型的1.8V HyperFlash,那麼還需要将BT_CFG2[2:0]設為 3'b010 - HyperFlash 1V8才能正常自識别。
至此,自識别特性(Auto Probe)可以讓i.MXRT1060無需FDCB也能從NOR Flash啟動痞子衡便介紹完畢了,掌聲在哪裡~~~
文章會同時釋出到我的 部落格園首頁、CSDN首頁、知乎首頁、微信公衆号 平台上。
微信搜尋"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。
最後歡迎關注痞子衡個人微信公衆号【痞子衡嵌入式】,一個專注嵌入式技術的公衆号,跟着痞子衡一起玩轉嵌入式。
衡傑(痞子衡),目前就職于恩智浦MCU系統部門,擔任嵌入式系統應用工程師。
專欄内所有文章的轉載請注明出處:http://www.cnblogs.com/henjay724/
與痞子衡進一步交流或咨詢業務合作請發郵件至 [email protected]
可以關注痞子衡的Github首頁 https://github.com/JayHeng,有很多好玩的嵌入式項目。
關于專欄文章有任何疑問請直接在部落格下面留言,痞子衡會及時回複免費(劃重點)答疑。
痞子衡郵箱已被私信擠爆,技術問題不推薦私信,堅持私信請先掃碼付款(5元起步)再發。