본문 바로가기
AUTOSAR 기초

💾 AUTOSAR 메모리 서비스란?

by 버그없는토마토 2025. 12. 14.

 Autosar - NvM · Fee · Ea 구조 쉽게 이해하기

Autosar Nvm, Fee, Ea란?

NvM이란?


안녕하세요. 버그없는토마토입니다 🍅
오늘은 AUTOSAR BSW 중에서도 실무에서 가장 자주 언급되는 기능,
바로 메모리 서비스(NVRAM Manager, NvM)와 관련 모듈 Fee/Ea를 정리해보겠습니다.

자동차 ECU는 전원이 꺼져도 유지되어야 하는 데이터가 존재합니다.
예를 들어:

  • 시트 메모리 위치값
  • 키 학습 정보
  • 기능 설정값(옵션 코딩)
  • 진단 데이터(DTC)

이런 데이터는 RAM이 아니라 Flash 메모리에 저장해야 합니다.
이 과정을 안전하고 표준화된 방식으로 수행하는 것이 바로 AUTOSAR 메모리 서비스 구조입니다.

메모리 NvM이란?

 

자동차 시동을 끄고 켤 때마다 내가 저장해놓은 시트의 위치가 초기화 된다면 저장해놓는 의미가 없겠죠
그런 부분을 메모리에 저장하여 차를 탈때마다 읽어오도록 하는 서비스가 바로 메모리 서비스입니다.
그럼 메모리 서비스에 관해 알아보고 조금만 더 들어가서 관련 모듈인 Fee, Ea 까지도 알아보는 시간을 갖겠습니다.

Autosar NvM이란?

1. 전체 구조 한눈에 보기

AUTOSAR 메모리 구조는 아래처럼 3계층으로 나뉩니다.

NvM (NVRAM Manager)  ← 데이터 관리
Fee / Ea              ← 블록 관리
Flash Driver           ← 실제 Flash 쓰기/읽기

각 계층마다 역할이 명확하게 구분되어 있습니다.


2. NvM (NVRAM Manager) – 메모리 관리의 “두뇌”

NvM은 메모리 서비스의 최상단 모듈로, ECU의 모든 비휘발성 데이터를 총괄 관리합니다.

쉽게 말하면:

"ECU 전체의 설정값·학습값을 관리하는 중앙 관리자"

📌 NvM의 주요 역할

✔ 블록 단위 데이터 관리
✔ 읽기(Load) / 쓰기(Store) API 제공
✔ Job Queue 관리
✔ 거의 모든 모듈이 NvM API를 통해 데이터 저장 요청
✔ 전원 차단 상황 대비 Write 전체 관리(Write-All)

 

예시:

NvM_WriteBlock(BlockId, DataPtr);
NvM_ReadBlock(BlockId, DataPtr);
 

ECU 내부 기능(진단, 시트, ADAS 등)은 직접 Flash를 접근하지 않고
무조건 NvM에 요청합니다.

오토사 플랫폼 제어기라면 메모리는 Nvm으로 부르고 Flash란 말은 잘 안쓰죠.

3. Fee와 Ea – Flash 메모리를 “어떻게 쓰는지”를 관리하는 계층

✔ Fee (Flash EEPROM Emulation)

Fee는 내부 Flash를 EEPROM처럼 사용할 수 있게 만들어주는 모듈입니다.

  • 대부분의 MCU에는 EEPROM이 없음
  • 대신 Flash를 EEPROM처럼 에뮬레이션해서 사용
  • 자동 Wear-Leveling 제공
  • Flash 수명 관리

즉,

"Flash에 어떻게 저장할지에 관한 알고리즘 담당"

예: S32K, STM32 대부분 Fee 사용


✔ Ea (EEPROM Abstraction)

Ea는 실제 물리 EEPROM이 있는 ECU에서 사용합니다.

역할은 Fee와 동일하지만,
대상 메모리가 Flash가 아닌 EEPROM이라는 점만 다릅니다.

즉,

  • EEPROM 존재 → Ea 사용
  • EEPROM 없음 → Fee 사용 (일반적)

자동차 ECU 대부분은 Ea보다 Fee를 더 많이 사용합니다.

모듈 이야기가 나오고 NvM, Flash, RAM, EEPROM 이야기가 나오니까 헷갈리는 사람이 있을 수 있습니다.
그럴 경우에 먼저 RAM, ROM, FLASH의 개념이 부족한 경우인데요
먼저 그 부분 개념을 다지고 온다면 조금씩 단어들이 보이기 시작할 거예요.
혹시나 이해를 위해 아래 예시를 들어봤습니다.

4. NvM vs Fee/Ea – 역할 차이 확실히 구분하기

모듈역할
NvM 비휘발성 데이터의 ‘관리자’. 블록 단위 요청 처리
Fee/Ea 실제 Flash/EEPROM에 “어떻게 쓸지” 처리
FlS(Flash driver) 하드웨어 Flash에 직접 읽기/쓰기 수행

간단하게 비유하면:

  • NvM = 물류회사 본사
  • Fee/Ea = 지역 창고(저장 방식 담당)
  • Flash driver = 실제 트럭 기사

5. 실무에서 가장 많이 쓰는 코드 패턴

자동차 소프트웨어에서는 아래 흐름이 거의 표준입니다.

🔸 데이터 변경 → NvM_WriteBlock()

예:

 
NvmData.BlockValue = 0x1234;
NvM_WriteBlock(NVM_BLOCK_ID, &NvmData);

🔸 ECU 부팅 → NvM_ReadBlock()

초기값 로드:

 
NvM_ReadBlock(NVM_BLOCK_ID, &NvmData);

🔸 전원 종료 시 → NvM_WriteAll()

BCM, BDC, ECU 종료 시 반드시 실행

 
NvM_WriteAll();
시스템이 깨어날 때 NvM데이터를 싹 읽어와서 변수에 저장합니다.
기능 간에 사용하려고 말이죠
그리고 변경된 데이터가 있다면 그때마다 Write해줍니다
그리고 시스템이 종료되기 전에 가져왔던 데이터 + 변경된 데이터를 모두 싹 저장하고 종료합니다.

6. 실무에서 흔히 발생하는 문제

❌ ① Flash Wear-out

반복 저장으로 Flash 수명 감소
→ Fee의 Wear-Leveling 기능로 해결

❌ ② NvM Pending 문제

Job이 Queue에 남아 저장이 끝나지 않는 문제

❌ ③ Write-All 누락

전원 Off 순서에서 Write-All이 누락되면 EEPROM 값 초기화되는 사고 발생
(자동차에서 매우 치명적)

❌ ④ Block ID 잘못 연결

설정 파일에서 Block ID가 맞지 않으면 데이터가 엉뚱한 곳에 저장

이런 문제는 실제 자동차 ECU 개발에서 매우 자주 발생합니다.


🏁 마무리

AUTOSAR의 메모리 서비스는 단순한 데이터 저장 기능이 아닙니다.
ECU의 신뢰성과 내구성, 그리고 안전성까지 연결되는 매우 중요한 영역입니다.

정리하면:

  • NvM = 데이터 저장 관리자
  • Fee/Ea = Flash/EEPROM에 “저장하는 방법" 담당
  • Flash Driver = 실제 하드웨어 접근

오늘도 버그없는토마토였습니다 🍅