痞子衡嵌入式:MCUBootUtility v5.3釋出,利用XMCD輕鬆使能外部RAM

痞子衡發表於2023-09-29

--
  痞子衡維護的 NXP-MCUBootUtility 工具距離上一個大版本(v5.0.0)釋出過去4個多月了,期間痞子衡也做過三個小版本更新,但不足以單獨介紹。這一次痞子衡為大家帶來了全新重要版本v5.3.x,這次更新主要是想和大家特別聊聊 XMCD 這個特性的支援。

一、v5.1 - v5.3更新記錄

-- v5.1.0
Features:
    1. [RT1180] 支援自動載入Edgelock韌體

-- v5.2.0
Features:
    1. [RTyyyy] 支援i.MXRT118x B0
    2. [RT] 對於FlexSPI NOR裝置,支援下載安全與非安全兩種地址連結的CM33程式
    3. [RT] 對於FlexSPI NOR裝置,支援別名地址連結的程式
Improvement:
    1. [RT1180] 使用者輸入的源程式檔案可以包含啟動頭 (Container)

-- v5.2.1
Bufixes:
    1. [RTyyyy] 修復對FlexSPI NAND裝置的下載支援

-- v5.3.0
Features:
    1. [RTyyyy] 支援XMCD配置功能,可用於載入image進FlexSPI RAM/SEMC SDRAM執行
    2. [RTyyyy] 支援第二個FlexSPI去下載啟動NAND
    3. [RT] 新增FlexSPI NAND啟動裝置模型支援
Improvement:
    1. [RTyyyy] 將FlexSPI序號選擇從選單欄改至裝置配置介面
    2. [RTyyyy] 可以識別連結在FlexSPI RAM區域的程式
Bufixes:
    1. [RTyyyy] 無法識別IVT中復位函式地址相對向量表首地址偏移小於0xB00的可啟動程式檔案

-- v5.3.1
Improvement:
    1. [RT] 可以檢查不同FlexSPI序號的有效XIP範圍
    2. [RTxxx] 可以識別連結在FlexSPI RAM區域的程式
Bufixes:
    1. [RT1180] 在FlexSPI NOR啟動裝置下無法生成一些Non-XIP程式的可啟動程式

二、幾個不可忽視的更新

2.1 完善的FlexSPI NOR對映地址支援

  在 v5.0 及其之前的版本里,工具對於 FlexSPI NOR 裝置對映地址的支援比較單一。在工具目錄 \src\targets\xxx\bltargetconfig.py 檔案中僅可見如下定義(RT1180為例),即一個 FlexSPI 僅對應一個主對映地址:

flexspiNorMemBase0 = 0x38000000
flexspiNorMemBase1 = 0x14000000

  但是我們知道部分 i.MXRT 型號系統設計裡對於 FlexSPI 除了支援主對映地址外,還支援所謂的別名對映地址(Aliased Address),甚至 CM33 核心的 i.MXRT 型號裡還區分 Secure 和 Non-Secure 地址。因此 v5.3 裡進一步豐富了 FlexSPI NOR 裝置的對映地址,這樣我們在編譯連結 XIP 啟動程式的時候,地址選擇更加靈活。此外這裡如果你仔細看,會發現工具對於最大對映地址空間檢查也按 RT 型號不同做了具體區分。

  但是這裡有關於 RT1180 的一點注意事項,工具目錄 \src\targets\MIMXRT1189\ 下預先放了兩個版本的 flashloader,一個僅支援 Secure 地址,另一個僅支援 Non-Secure 地址,這是當前 flashloader 實現的限制。為了能讓工具自動根據使用者輸入源程式實際連結地址型別來選擇合適的 flashloader 去做擦寫操作,需要先點選一次 Generate xxType Bootable Image 按鈕之後再點選 Connect to ROM 按鈕,最後再 All-In-One Action

cntr_flashloader_s.bin
cntr_flashloader_ns.bin

2.2 支援連結在FlexSPI RAM區域的程式

  對於 Non-XIP 程式,除了連結在 RT 晶片內部 SRAM 空間之外,還可以連結在外部 RAM 空間,比如 SEMC 介面對應的 SDRAM 裝置,或者 FlexSPI 介面對應的 HyperRAM 或者 PSRAM 裝置。v5.0 及之前工具僅能支援連結在 SDRAM 的程式,對於連結在 FlexSPI 對映空間的 Non-XIP 程式,工具會直接報非法地址。v5.3 版本開始,這個限制將不復存在(見如下對 RT1180 FlexSPI RAM 地址的支援),這也是為了配合 DCD 以及 XMCD 功能而做的改進。

2.3 對於RT1170 XMCD功能支援

  從 RT1160/1170 B0 以及其後的 RT1180 開始,BootROM 裡新增了 XMCD 功能,這是對 DCD 功能的補充。我們知道 DCD 可以實現對晶片指定外設的使用者定製化配置,常常用於配置 SEMC 暫存器去初始化 SDRAM 或者 FlexSPI 暫存器去初始化 HyperRAM/PSRAM,但是 DCD 的配置太細緻,需要從外設暫存器角度去理解那些外部 RAM 儲存器特性,這種方式從應用角度來說不夠友好。XMCD 正是為了解決這個問題,其將對 SDRAM/HyperRAM 配置以一種對使用者更友好更簡潔的方式來呈現,見如下介面設定:

  XMCD 雖好,但是其和 DCD 配合使用在當前工具裡會有一些限制,這主要是因為工具依賴的 RT1170 底層工具鏈(elftosb)對於 dcd 資料的生成僅支援相對 IVT 起始地址 0x40 的偏移,但這個偏移恰恰又是 XMCD 的偏移位置,兩者有衝突:

  • 限制 1:如果是 All-In-One Action 操作,不可在介面裡同時使能 DCD 和 XMCD。如果兩者同時使能,XMCD 設定會被自動忽略。
  • 限制 2:如果是 All-In-One Action 操作,使用者源應用程式裡如果包含 DCD 資料結構,那麼工具介面裡 XMCD 設定也會被自動忽略。
  • 限制 3:如果是 All-In-One Action 操作,使用者源應用程式裡如果包含 XMCD 資料結構,且工具介面裡 DCD 被使能,那麼 XMCD 資料結構將會被丟棄。

  當然如果你有一個同時包含 DCD 和 XMCD 資料的可啟動檔案,可以在工具通用程式設計器(Boot Device Memory)介面使用 Write 按鈕去下載。

  至此,這次更新的主要特性便介紹完了。MCUBootUtility專案地址如下。雖然當前版本(v5.3.x)功能已經非常完備,你還是可以在此基礎上再新增自己想要的功能。如此神器,還不快快去下載試用?

歡迎訂閱

文章會同時釋出到我的 部落格園主頁CSDN主頁知乎主頁微信公眾號 平臺上。

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

相關文章