一.前言
ST車規MCU StellarE系統架構有四個外設橋(AHB1, AHB2, APB1, 和 APB2),它們支持一個寄存器保護硬體機制,以保護每個橋上分配的外設的配置寄存器不受不必要的修改。保護機制像防火牆一樣工作,基於寄存器的鎖定狀態進行寫操作保護。因此,寄存器保護特性也被稱為寄存器硬體鎖定。圖片來自ST SR5E1參考手冊
二.SR5E1寄存器保護機制介紹
寄存器保護機制(REG PROT)默認未啟用。通過在UTEST DCF記錄區域編程一個專用的設備配置格式記錄(REG_HWLOCK_DCF)來激活此特性。每個AHB和APB橋都有一個啟用位,允許獨立鎖定APB1、APB2、AHB1和AHB2。在系統啟動期間,設備配置被加載,保護機制實際上被激活。REG_HWLOCK_DCF只能編程一次。因此,一旦啟用,寄存器保護機制不能被禁用。在某個外設總線橋上啟用寄存器保護機制會激活該橋上所有可用機制的外設的保護。下表顯示了SR5E1設備每個橋上實際受保護的外設。
三.SR5E1受保護寄存器寫操作介紹
寄存器保護機制(REG PROT)的主要目標是保護寄存器不受不必要的修改。這意味著只有使用特殊程序才能進行修改。受保護寄存器的修改包括兩步寫操作。- 第一次寫入(WRITE1),解鎖寄存器以進行寫入,需要提供寄存器的實際地址作為數據。
- 第二次寫入(WRITE2)是對寄存器進行實際寫入,帶有所需的數據。
圖片來自ST SR5E1參考手冊
要解鎖寄存器保護機制,必須由同一總線主控器完成寄存器地址的寫入和實際數據的寫入。錯誤的解鎖程序會導致硬故障錯誤。四.SR5E1受保護寄存器寫操作實例
以下示例展示了如何在APB2橋上配置REG PROT機制,以及如何修改連接到該總線上的一個外設(SYSCFG)的一個寄存器(EXTICR_3_0)。- SYSCFG寄存器名稱 地址值
- EXTICR_3_0 0x42000008
- 0x1 = EXTI0多路復用輸出是PA0(默認值)
- 0x2 = EXTI0多路復用輸出是PB0
要為APB2橋配置寄存器保護機制,用戶必須如下編程REG_HWLOCK_DCF:
- REG_HWLOCK_DCF.HWLOCK4 = 0x1,
系統啟動後,外設SYSCFG和CMU0的配置寄存器的寫訪問已經激活。要激活REG PROT機制,用戶必須發出系統重置。系統重置後,SYSCFG和CMU0外設立即受到不必要的修改保護。要改變寄存器的值,必須使用兩步寫入機制:
WRITE1:
- /* 寄存器鎖定:需要寄存器地址作為數據。 */
- SYSCFG.EXTICR_3_0 = SYSCFG_BASE + 0x08U;
WRITE2:
- /* 寄存器解鎖:允許寫訪問。 */
- SYSCFG.EXTICR_3_0 = 0x2U;
在寄存器中進行下一次寫入以編程不同值將導致硬故障錯誤。
- /* 寄存器鎖定:寫訪問導致錯誤。 */
- SYSCFG.EXTICR_3_0 = 0x1U;
評論