Overview
Memory Stack은 Memory Service, H/W Abstraction Driver Layer로 구성되어 있다.
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 |
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 |
NvM_ReadBlock NvM_WriteBlock NvM_RestoreBlockDefaults NvM_EraseNvBlock NvM_InvalidateNvBlock NvM_CancelJobs |
NvM_ReadBlock NvM_WriteBlock NvM_RestoreBlockDefaults NvM_CancelJobs |
- |
Type 3 -asynchronous request |
NvM_ReadAll NvM_WriteAll NvM_CancelWriteAll |
NvM_ReadAll NvM_WriteAll NvM_CancelWriteAll |
NvM_ReadAll NvM_WriteAll NvM_CancelWriteAll |
Type 4 - synchronous request |
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에 읽고 쓰기를 수행한다.
Explicit synchronization : NvM은 RAM mirror를 정의한다. Applicationdl NvM API를 호출할 경우 RAM Block과 RAM Mirror가 상호작용하고, RAM Mirror와 NV Block이 상호작용한다.
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 |