그라운드 임베디드 유튜브 구독

노트 / MCU 펌웨어

Flash와 EEPROM에 설정값 저장하기

전원이 꺼져도 남아야 하는 값은 Flash나 EEPROM에 씁니다. 섹터 지우기, 쓰기 횟수, 전원 차단에 안전한 저장 방법.

GROUND EMBEDDED · 정리 노트펌웨어 11Flash와 EEPROM 쓰기01Flash의 특성02안전한 저장패턴03외부 EEPROM/ FRAM

Flash의 특성

  • 쓰기 전에 지워야 하고, 지우는 단위는 섹터(수 KB~128KB)
  • 지우면 모든 비트가 1, 쓰기는 1을 0으로만 바꿈
  • 쓰기/지우기 수명 약 1만 회
  • 지우는 동안(수십 ms~1초) 같은 뱅크에서 코드 실행이 멈출 수 있음

안전한 저장 패턴

  1. 전용 섹터 두 개를 링커 스크립트에서 코드 영역 밖으로 뺌
  2. 데이터에 버전 번호와 CRC를 붙여 저장
  3. 새 값은 다른 섹터(또는 같은 섹터의 빈 칸)에 쓰고, CRC가 맞는 가장 최신 기록을 읽음
  4. 섹터가 가득 차면 반대 섹터로 옮기고 이전 섹터를 지움

이렇게 하면 쓰는 도중에 전원이 꺼져도 이전 값이 남고, 마모도 분산됩니다. ST의 EEPROM 에뮬레이션 앱노트가 이 방식입니다.

외부 EEPROM / FRAM

I2C EEPROM은 바이트 단위로 쓰고 수명이 100만 회 수준입니다. FRAM은 수명이 사실상 무제한이고 쓰기가 즉시 끝나서 자주 바뀌는 값(주행 거리, 사용 시간)에 좋습니다.