본문 바로가기
mobilgene/NvM

[NvM] NvM Block 설정 방법 (RAM Block / CRC / Redundant / ReadAll / WriteAll 완전 이해)

by Autosar 2026. 4. 24.
반응형

이전 글에서는 NvM 설정 구조와 NvM Common 주요 항목을 정리했다.

Common 설정이 NvM 모듈 전체 동작 방식을 결정하는 영역이었다면,

이번에는 실제 저장 데이터를 정의하는 NvM Block 설정을 이해할 차례이다.

 

실무에서 NvM 설정의 핵심은 결국 Block이다.

차량 프로젝트에서 저장해야 하는 데이터는 모두 Block 단위로 관리되기 때문이다.

 

예를 들면 아래와 같은 데이터가 있다.

- 사용자 설정값

- 학습 데이터

- 누적 카운터

- 진단 관련 정보

- 캘리브레이션 값

 

이 데이터들은 각각 하나 이상의 Block으로 설계된다.

 

즉, Common이 시스템 전체 정책이라면, Block은 실제 데이터를 저장하는 실행 단위 설정 영역이다.

 

1. NvM Block이란 무엇인가?

 

NvM에서 Block은 저장 대상 데이터 1개 단위라고 이해하면 된다.

 

예:

Block 1 = UserSetting
Block 2 = MotorLearning
Block 3 = PowerCounter
Block 4 = FactoryData

 

Application은 Block ID를 기준으로 데이터를 읽고 저장한다.

NvM_ReadBlock(BlockId, Ptr);
NvM_WriteBlock(BlockId, Ptr);

 

즉, NvM은 사전에 정의된 Block 단위 저장 구조로 동작한다.

 

2. NvM Block 주요 구조

 

일반적으로 Block 설정은 아래 개념으로 나뉜다.

Block
├─ 식별 정보
├─ RAM Block
├─ ROM Default
├─ 데이터 크기
├─ CRC
├─ 저장 정책
├─ 보호 기능
└─ Callback

 

툴마다 세부 이름은 조금씩 다를 수 있지만 핵심 구조는 동일하다.

 

3. Block 주요 항목 설정

 

아래 내용은 Mobilgene의 NvMBlockDescriptor 실제 설정 항목 기준으로 설명한다.

모든 옵션을 암기할 필요는 없고, 각 항목이 시스템 동작에 어떤 영향을 주는지 이해하는 것이 중요하다.

 

1. Short Name

Block 이름이다.

예시로 본인은 아래와 같이 설정했다.

NvMBlock_SWC_ABS

 

툴 내부 식별자이며 Generate 후 코드, 설정 파일, 참조 경로 등에 사용된다.

 

데이터 의미가 드러나도록 작성하는 것이 유지보수에 유리하다.

 

2. Block Crc Type

해당 Block에 적용할 CRC 알고리즘 종류이다.

 

데이터 크기, 중요도, 프로젝트 규칙에 따라 선택한다.

 

3. Block Job Priority

해당 Block Job의 우선순위이다.

 

동시에 여러 요청이 들어왔을 때 어떤 Job을 먼저 처리할지 결정하는 요소이다.

우선순위 숫자의 해석(작을수록 우선 / 클수록 우선)은 프로젝트 구현 기준을 확인해야 한다.

 

4. Block Management Type

Block 저장 구조 타입이다.

 

Redundant 는 동일 데이터를 두 영역에 저장하여 안정성을 높이는 구조이다.

한쪽 데이터가 손상되어도 다른 데이터를 사용할 수 있다.

 

5. Block Use Auto Validation

읽은 Block 데이터를 자동으로 Valid 상태 처리할지 여부이다.

 

6. Block Use Crc

이 Block에 CRC를 사용할지 여부이다.

true로 활성화 시 '저장 시 CRC 기록하고, 읽기 시 CRC 검증'을 한다는 의미다.

 

7. BlockUseCRCCompMechanism

CRC 비교 기반 최적화 기능이다.

데이터 변경 여부를 CRC로 판단하여 불필요한 Write를 줄이는 구조에 사용될 수 있다.

 

8. Block Use Set Ram Block Status

NvM_SetRamBlockStatus() API 사용 여부이다.

활성화하면 RAM 데이터 변경 여부를 Application이 직접 알려줄 수 있다.

 

9. Block Use Sync Mechanism

동기화 메커니즘 사용 여부이다.

Application 데이터와 NvM 내부 처리 간 일관성이 중요한 경우 사용된다.
일반 Block에서는 비활성화되는 경우가 많다.

 

10. Block Write Prot

쓰기 보호 기능이다.

활성화 시 일반 Write 요청으로 수정되지 않도록 제한할 수 있다.

 

11. BswM Block Status Information

개별 Block 상태를 BswM에 전달할지 여부이다.

 

12. Calc Ram Block Crc

RAM Block 데이터에 대해서도 CRC 계산을 수행할지 여부이다.

RAM 데이터 비교, 무결성 확인, 변경 판단 등에 활용될 수 있다.

 

13. Max Num Of Read Retries

Read 실패 시 재시도 횟수이다.

0이면 실패 즉시 오류 처리한다.

 

14. Max Num Of Write Retries

Write 실패 시 최대 몇 회 재시도를 할지 설정한다.

일시적 Flash 쓰기 실패 상황 대응에 유용하다.

 

15. Nv Block Base Number

하위 메모리 계층에서 사용하는 Block 번호 기준값(1부터~)이다.

메모리 맵 또는 물리 저장 번호 체계와 연결된다.

 

16. Nv Block Length

실제 저장 데이터 길이(Byte)이다.

RAM 구조체 크기와 일치해야 한다.

불일치 시 일부 데이터 누락, CRC 오류, 데이터 손상 등이 발생할 수 있다.

 

17. Nv Block Num

실제 물리 NVRAM Block 개수이다.

Redundant 구조에서는 동일 데이터를 2개 영역에 저장하므로 2로 설정될 수 있다.

 

18. Nvram Block Identifier

하위 메모리 장치에서 사용하는 실제 식별 번호이다.

16번 Nv Block Length 와 동일하게 설정하면 식별하기 쉽다.


19. Nvram Device Id
어떤 메모리 장치를 사용할지 나타낸다.

예:

0 = Internal Flash
1 = External EEPROM

 

프로젝트마다 다르게 정의된다.

 

20. Ram Block Data Address

RAM 변수 주소이다.

 

예시로 본인은 아래와 같이 설정했다.

&m_SWC_ABC

 

NvM이 읽고 저장할 실제 Application 데이터 버퍼이다.

가장 중요한 설정 중 하나이며, 주소가 잘못되면 정상 동작하지 않는다.

 

21. Resistant To Changed Sw

소프트웨어 변경 후 기존 데이터를 계속 사용할지에 대한 정책이다.

구조체 변경, 버전 변경, 호환성 유지 전략과 관련된다.

 

22. Rom Block Num

ROM Default Block 개수이다.

0이면 별도 ROM 기본값 Block을 사용하지 않는 구조이다.

 

23. Select Block For First Init All

최초 전체 초기화 작업 시 이 Block을 포함할지 여부이다.

공장 초기화 대상 데이터에 주로 사용된다.

 

24. Select Block For Read All

NvM_ReadAll() 대상 Block이다.

부팅 시 자동으로 읽혀 RAM 데이터가 복구된다.

실무에서 매우 중요한 옵션이다.

 

25. Select Block For Write All

NvM_WriteAll() 대상 Block이다.

종료 시점 또는 전체 저장 시 함께 기록된다.

 

26. Single Block Callback

해당 Block 작업 완료 후 호출되는 Callback 함수이다.

예시로 본인은 아래와 같이 설정했다.

Rte_Call_NvM_NvMBlock_SWC_ABS_JobFinished

 

저장 완료 알림, 오류 처리, 후속 동작 실행 등이 필요할 경우 사용한다.


27. Static Block ID Check

Block ID 설정 불일치나 잘못된 매핑을 검증하는 안전 기능이다.

 

28. Write Block Once

최초 1회만 쓰기 허용하는 기능이다.

 

29. Write Verification

쓰기 완료 후 다시 읽어서 정상 저장 여부를 검증하는 기능이다.

안정성은 높아지지만 처리 시간은 증가한다.

 

30. Write Verification Data Size

Write Verification 시 검사할 데이터 길이(Byte)이다.

 

31. DefaultROMCRCEnabled

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

현재는 기본값 데이터 자체에는 CRC를 사용하지 않는 설정이다.

 

4. NvMTargetBlockReference 설정

 

NvMTargetBlockReference 는 Block 데이터를 어느 하위 저장 드라이버에 연결할지 지정하는 설정이다.

 

NvM Block이 실제로 저장될 하위 메모리 서비스를 지정하는 참조(Reference) 설정이다.

 

NvM Block이 실제로 저장될 하위 메모리 서비스(Ea / Fee)를 참조하는 항목이며,

실제 저장 경로를 결정하는 중요한 설정값이다.

 

즉 단순 옵션 선택이 아니라, 생성한 NvM Block 데이터를 어느 저장 계층으로 보낼지 연결하는 Reference 정보라고 보면 된다.

 

NvM은 직접 Flash / EEPROM을 제어하지 않고 아래 계층을 통해 저장한다.

Application
     ↓
  NvM
     ↓
 MemIf
     ↓
Ea or Fee
     ↓
Memory Driver

 

따라서 NvMTargetBlockReference 는 Block 설정에서 반드시 확인해야 하는 항목이다.

 

1. Ea Ref

EA (EEPROM Abstraction) 를 사용하는 방식이며, 해당 경로를 참조 설정한다.

주로 External EEPROM, Dedicated EEPROM Device 같은 구조에서 사용된다.

 

2. Fee Ref

FEE (Flash EEPROM Emulation) 를 사용하는 방식이며, 해당 경로를 참조 설정한다.

내부 Flash 영역을 EEPROM처럼 가상으로 사용하는 구조다.

자동차 ECU에서 가장 많이 사용하는 방식 중 하나이다.

 

5. Calculate Memory Blocks (Fee Block 생성 과정)

 

이 부분이 실제 툴 사용에서 매우 중요하다.
Fee Ref 는 사용자가 직접 이름을 입력하는 방식이 아니라, 메모리 블록 계산 후 자동 생성되는 경우가 많다.

 

NvM Overview 탭에서 Configure Memory Blocks 에 위치한 Edit Memory Blocks 를 클릭하면 아래와 같은 팝업창이 뜬다.

 

상단에 아래와 같은 메시지를 볼 수 있다.

NvMBlock_SWC_ABS : Memory Block does not exist Calculate Memory Blocks.

 

현재 NvM Block은 생성되었지만, Fee 계층에서 사용할 실제 Memory Block이 아직 생성되지 않았다는 뜻이다.

 

이 경우 상단의 Calculate Memory Blocks 를 실행해야 한다.

실행 후 해당 NvM Block에 대한 Fee Memory Block이 자동 생성되며,

NvMTargetBlockReference 의 Fee Ref 도 함께 연결된다.

 

즉, NvM Block 생성 후에는 메모리 블록 계산 단계까지 완료해야 실제 저장 구조가 완성된다.

 

실무 판단 기준

외부 EEPROM 사용 ECU   → Ea Ref
내부 Flash 사용 ECU    → Fee Ref

 

프로젝트 메모리 아키텍처에 따라 결정된다.

 

아무튼 여기까지 했다면 NvMTargetBlockReference 가 자동으로 잘 적용되었는지 확인한다.

6. 하모나이즈 수행 후 Generate

 

모든 설정이 완료되면 먼저 Harmonize를 수행하여 설정 간 연결 상태를 정리한다.

이후 Generate를 수행한다.

 

Generated 를 수행하면 Error 가 발생할 것이다.

왜 Error 가 발생했는지? 어떻게 해결하면 되는지는 이전 블로그에 설명을 했기에.. 따로 기술하진 않겠다.

(이전 블로그 글 참고: https://jjongday.tistory.com/107)

 

정리

 

NvM Common 설정이 시스템 전체 운영 전략이라면,

Block 설정은 실제 데이터를 어떻게 저장하고, 복구하고, 보호할지를 결정하는 핵심 작업이다.

즉, NvM 실무의 중심은 결국 Block 설계 능력에 있다.

 

NvMTargetBlockReference 는  Block 데이터를 어디에 저장할지 지정하는 설정하는 곳이다.

Fee Ref가 안 보이면? → Calculate Memory Blocks 수행 여부를 확인하자.

반응형