Flash와 EEPROM에 설정값 저장하기
전원이 꺼져도 남아야 하는 값은 Flash나 EEPROM에 씁니다. 섹터 지우기, 쓰기 횟수, 전원 차단에 안전한 저장 방법.
Flash의 특성
- 쓰기 전에 지워야 하고, 지우는 단위는 섹터(수 KB~128KB)
- 지우면 모든 비트가 1, 쓰기는 1을 0으로만 바꿈
- 쓰기/지우기 수명 약 1만 회
- 지우는 동안(수십 ms~1초) 같은 뱅크에서 코드 실행이 멈출 수 있음
안전한 저장 패턴
- 전용 섹터 두 개를 링커 스크립트에서 코드 영역 밖으로 뺌
- 데이터에 버전 번호와 CRC를 붙여 저장
- 새 값은 다른 섹터(또는 같은 섹터의 빈 칸)에 쓰고, CRC가 맞는 가장 최신 기록을 읽음
- 섹터가 가득 차면 반대 섹터로 옮기고 이전 섹터를 지움
이렇게 하면 쓰는 도중에 전원이 꺼져도 이전 값이 남고, 마모도 분산됩니다. ST의 EEPROM 에뮬레이션 앱노트가 이 방식입니다.
외부 EEPROM / FRAM
I2C EEPROM은 바이트 단위로 쓰고 수명이 100만 회 수준입니다. FRAM은 수명이 사실상 무제한이고 쓰기가 즉시 끝나서 자주 바뀌는 값(주행 거리, 사용 시간)에 좋습니다.