자동차 임베디드 SW/Aurix MCU

Aurix MCU Memory Protection 메모리 프로텍션 개념 정리

존버매니아.임베디드 개발자 2024. 10. 3. 11:16
반응형

현재 실행중인 SW가 
값을 읽고, 쓰고, 명령어를 실행하는 과정에서 접근할 수 있는,
메모리의 범위를 하드웨어적으로 Setting 해 놓은 후,
메모리 프로텍션 기능을 Enable 할 경우.
지정되지 않은 메모리에 접근하려고 하면 트랩과 SMU Error 가 발생되는 기능이 메모리 프로텍션 기능이다
 
Ex)  예시


메모리프로텍션 기능 활용을 위해 기억해야할 포인트는 3가지이다.
- 접근 가능한 범위를 지정하기 (Range 셋팅)
  1개가 아니라 여러 종류를 지정할 수 있음 (예를들어 아래와 같이 3개의 범위 지정)
  Ex) 0x1000~ 2000 , 0x2000~0x3000,  0x3500 ~ 0x5000
 
- 위에 지정된 각 범위에 대하여 접근 권한 셋팅하기 . 근데 이것도 1개가 아니라 여러개를 지정해놓을 수 있으며
지정된 각각을 Protection Register Set 라고 부른다.
 Ex)
Set 0 :
      0x1000 ~ 0x2000 : 읽기 가능 & 쓰기 가능
      0x2000 ~ 0x3000 : 읽기만 가능
      0x3500 ~ 0x5000 : 명령어 실행가능
 
Set 1 :
   0x2000 ~ 0x3000 : 읽기&쓰기 가능
   0x3500 ~ 0x5000 : 명령어 실행가능
 
- 위에 지정된 범위, 접근 권한을 실제로 적용하기 (Enable하기)
관련 레지스터 :
 SYSCON.PROTEN = 1 이라고 적으면 메모리 프로텍션 적용한다는 의미
 PSW.PRS = 어떤 Set를 적용할건지 셋팅 


메모리 프로텍션 에러 발생시, 발생되는 트랩

CPU의 CSFR 레지스터 중에서
DEADD 레지스터
: MEM Trap 발생시,  트랩 발생 시킨 메모리의 주소를 알려준다.

DATR 레지스터 : MEM Trap 발생시, 트랩 원인 관련 상태정보들을 보여준다.


메모리 프로텍션 기능과 관련된 실제 레지스터 예시)

접근 가능한 메모리 범위 지정을 위한 여러개의 레지스터가 존재함

 메모리 읽기/쓰기 범위 지정을 위한 Data 영역 지정 레지스터와

 코드 실행 범위 지정을 위한 Code 영역 지정 레지스터

 

32bit 크기의 Low Boundry, Upper Boundry 레지스터를 셋트로 사용해서 범위 지정함

 (아래 레지스터에 UUpper, LLower)

 

반응형