본문 바로가기
mobilgene/NvM

[NvM] NvM 설정 구조와 NvM Common 설정 방법 (주요 항목 설명까지)

by Autosar 2026. 4. 24.
반응형

앞선 글에서 NvM의 핵심 구조인 Block / Job / Queue 개념을 정리했다면,

이제는 실제 툴에서 NvM을 어떻게 설정하는지 이해할 차례이다.

 

실무에서는 NvM을 단순히 “활성화만 하면 되는 모듈”로 보지 않는다. 어떤 데이터를 저장할 것인지, 언제 저장할 것인지, 무결성 검사를 할 것인지, 전원 종료 시 자동 저장할 것인지 등을 모두 설정해야 비로소 정상 동작하는 구조가 완성된다.

 

Mobilgene에서 NvM 설정은 크게 두 영역으로 나뉜다.

 

- NvM Common 설정

- NvM Block 설정

 

이 두 영역의 차이를 이해하는 것이 가장 중요하다.

 

1. NvM 설정 구조
NvM
  ├─ Common Setting
  │      ├─ API 관련 설정
  │      ├─ Queue / 성능 설정
  │      ├─ 오류 검출 설정
  │      ├─ 시스템 연동 설정
  │      └─ 동작 정책 설정
  │
  └─ Block Setting
        ├─ Block 식별 정보
        ├─ RAM / ROM 연결
        ├─ CRC / 무결성 설정
        ├─ 저장 속성 설정
        └─ Callback 설정

 

Common = NvM 전체 운영 방식 설정
Block  = 데이터 단위 저장 설정

이라고 보면 된다.

 

 2. NvM Common 설정

 

NvM Common 설정은 특정 Block 하나를 위한 옵션이 아니라, NvM 모듈 전체가 어떤 방식으로 동작할지 결정하는 공통 설정 영역이다.

 

쉽게 말하면 시스템 전체 룰을 정하는 곳이다.

 

예를 들어:

- Queue를 몇 개까지 받을 것인가?

- MainFunction 주기를 어떻게 맞출 것인가?

- API를 사용할 것인가?

- 종료 시 자동 저장할 것인가?

- 개발 오류 검출을 켤 것인가?

 

이런 항목들이 Common에 들어간다.

 

3. NvM Common 주요 항목 설명

1. Api Config Class

NvM이 제공할 API 범위를 결정하는 설정이다.

Config Class 숫자가 높을수록 더 많은 API 기능을 사용할 수 있다.

 

일반적으로 'NVM_API_CONFIG_CLASS_3'은 가장 확장된 형태로,

프로젝트에서 사용하는 다양한 NvM API를 폭넓게 지원하는 설정이다.

 

즉, 단순 Read/Write만이 아니라 고급 기능까지 포함한 Full Feature 모드로 이해하면 된다.

 

2. BswM Multi Block Job Status Information

ReadAll, WriteAll 같은 Multi Block Job 상태를 BswM(Basic Software Mode Manager)과 연동하는 설정이다.

예를 들어, 'ECU 부팅 중 전체 데이터 로드 완료' 이런 상태를 BswM이 인지하여 다음 동작으로 넘어갈 수 있다.

 

전원 상태 전환, ECU Startup / Shutdown 시 자주 중요해진다.

 

3. Compiled Config Id

현재 NvM 설정 버전을 식별하는 값이다.

 

Block 구조, 개수, 크기 등이 변경되면 이전 저장 데이터와 현재 설정이 맞지 않을 수 있다. 이때 Config ID를 통해 버전 차이를 판단할 수 있다. 실무에서는 Block 구조 변경 시 이 값을 변경하여 초기화 전략을 적용하기도 한다.

 

4. Crc Num Of Bytes

CRC 계산 시 한 번에 처리하는 내부 데이터 단위와 관련된 성능 설정이다.

 

데이터 무결성 검사를 수행할 때 처리 효율에 영향을 줄 수 있으며, 보통 프로젝트 기본값을 유지하는 경우가 많다.

특별한 성능 튜닝이 아니라면 임의 변경하지 않는 편이 안전하다.

 

5. Dataset Selection Bits

Dataset Block 사용 시 어떤 Dataset을 선택할 수 있는지 결정하는 비트 수이다.

예를 들어 2bit이면 최대 4개 선택값을 표현할 수 있다.

 

Dataset Block을 사용하지 않는 프로젝트에서는 크게 체감되지 않을 수 있다.

 

6. Dev Error Detect

개발 단계 오류 검출 기능이다.

잘못된 API 사용 시 DET로 오류를 보고한다.

개발 중에는 보통 Enable 상태로 두는 편이다.

 

7. Drv Mode Switch

하위 메모리 드라이버의 동작 모드 전환 기능 사용 여부이다.

(예: Normal Mode, Fast Mode, Low Power Mode)

 

프로젝트에 따라 실제 사용 여부는 다르지만, 메모리 성능이나 전력 정책과 연동될 수 있다.

 

8. Dynamic Configuration

런타임 또는 설정 변화에 따라 NvM 구성을 유연하게 처리하는 기능과 관련된 옵션이다.

일반 양산 프로젝트에서는 고정된 설정 구조를 사용하므로 Disable 상태가 흔하다.

 

즉, 현재 프로젝트는 정적(Static) 설정 기반이라고 보면 된다.

 

9 Job Prioritization

Job 우선순위 기능 사용 여부이다.

중요한 요청을 일반 요청보다 먼저 처리할 수 있다.

(예: Immediate Block 저장 우선 처리, 일반 로그 저장은 후순위)

 

응답성이 중요한 시스템에서 유용하다.

 

10. Main Function Period

NvM_MainFunction() 호출 주기이다.
0.005초 = 5ms

 

즉. NvM Job Queue는 5ms 주기로 처리된다.

주기가 짧을수록 응답은 빨라지지만 CPU 부하는 증가할 수 있다.

 

11. Multi Block Callback

ReadAll, WriteAll 완료 후 호출할 사용자 Callback 함수이다.

완료 통지 함수를 사용하지 않을 경우 공란으로 설정하면 된다.

 

전체 초기화 완료 알림, 저장 완료 후 상태 변경 등에 활용할 수 있다.


12. Polling Mode

Job 완료 상태를 Polling 방식으로 확인할지 여부이다.

false이면 일반적으로 Notification/Event 기반 구조를 사용하는 경우가 많다.

즉, 계속 상태를 조회하지 않고 완료 이벤트 중심으로 동작한다고 볼 수 있다.

 

13. Repeat Mirror Operations

Mirror Block 처리 재시도 횟수와 관련된 설정이다.

 

메모리 반영 과정에서 특정 작업이 실패하거나 재처리가 필요할 때 반복 수행 횟수로 사용된다.

특수 Block 구조를 사용할 때 의미가 크며, 일반 사용자는 기본값 유지가 많다.

 

14. Set Ram Block Status Api

RAM 데이터 변경 여부를 Application이 직접 알려줄 수 있도록 한다.

 

사용 API:

NvM_SetRamBlockStatus(BlockId, TRUE);

 

특히 WriteAll() 시 변경된 Block만 저장하는 구조에서 매우 중요하다.

 

15. Size Immediate Job Queue

긴급 Job Queue 크기이다.

Immediate Block 요청을 최대 20개까지 대기시킬 수 있다는 의미이다.

즉시 저장이 필요한 데이터가 많다면 중요한 설정이다.

 

16. Size Standard Job Queue

일반 Job Queue 크기이다.

Read/Write 요청 등 일반 작업을 최대 20개까지 대기 가능하다.

Queue가 부족하면 Busy 상태 또는 요청 실패가 발생할 수 있다.

 

17. Disable Lowpower State

Low Power 상태 비활성화 여부이다.

 

false이면 저전력 상태와 연계된 동작을 허용하는 구조로 볼 수 있다.

전력 관리 정책과 관련된 옵션이다.

 

18. Version Info Api

NvM 버전 정보를 읽는 API 사용 여부이다.

예:

NvM_GetVersionInfo();

 

디버깅, BSW 버전 관리, 테스트 시 사용할 수 있다.

 

19. Read All Order Support

ReadAll() 수행 순서를 별도로 제어하는 기능이다.

특정 Block을 먼저 읽어야 하는 요구사항이 있을 때 사용된다.

 

20. Write All Order Support

WriteAll() 저장 순서를 별도로 제어하는 기능이다.

예를 들어 중요한 데이터를 먼저 저장하도록 설계할 수 있다.

 

21. DefaultROMCRCEnabled

ROM Default 데이터에도 CRC를 적용할지 여부이다.

 

false이면 기본값 데이터 자체에는 CRC 검사를 하지 않는 구조이다.

대부분 프로젝트에서는 운영 데이터 CRC가 우선이며, ROM Default CRC는 선택적으로 사용된다.

 

22. User Wdg Toggle Function

NvM 작업 중 Watchdog Toggle용 사용자 함수 연결 항목이다.

긴 작업 수행 중 Watchdog Reset 방지를 위해 사용할 수 있다.

 

23. Mainfunction Trigger Ref

NvM_MainFunction() 을 어떤 OS 이벤트가 주기적으로 호출하는지 연결한 설정이다.

 

즉, 현재 위 설정 이미지에서는

OsAlarm_BSW_Mem_Process Alarm이 5ms 주기로 NvM 처리를 트리거한다고 이해하면 된다.

 

이 항목은 OS와 NvM이 실제로 연결되는 매우 중요한 설정이다.

 

24. User Include Files

사용자 헤더 파일 추가 영역이다.

Callback 함수 선언, 외부 타입 정의 등 NvM 생성 코드에서 필요한 사용자 헤더를 포함할 때 사용한다.

 

25. User Job Function

사용자 정의 Job 함수 등록 영역이다.

특수 처리 로직이나 사용자 확장 기능이 필요할 때 연결할 수 있다.

 

일반 프로젝트에서는 사용하지 않는 경우도 많다.

 

 

작성하다 보니 항목 수가 많아 복잡하게 느껴질 수 있다.

하지만 실제로는 모든 옵션을 매번 직접 사용하는 것은 아니다. 프로젝트에 따라 반드시 보는 항목이 있고, 기본값으로 유지하는 항목도 있으며, 특정 기능을 사용할 때만 의미가 생기는 옵션도 존재한다.

 

핵심만 다시 정리하면 아래와 같다.

운영 정책   : ApiConfigClass, JobPrioritization
성능 관련   : MainFunctionPeriod, QueueSize
오류 검출   : DevErrorDetect
버전 관리   : CompiledConfigId
시스템 연동 : BswM, Trigger Ref
데이터 관리 : SetRamBlockStatus, ReadAll/WriteAll Order
확장 기능   : User Include, User Job Function

 

즉, 이 화면의 모든 옵션을 외울 필요는 없다.

현재 프로젝트에서 어떤 기능을 사용하는지에 따라 중점적으로 봐야 할 설정이 달라진다.

저장 응답 속도가 중요하면 → Queue, MainFunction
안정성이 중요하면 → CRC, Error Detect
부팅/종료 연동이 중요하면 → BswM, ReadAll, WriteAll
유지보수가 중요하면 → Config ID, User Function

 

결국 NvM Common 설정 화면은 단순 옵션 목록이 아니라,

프로젝트 요구사항에 맞춰 NvM 동작 방식을 결정하는 제어판이라고 이해하면 가장 정확하다.

반응형