본문 바로가기

기술/개발 지식

AUTOSAR - MEMORY

Overview

Memory Stack은 Memory Service, H/W Abstraction Driver Layer로 구성되어 있다.

Overview of Memory Stack in AUTOSAR

NvM(NvRam Manager) : NvM은 Nonvolatile Data의 관리를 책임진다. (지원하는 모든 device에 data를 읽고 쓰기)

MemIf(Memory Abstraction Interface) : NvM에서 받은 Request를 Device에 맞게 하위 모듈에 전달한다.

Ea(EEPROM Abstraction) <External EEPROM> :  Ea Block의 유효성 확인 및 주소값을 계산한다.

Eep(EEPROM Driver) <External EEPROM> : EEPROM Device에 Spi를 통해 Data를 읽고 쓴다.

Fee(Flash EEPROM Emulation) <Internal EEPROM> : Dflash를 EEPROM처럼 Emulation하며, Fee Block의 유효성 확인 및 주소값 계산을 한다.

Fls(Flash Driver) <Internal EEPROM> : Dflash에 실제로 Data를 읽고 쓴다.

ASW는 RTE을 통해 Memory에 읽고 쓰는 함수를 호출한다. 콜백함수를 통해 메모리 작업이 정상적으로 혹은 비정상적으로 처리되었는지 확인한다.

Concept

Basic Storage Object

Block : EEPROM에 읽고 쓰는 단위

NV block : EEPROM에 저장되는 Block으로 NV data와 선택적으로 CRC, block header로 구성된다.

RAM block : Ram에 저장되는 Block으로 Ram data와 선택적으로 CRC, block header로 구성된다. 작업 완료될 때까지 data를 변경하면 안되며, 전역변수(global data section)으로 선언해야 한다.

ROM block : Flash에 저장되는 값으로 Nv Block이 비어있거나, Data가 깨질 경우 default 값을 설정에 따라 제공하여 깨진 값을 복구하는데 쓴다.

Administrative block : NvM 내부에서 사용하는 관리 block. Block의 에러, 상태 등의 정보를 가진다.

Block type

Type Description NV Blocks RAM Blocks ROM Blocks Administrative Blocks
NVM_BLOCK_NATIVE Write시 Ram block의 Data를 EEPROM에 한번 저장 1 1 0..1 1
NVM_BLOCK_REDUNDANT Write시 Ram block의 Data를 EEPROM에 두번 저장 2 1 0..1 1
NVM_BLOCK_DATASET 여러 NV block과 Rom Block으로 구성되어 원하는 Block에 저장 1... (n<256) 1 0..n 1

Nv block의 종류

NvM Block : App에서 EEPROM에 읽고 쓰는 논리적인 단위

Fee / Ea Block : EEPROM에 읽고 쓰는 물리적인 단위

NvM Block과 Fee/Ea Block의 연결관계

NvMNvBlockBaseNumber : NvM Block과 Fee/Ea Block을 연결해주는 Parameter

Job Prioritization (Block 우선 순위 지정)

Job Prioritization을 사용하지 않을 경우, NvM은 FCFS로 Request를 처리한다.

Job Prioritizationd을 사용할 경우, NvM은 2개의 Queue를 이용한다. 하나는 Immediate Write Job(Crash Data)를 저장하고 다른 하나는 그 외 모든 Job을 저장한다.

NvM관련 Error 정의

NvM 쓰기 혹인 읽기 실패시 다음과 같은 Error Code가 DEM으로 보고된다.

No Error Code Error Description
1 NVM_E_INTEGRITY_FAILED API request integrity가 실패할 경우
2 NVM_E_REQ_FAILED API request가 실패할 경우
3 NVM_E_VERIFY_FAILED Write verification이 실패할 경우
4 NVM_E_LOSS_OF_REDUNDANCY Loss of redundancy가 발생할 경우
5 NVM_E_QUEUE_OVERFLOW Job queue overflow가 발생할 경우
6 NVM_E_WRITE_PROTECTED write protection되어 있는 NVRAM block에 쓰기 시도할 경우
7 NVM_E_WRONG_BLOCK_ID Static ID가 이상할 경우

NvM 관련 API 분류

3가지 Class가 있으며 Class 설정에 따라 제공되는 API가 달라진다.

API configuration class 3 : 모든 기능이 지원된다.

API configuration class 2 : Intermediate set of API를 사용할 수 있다.

API configuration class 1 : 굉장히 제약적인 H/W를 사용하는 시스템에서 최소한의 API를 사용한다.

Characteristics of Request Types API configuration class 3 API configuration class 2 API configuration class 1

Type 1

- synchronous request
- affects one RAM block
- available for all SW-Cs

NvM_SetDataIndex
NvM_GetDataIndex
NvM_SetBlockProtection
NvM_GetErrorStatus
NvM_SetRamBlockStatus
NvM_SetDataIndex
NvM_GetDataIndex
NvM_GetErrorStatus
NvM_SetRamBlockStatus
NvM_SetBlockLockStatus
NvM_GetErrorStatus
NvM_SetRamBlockStatus
NvM_SetBlockLockStatus

Type 2

- asynchronous request
(result via callback or polling)
- affects one NVRAM block
- handled by NVRAM manager task
via request list
- available for all SW-Cs

NvM_ReadBlock
NvM_WriteBlock
NvM_RestoreBlockDefaults
NvM_EraseNvBlock
NvM_InvalidateNvBlock
NvM_CancelJobs
NvM_ReadBlock
NvM_WriteBlock
NvM_RestoreBlockDefaults
NvM_CancelJobs
-

Type 3

-asynchronous request
(result via callback or polling)
-affects all NVRAM blocks
with permanent RAM data

NvM_ReadAll
NvM_WriteAll
NvM_CancelWriteAll
NvM_ReadAll
NvM_WriteAll
NvM_CancelWriteAll
NvM_ReadAll
NvM_WriteAll
NvM_CancelWriteAll

Type 4

- synchronous request
- basic initialization
- success signaled to the task via command
interface inside the function itself

NvM_Init NvM_Init NvM_Init

NV Data Handling Guideline

RTE를 통해서 NvM을 사용하기 위해서는 다음의 3가지 방식을 지켜야 한다.

 - Application은 NvM의 API를 사용한다.

 - Application은 Request의 결과값을 Callback을 통하여 받을 수 있다.

 - NvM에서 Write/Read하는 Ram-block을 접근 할 수 있다.

 

Implicit synchronization : Application와 NvM은 RAM Block에 동시다발적인 접근이 가능하다. Application은 NvM API를 호출하여 Ram에 읽고 쓰기를 수행한다. 

Overview of Implicit synchronization

Explicit synchronization : NvM은 RAM mirror를 정의한다. Applicationdl NvM API를 호출할 경우 RAM Block과 RAM Mirror가 상호작용하고, RAM Mirror와 NV Block이 상호작용한다.

Overview of Explicit synchronization

 

General Behavior

Write requests(NvM_WriteBlock)

 - Application은 EEPROM에 Write할 Data를 Ram block에 쓴다.

 - NvM의 Write API를 호출한다.

 - Write가 끝날 때까지 RAM block을 수정하면 안 되고, 끝난 이후에 RAM block의 Data를 읽을 수 있다.

 - Application은 GetErrorStatus API나 Callback을 통하여 Write 완료 여부를 확인할 수 있다.

 - Write 작업이 끝난 후에 Ram block을 수정할 수 있다.

Read requests(NvM_ReadBlock)

 - Application은 EEPROM에서 읽을 Data를 저장할 수 있는 Ram block을 제공한다.

 - NvM의 Read API를 호출한다.

 - Read가 끝날 때까지 RAM block을 수정하면 안 된다.

 - Application은 GetErrorStatus API나 Callback을 통하여 Read 완료 여부를 확인할 수 있다.

 - Read 작업이 끝난 후에 Ram block을 수정할 수 있다.

'기술 > 개발 지식' 카테고리의 다른 글

SOTIF와 자율주행  (0) 2020.08.19
AUTOSAR - RTE  (0) 2020.03.16
AUTOSAR - OS  (0) 2020.03.16
AUTOSAR - Overview  (0) 2020.03.16
Medini Analyze를 활용한 기능안전(ISO26262) 세미나 - Part 4~6  (0) 2020.02.26