【NXP i.MX RT1170 技術手冊】- 雙核專案配置

  一.簡介

NXP i.MX RT117x 系列中,RT1173RT1175RT1176 型號提供了雙核心設計,而 RT1171 RT1172 則採用單核心(Cortex-M7)架構。雙核心版本搭載了 Cortex-M7 Cortex-M4 兩顆處理器,這種創新設計在處理多任務時展現出卓越的效能與靈活性,能夠達到更快的運算速度與更低的能耗。開發者得以將任務分配至不同核心,以充分利用硬體資源,進而提升整體系統效能。

 

二.架構

i.MX RT117x 系列中可使用 M7 作為主核或使用 M4 為主核,在出廠設定下 M7 預設為主核啟動,上電時則 M7 啟動,根據需求不同可透過 eFUSE改變主核為 M4,下圖為 RT1170 手冊中 Fusemap,當中最後的 “RED”指的是此組 memory 是以 (redundancy) 方法管制,可只變更 bit,如果標示為 ECC則是需要以 WORD 長度進行修改

 

 

需要特別注意的是,eFUSE 一旦燒錄修改,便無法再次更改

 

在預設情況下,M7 核心啟動後會將 M4 核心的程式載入至內部記憶體的 ITCM 區域

 

如圖所示,程式碼雖存放於 0x2020_0000 位置,但實際執行則在 0x1FFE_0000。根據 RT1170 使用手冊,0x2020_0000 位置映射至 M4 核心的 On-Chip RAM

 

SDK 範例中,開發者可以透過 MAP 檔案確認該配置。編譯階段會將 M4 專案的程式碼放置於指定位置

 

M4 專案的 MAP 的位置 0x1FFE_0000 程式開頭

 

燒錄至開發板後,透過 memory 檢視工具確認在記憶體 0x2020_0000 的位置與 0x1FFE_0000 所二邊資料是一致

 

 補充一點,在使用 MCUXpresso memory 確認時如果是在 M7 專案讀取 0x1FFE_0000 會看到如下圖所示無法訪問

 

 這是因為 0x1FFE_0000 M4 Code TCM (Tightly Coupled Memory),專門給 M4 使用的記憶體區塊

 

故只要執行專案到 M4 的專案即可確認該區域記憶內容

 


三.實作

本節將介紹如何在 MCUXpresso 環境中從零開始創建雙核心專案。

l   創建 slave Core 專案

1.     選擇 Create a new c/C++ project…

 

2.     configure the project core 選項選擇 cm4 role 選擇 M4SLAVE,如此 build 出來的預設會產出 axf.o,而在專案 compiler 階段會將 .o 檔案整合到 Image

 

components 分頁中選擇 middleware ,勾選 mcmgr (Multicore Manager),用於管理多核運作

 

3.     在專案的 main 函數前,新增 MCMGR_EarlyInit 函數以啟動 mcmgr

void SystemInitHook(void)

{

    /* Initialize MCMGR - low level multicore management library. Call this

       function as close to the reset entry as possible to allow CoreUp event

       triggering. The SystemInitHook() weak function overloading is used in this

       application. */

    (void)MCMGR_EarlyInit();

}

 

實際上就是在啟動 Messaging Unit 用於雙核溝通及協調運作

下圖為 MU 方塊圖,由方塊圖可知 MU 在雙核運作下的角色

 

main 中新增以下片段配置目前專案的核心並註冊 MU event 確保跟另一個核心的運作

    uint32_t startupData;

    mcmgr_status_t status;

    (void)MCMGR_Init();

    do

    {

        status = MCMGR_GetStartupData(&startupData);

    } while (status != kStatus_MCMGR_Success);

 


 

4.     在專案點選右鍵選擇 properties,在 C/C++ Build 下配置 202C_0000 位置改為 rpmsg_sh_mem 用於存放雙核訊息 Buffer

 

5.     至此 Slave Core 專案創建完成,但並沒有任何相關硬體功能,在本文為驗證 slave Core 有運作,使用 LED Blink 方式確認 slave Core 有運作,配置方式與一般 LED Blink 專案相同,可參考 SDK 相關專案 

                    

 

6.     Compile Slave Core 專案後在 debug 資料夾會出現 .axf.o,此檔案在 Master Core 專案配置時會使用到,在 Master Core 專案 compile 時會整合成一個 image

 

 

l   配置主核專案

此步驟可從其他 SDK 專案進行修改,本文使用 Hello Word 範例進行調整

1.     以一般方式創建專案專案後再專案右鍵點選 properties

 

在分頁 MCU Settings 配置如下圖所示,配置 Slave Core 的區塊命名為 rpmsg_sh_mem 須注意 202c_0000 記憶體位置前後大小位置調整

 

2.     Settings Tool Settings 分頁選擇 Multicare ,勾選 M4SALVE 選擇剛剛 Slave Core 專案建出的 .o 檔案

 

Project References 中選擇 Slave Core 專案

 

3.     在專案點選右鍵選擇 MCUXpresso Config Tool -> Open Peripheral

 

Peripherals 預設是關閉,點及開關按鈕即可開啟

 

開啟後在 Peripherals 分頁輸入 MU,在出現的分頁點選 Open SDK Components Manager

 

 打開 Middleware 分頁選擇 Multicore -> mcmgr_imxrt1170

 

會跳出提示會更新的檔案,此處點選 Yes 即可

 

載入完成後點選 OK 即可

 

點選 Update Code

 

 

4.     宣告 mcmgr 及新增 define,此位置是前述映射 Slave Core 位置

#include "mcmgr.h"

#define CORE1_BOOT_ADDRESS (void *)0x20200000

main 前新增 SystemInitHook

void SystemInitHook(void)

{

    /* Initialize MCMGR - low level multicore management library. Call this

       function as close to the reset entry as possible to allow CoreUp event

       triggering. The SystemInitHook() weak function overloading is used in this

       application. */

    (void)MCMGR_EarlyInit();

}

main 中配置初始化 MCMGR 及啟動 Slave Core

    (void)MCMGR_Init();

    (void)MCMGR_StartCore(kMCMGR_Core1, (void *)(char *)CORE1_BOOT_ADDRESS, 2, kMCMGR_Start_Synchronous);

 

 

5.     Compile 後確認無誤,至此雙核專案已建立完成

 

 

6.     將專案燒錄到開發板上後透過 terminal 可看到 M7 印出 Hello Word M4 控制 LED 閃爍

 



  四. 參考資料
  • AN13264
  • IMXRT1170RM

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★博文作者未開放評論功能