痞子衡嵌入式:自識別特性(Auto Probe)可讓i.MXRT1060無需FDCB也能從NOR Flash啓動


  你們好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給你們分享的是自識別特性(Auto Probe)可讓i.MXRT1060無需FDCB也能從NOR Flash啓動html

  接着上篇文章 《瞭解i.MXRT1060系列ROM中串行NOR Flash啓動初始化流程優化點》 繼續聊。對於i.MXRT1050爲表明的第一代型號,Flash裏必需要放置用戶FDCB配置塊,存儲在這顆Flash裏的App才能被正常啓動。這個設計在i.MXRT1060爲表明的第二代型號裏有了改良,BootROM中增長了一個新特性,叫Auto Probe(自動識別),這個特性能夠在不放置用戶FDCB配置塊的狀況下App也能被正常啓動。今天痞子衡就跟你們好好聊聊這個特性:git

  • 備註:本文主角是i.MXRT1060,內容也基本適用i.MXRT1170,僅細節微小差異。

1、自動識別功能意義

  先從總體FlexSPI NOR啓動初始化流程圖上來看,自動識別(步驟X)被插入了初始化流程中,安排在FlexSPI外設第一次初始化以後,BootROM此時會盡力嘗試去識別外接的Flash信息,若是識別成功則會獲得一個自識別FDCB配置塊,而後直接跳到FlexSPI NOR第二次初始化流程。若是識別失敗,則繼續按原來方式嘗試讀取用戶FDCB配置塊來獲取外接Flash信息。github

  有了Flash自動識別功能,BootROM能夠沒必要再強制客戶在Flash裏放置FDCB塊,不少時候客戶未必特別瞭解Flash以及這個FDCB塊結構,不用提供FDCB能夠爲客戶省去不少耗費在Flash上的研發時間,客戶僅須要全心關注App功能設計。數組

2、開啓自動識別功能

  Flash自動識別功能開啓位在fuse_0x450[0](或者BT_CFG[0]引腳),默認是不使能的。想要開啓這個功能須要拉高相關CFG引腳或者燒寫相應Fuse位。微信

fuse 0x450[0] - FLASH_AUTO_PROBE_EN,Flash自動識別功能開啓

3、自動識別依賴的配置

  雖然說是Flash自動識別,但其實仍是依賴Fuse裏一些配置的,一共有以下四處配置,BootROM會根據這四處配置去進入Flash自動識別程序從而獲得一個匹配的FDCB配置塊,因此其實這個功能更準確的說法應該是FDCB自動生成。app

fuse 0x450[10:8] - FLASH_TYPE,決定當前鏈接的Flash類型
fuse 0x450[3:2]  - FLASH_PROBE_TYPE,當FLASH_TYPE=0/1/7時,取代FLASH_TYPE來決定當前鏈接的Flash類型
fuse 0x6e0[3:1]  - xSPI_FLASH_BOOT_FREQUENCY,決定FlexSPI工做頻率
fuse 0x6e0[11:8] - xSPI_FLASH_DUMMY_CYCLE,配置Flash讀訪問時序前須要的Dummy週期

  關於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 2'b00 0xc0100001 可進一步dummy cycle設置
2'b01 0xc0700001
2'b10 0xc0503001
2'b11 0xc0903001
3'b010 N/A 0xc0233001
3'b011 N/A 0xc0333001
3'b100 N/A 0xc0433001
3'b101 N/A 0xc0633001
3'b110 N/A 未定義

4、自動識別功能測試

  瞭解了這個自動識別功能細節以後,讓咱們在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]引腳。flex

  隨便選一個例程 \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主頁知乎主頁微信公衆號 平臺上。

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

相關文章
相關標籤/搜索