前言
在前面的<>文章文章中我們介紹了RH850-U2A的內存保護單元(MPU),了解了MPU的概念以及在RH850-U2A上的具體使用流程,但是對于TC3xx系列芯片的的MPU功能不甚了解。本文就來詳細介紹下TC3xx芯片的MPU功能。
縮略詞
簡寫 | 全稱 |
MPU | MemoryProtecionUnit |
PS | ProtectionSet |
PSW | ProgramStateWord |
參考文檔:
1. TriCoreTM TC1.6.2 core architecture manual
2. AURIXTC3XX_um_part1_v2.0.pdf
3.MPU功能詳解-以RH850U2A為例
4.TC3xx芯片的Trap詳解
注:本公眾號文章中使用了一些第三方工具和文檔,若有侵權,請聯系作者刪除!
正文
1.TC3xx芯片MPU介紹
MPU內存保護是芯片的硬件的機制,可保護用戶指定的內存范圍免受未經授權的讀取,寫入或指令提取訪問的影響。通過MPU配置,把芯片的Memory劃分為位若干(有大小限制)區域,每個區域可以配置讀(DataRead)、寫(DataWrite)、執行(CodeFetch)權限。配置MPU且使能MPU后,如果訪問某個內存區域但是改內存區域沒有配置對應的權限,就會產生MPUTrap。
1.1TC3xx芯片MPU資源
以TC37x(TC1.6.2.P內核)為例,有6個Memory Protection Register Sets;TC37x芯片有3個Core,每個核有18個Data Memory Protection Ranges,10個Code Protection Ranges。
Note: 后文會介紹什么是Memory Protection Sets,Data/Code Protection Range.
1.2 Protection Sets
官方解釋:
作者理解:TC3xx芯片可以配置多種內存保護集(Sets),每種內存保護集的內存劃分及其權限可以不一樣,這樣我們可以通過切換當前的內存保護集實現不一樣的內存保護策略。程序狀態字寄存器的的PRS位域(PSW.PRS)確定了當前使用內存保護集。
1.3Protection Range
官方解釋:
作者理解:TC3xx芯片的內存保護Range的劃分和RH850不一樣,TC3xx的內存保護Range還區分Data Protection Ranges和CodeProtection Ranges,對于Data Protection Ranges只能Enable讀、寫的權限,對于Code Protection Range只能Enable可執行(Execute Access)權限。
1.4訪問權限
每個內存保護區域可以配置它的DataRead, Data Write, Intruction Fectch權限,不過通過1.2章節可知,DataProtection Range只能配置Data Read/Write權限,Code Protection Range只能配置Instruction Fectch權限。
Note1: 兩塊不同Protection Range的公共區域的訪問權限是兩塊區域訪問權限的”或”關系后的訪問權限。
Note2: 跨Protection Range的訪問不會產生Trap。
Note3: 為了保持Protection Regions的分離性,Protection Region間應該有空置的區域。
1.5使能內存保護
配置SYSCON.PROTEN == 1即使能內存保護功能。
1.6內存保護Trap
使能了內存保護后,如果產生Error,就會觸發對應的Trap。可以參考<>一文。
2.TC3xx內存保護配置
ProtectionsSets和Code/Data Protection Type在DavinciConfigurator的SIP包中根據定制的芯片類型以及預定義好的,只要使用的在配置Protection Range的時候引用就行。
如上圖所示,我們配置了一個Data Protection Ranges,給DFlash0配置上MPU權限:
Short Name: Protection Ranges的名字。
Memory Region End Address: Protection Ranges的結束地址,必須是8字節的整數倍,且應該大于等于StartAddress.
Memory Region Identifier: 定義可選的特定于硬件的內存保護區域標識符。不是必須配置項,一般不用配置。
MemoryRegion Owner: 指定內存保護區域是特定于OS-Applicaiton,Task, ISR ,還是全局的。如果引用了Task, ISR后,只有進入到對應的Task,ISR后該Protection Ranges才被激活。如果沒有引用,則該Protection一直是被激活的。
Note: 這個配置項需要謹慎配置,如果不是很確定,建議不要配置,也就是Global的。因為,比如,我給該Protection Ranges配置了一個Task,那么該ProtectionRange只有該Task才能讀寫,如果有其他的Task也讀寫該Protection Ranges的話,就會產生MPUTrap。
Memory Region Protection Unit: 配置該Protection Range屬于哪一個Core的Data/Code MPU Protection Ranges。
Memory Region Protection Unit Slot: 和硬件特性相關,可以不用配置。
Memory Region Start Address: Protection Ranges的起始地址,必須是8字節的整數倍,且應該大于等于EndAddress.
Memory Region Access Rights: 選擇預定義好的Protection Set的權限。
3.MPU功能驗證
參考:<>
著重理解Trap產生后如何定位發生Trap的位置及產生Trap的原因。
4.總結
使能MPU功能后,MCU的所有內存訪問都會被監控,一單出現非預期內的內存訪問就會觸發MPU的保護,產生MPUTrap。根據使用經驗,MPU是把雙刃劍,用的好能把一些偶發內存異常訪問問題扼殺在開發階段,也能利用MPU來定位內存非法訪問問題。用的不好,就會導致系統經常進入Trap(一般都會走Reset)。如果項目要上MPU,建議提前規劃好MPU Protection Ranges及其訪問權限,這樣經過大量的開發過程驗證才能確保MPU達到正向監控的作用,而不是出現反作用。
審核編輯:湯梓紅
-
芯片
+關注
關注
453文章
50387瀏覽量
421783 -
MPU
+關注
關注
0文章
346瀏覽量
48735 -
內存保護單元
+關注
關注
0文章
6瀏覽量
1586
原文標題:TC3xx芯片MPU介紹
文章出處:【微信號:汽車電子嵌入式,微信公眾號:汽車電子嵌入式】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論