Autosar - NvM · Fee · Ea 구조 쉽게 이해하기
Autosar Nvm, Fee, Ea란?

안녕하세요. 버그없는토마토입니다 🍅
오늘은 AUTOSAR BSW 중에서도 실무에서 가장 자주 언급되는 기능,
바로 메모리 서비스(NVRAM Manager, NvM)와 관련 모듈 Fee/Ea를 정리해보겠습니다.
자동차 ECU는 전원이 꺼져도 유지되어야 하는 데이터가 존재합니다.
예를 들어:
- 시트 메모리 위치값
- 키 학습 정보
- 기능 설정값(옵션 코딩)
- 진단 데이터(DTC)
이런 데이터는 RAM이 아니라 Flash 메모리에 저장해야 합니다.
이 과정을 안전하고 표준화된 방식으로 수행하는 것이 바로 AUTOSAR 메모리 서비스 구조입니다.

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

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 = 실제 하드웨어 접근
오늘도 버그없는토마토였습니다 🍅
'AUTOSAR 기초' 카테고리의 다른 글
| AUTOSAR 계층 구조: ASW-RTE-BSW 완벽 이해 (3) | 2025.12.15 |
|---|---|
| 오토사(AUTOSAR) Classic vs Adaptive: 어떤 차이? 알아야할까? (0) | 2025.12.15 |
| 오토사(AUTOSAR)가 정확히 뭔가요? 개념부터 왜 배워야 하는지까지 (0) | 2025.12.14 |
| 🚗 AUTOSAR 구조, 실무자 관점에서 깊이 이해하기 (3) | 2025.12.13 |
| 🚗 AUTOSAR란? 취준생 눈높이에서 이해하기 (쉽고 확실하게 정리) (0) | 2025.12.13 |