OTA 업데이트 설계: 정상 확인과 롤백
다운로드 완료가 업데이트 성공은 아닙니다. 새 펌웨어의 정상 확인, 이전 버전 복구, 설정 호환성과 현장 시험 기준을 정리합니다.
컴퓨터공학
설정을 저장하는 순간 전원이 꺼지면 무엇을 복구해야 할까요? 저장 완료의 의미, 설정 묶음의 일관성, 이전 정상값 보존과 전원 차단 시험으로 임베디드 제품의 데이터 복구 정책을 설계합니다.
현장에서 통신 주소나 센서 보정값을 바꾼 직후 전원이 꺼졌다고 가정해 봅시다. 다시 켜졌을 때 이전 설정으로 돌아오는 것은 정책에 따라 허용할 수 있지만, 주소는 새 값이고 보정 계수는 옛 값인 상태는 문제가 됩니다. 설계의 출발점은 “플래시에 썼다”가 아니라 어떤 설정 묶음을 언제 저장 완료로 인정할 것인가입니다.
제품 요구사항에는 저장 대상과 복구 기준을 함께 적어야 합니다. 사용자가 확정한 통신 설정은 마지막 저장 완료값을 유지하고, 계속 증가하는 운전 시간은 합의된 구간만큼 손실을 허용할 수 있습니다. 공장 보정값은 일반 설정 초기화와 분리하는 편이 관리에 유리합니다. 이 구분은 저장 빈도와 메모리 선택에도 영향을 줍니다.
예를 들어 화면의 “적용”은 RAM의 동작값 변경이고 “저장”은 재부팅 후에도 사용할 값의 확정일 수 있습니다. 두 기능이 다르다면 UI와 통신 응답도 구분합니다. 저장 API 오류를 무시한 채 성공 응답을 보내면 사용자는 실제로 보존되지 않은 설정을 믿게 됩니다.
ST의 AN4894는 지원 STM32에서 내부 플래시를 EEPROM처럼 사용하는 방법을 설명합니다. 최소 두 플래시 페이지를 활용하고, 유효 데이터를 다른 페이지 집합으로 옮긴 뒤 이전 영역을 지우는 방식과 마모 분산을 제공합니다. 적용 대상과 페이지·프로그램 단위는 MCU별로 확인해야 합니다. 모든 STM32에 같은 설정을 복사할 수 있는 것은 아닙니다. ST AN4894 공식 문서
Espressif NVS는 작은 설정값을 키·값 형태로 저장하기 위한 계층입니다. 공식 문서는 전원 차단 시 복구를 고려하지만, 차단 순간 기록 중이던 새 값은 잃을 수 있다고 설명합니다. 따라서 저장 계층의 복구 기능과 별개로 제품이 요구하는 설정 묶음의 유효성을 정의해야 합니다. ESP-IDF NVS 공식 문서
다음은 특정 라이브러리의 내부 구현이 아닌, 제품 요구사항을 정리하기 위한 설계 예시입니다. 센서 종류·측정 범위·보정 계수를 하나의 설정 레코드로 묶고 형식 버전, 길이, 세대 번호, 무결성 검사값을 함께 둡니다. CRC는 우발적 손상 검출에 도움이 되지만, 값의 의미가 올바르거나 악의적 변조가 없음을 보장하지는 않습니다. 허용 범위와 필드 간 관계도 검사해야 합니다.
사용자 입력의 범위와 조합을 검증합니다.
현재 정상 레코드를 보존한 상태에서 새 후보 레코드를 기록합니다.
저장 계층이 요구하는 commit 절차와 오류 처리를 수행하고, 제품 요구에 맞게 읽기 검증을 합니다.
새 레코드의 완전성과 유효성을 확인한 뒤 완료 상태로 인정합니다.
재부팅 시 완료된 유효 레코드 중 최신 세대를 선택합니다. 후보가 불완전하면 이전 정상 세대로 복구합니다.
원시 플래시로 직접 구현한다면 두 복사본이 같은 지우기 단위에 있어 함께 사라지지 않는지, 완료 표시가 쓰기·ECC 단위 규칙을 지키는지 확인해야 합니다. 완료 표시 자체가 중간에 끊기는 경우와 세대 번호 순환도 설계 대상입니다. 두 슬롯이나 CRC만 추가했다고 원자성이 확보되었다고 판단하면 안 됩니다.
변화가 없는 값을 주기적으로 다시 쓰지 않고, 연속 변경을 묶어 저장하면 불필요한 쓰기를 줄일 수 있습니다. 대신 묶어 두는 시간 동안 전원이 꺼질 때 얼마만큼의 변경을 잃어도 되는지 명시합니다. 운전 로그와 사용자 설정은 갱신 특성이 다르므로 같은 저장 정책을 강요하지 않습니다.
전원 저하 감지는 새 쓰기를 막거나 안전한 정지 상태로 전환하는 데 활용할 수 있습니다. 하지만 “전원이 꺼질 때 모두 저장”하려면 감지 지연, 남은 전력, 최악의 지우기·쓰기 시간을 실제 회로에서 확인해야 합니다. 큰 커패시터를 추가하는 것만으로 충분하다고 가정하지 않습니다. 각 MCU와 메모리의 동작 전압 조건을 벗어난 상태에서 저장을 시도하지 않도록 설계합니다.
시제품 검증에서는 후보 기록 전·중·후, 완료 처리 중, 페이지 정리 중에 전원을 차단하는 시험을 계획합니다. 실제 공급 전압의 하강·재상승 파형도 확인합니다. 단순 소프트웨어 리셋만으로 전원 불안정 상황을 모두 대신할 수는 없습니다.
저장 완료 응답 후 재시작하면 약속한 설정 세대가 복원되는가?
저장 도중 차단하면 이전값 또는 완전한 새 값으로 복구되고, 서로 다른 세대의 값이 섞이지 않는가?
유효한 설정이 없을 때 안전한 기본 상태와 명확한 오류 안내로 진입하는가?
저장 영역 부족·쓰기 실패·이전 펌웨어의 설정 형식에서도 복구 정책이 유지되는가?
초기화 실패를 처리하면서 보정값까지 무조건 지우지 않는가?
시험 기록에는 펌웨어·저장 드라이버 버전, 차단 시점, 재기동 후 선택된 세대, 오류 코드와 출력 상태를 남깁니다. 위 항목은 검증 계획 예시이며 특정 제품의 시험 완료나 성능을 의미하지 않습니다.
저장할 데이터 목록, 허용 가능한 손실 범위, 예상 변경 빈도, 데이터가 유효하지 않을 때의 장비 동작을 먼저 정리하면 하드웨어와 펌웨어의 경계가 명확해집니다. 메모리 부품 선정은 이 복구 정책과 수명 조건을 바탕으로 진행하는 것이 좋습니다.
STMicroelectronics — AN4894, How to use EEPROM emulation on STM32 MCUs (Rev 12, 2026년 7월)
Espressif — ESP-IDF Programming Guide, Non-Volatile Storage Library (2026년 11월 4일 확인, 실제 제품의 ESP-IDF 버전 문서와 대조 필요)
제품과 현장의 조건에 맞는 설계가 필요하다면
나로시스템에 문의하기 ↗