前言
近期總有客戶提問,自己正在使用 S32K324 開發項目,但是手邊只有 S32K344 開發板。怎樣才能在初期研發階段,把 S32K344 開發板當做 S32K324 來用呢?
- S32K324 中有兩個獨立的 ARM Cortex-M7 內核,工作在 decoupled mode,符合 ASIL-B 功能安全等級
- S32K344 是 ARM Cortex-M7 單鎖步核,工作在 lockstep mode,符合 ASIL-D 功能安全等級
其實很簡單,我們只需要將 S32K344 的單鎖步核解耦成獨立的雙核,就相當於轉換成了 S32K324。NXP 提供了使能和解除鎖步核的靈活機制,在 UTEST_MISC 寄存器中將 LOCKSTEP_EN 位設為 0 即可,接下來講解具體步驟。

1. 配置DCF Records
Device Configuration Format(DCF)Records 用於在 MCU 復位信號發生時,在系統啟動階段配置一些內部寄存器。DCF Records 片區是 OTP(one-time-program) 的,寫一次寄存器需要用掉 8bytes 空間。單個 DCF Record 是 double word (8-byte),第一個 word 表示數據段,第二個 word 表示控制段。具體結構如下:

通過 S32K3xx_RM 文檔的附件 “S32K3xx DCF Clients.xlsx”查表可知,UTEST_MISC 控制段地址是 0x00100004,默認值是 0x00000101。而寄存器的第 0-bit 控制 LOCKSTEP_EN。因此,根據 DCF Records 結構,我們要寫入的解耦命令是 “0x00000100, 0x00100004” 這 8-byte 欄位。

查詢 UTEST Memory Map 可以找到,UTEST Flash Memory 的 0x00000700~0x00001BFF 地址段分配給 DCF Records 使用,如圖4 所示。其中 0x00000700~0x00000707 表示 DCF Records 的起始欄位。需要格外注意,包含配置數據的 DCF Records 在寫入時,必須緊跟在起始欄位之後,中間不能有空白區域。 
為了找到可以寫入 8-byte 欄位的地址,我們打開 S32DS 的 “window”->“show view”->“Memory” 窗口,之後運行任意程序(可以先在初始化的地方打斷點),從 “0x1B000700” 地址開始查看存儲內容,找出第一個由 0xFF 填充的 8-byte 欄位。一般是“0x1B000768”,我使用的MCU已經寫過一次 DCF,所以目標地址就是“0x1B000770”。也就是說,剛才的“0x00000100, 0x00100004”欄位要寫到“0x1B000770”地址中。

2. 程序編寫和運行
- 新建一個 S32K344 工程,建立工程的具體步驟就不贅述了,我們將重點放在如何把 DCF records 寫入 UTEST Flash 中。打開 Config Tool 外設配置界面,添加 C40_Ip 和 Cache_Ip 驅動模塊,保持默認配置無需修改。

- 添加頭文件和變量,TargetAddress 代表目標地址,DcfRecord 代表要寫入 UTEST Flash 的指令。第一次寫入“0x1B000770”地址的話,之後再次寫 DCF Records 時,目標地址加 8,以此類推。
#include "OsIf.h"
#include "Clock_Ip.h"
#include "Cache_Ip.h"
#include "C40_Ip.h"
#include <assert.h>
C40_Ip_StatusType flashStatus;
volatile uint32_t TargetAddress = 0x1B000770;
uint32_t DcfRecord[2] = {0x00000100, 0x00100004};
- 主函數內容如下圖所示:
- 初始化時鐘和 C40 flash
- 判斷目標地址是否為雙字 0xFF
- 解鎖 UTEST Flash 扇區
- 將 DCFRecord 命令寫入目標地址
- 輪詢讀取 Flash 狀態,讀到 STATUS_C40_IP_SUCCESS 說明 DCF Record 成功寫入到 UTEST Flash 中

- 還需要手動解決一個到目前的 RTD 4.0.0 版本未修正的小 bug,因為 UTEST Flash 在第 528 扇區,而“C40_Ip_Cfg.h”中將 C40 最大扇區定義為 527 沒有涵蓋 UTEST 區塊,程序運行時會報 DEV_ASSERT 錯誤。修改項如下圖所示:

- 推薦在編譯程序時選擇 “Debug RAM”,我們將固件下載到 RAM 中,避免 Flash 分區 RWW 問題。

- 編譯並燒錄可執行文件到 S32K344 中

- 前面我們講到了 DCF Record 是在系統啟動階段時配置寄存器的,所以在燒錄程序之後需要執行一次 MCU 復位操作,然後查看 DCM 寄存器的 LOCKSTEP_EN 位並確認已經置 0,也就是 MCU 工作在 decoupled mode,現在你的 MCU 已經解耦成了 S32K324。

3. 參考文檔
[1] Multi-Core Implementation in RTD of S32K3, Rev. 1, 07/2022, NXP
[2] S32K324_Dual_Core_Bascs_v1.2.pptx, NXP
[3] S32K3xx Reference Manual, Rev. 8, 01/2024, NXP
歡迎在博文下方留言評論,我們會及時回復您的問題。
如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com 作者:銀醬
更多資訊,請掃碼關注我們! 
評論