먼저 알아둘 용어
워치독(watchdog)·갱신 — 워치독은 정해진 시간 안에 정상 진행을 알리는 갱신이 없으면 리셋 등 복구 동작을 일으키는 감시 기능입니다. 갱신 위치가 잘못되면 중요한 작업이 멈춰도 계속 살아 있다고 판단할 수 있습니다.
LSI(Low-Speed Internal)·분주·리로드(reload) — LSI는 일부 MCU(Microcontroller Unit)의 독립 저속 내부 발진기입니다. 분주는 입력 클록(clock)을 나누는 비율이고 리로드는 카운터에 다시 넣는 값입니다. 실제 제한 시간은 이 클록과 카운터 정의에 따라 달라집니다.
리셋(reset) 원인 플래그(flag)·윈도 워치독(window watchdog) — 리셋 원인 플래그는 재시작 이유를 기록하는 상태 비트(bit)입니다. 윈도 워치독은 너무 늦은 갱신뿐 아니라 너무 이른 갱신도 오류로 볼 수 있어 허용 갱신 구간을 지켜야 합니다.

어떤 작업의 진행을 감시할지 정합니다
메인 작업은 멈췄는데 타이머 인터럽트(interrupt)만 계속 실행되는 고장을 생각해 보겠습니다. 인터럽트에서 워치독을 무조건 갱신하면 실제 제어 작업의 정지를 숨길 수 있습니다. 갱신은 필요한 작업의 완료 또는 진행을 반영하도록 설계하고, 시험에서는 메인 작업만 멈춘 조건도 만듭니다.
정상 처리에 걸리는 최대 시간과 허용 복구 시간을 함께 정합니다
제어 입력을 읽고 출력 상태를 갱신하는 일, 통신에 필요한 처리를 마치는 일 등 “정상 진행”의 구체적인 기준을 정합니다. 타이머 인터럽트가 발생했다고 해서 모든 필수 작업이 살아 있다고 보지 않습니다. 필요한 작업이 일정 시간 안에 진행되었을 때 갱신하도록 구성합니다.
정상 운전에서 가장 늦을 수 있는 처리 시간을 조사하고, 허용 복구 시간과 함께 타임아웃(timeout)을 정합니다. 타임아웃이 정상 처리에 걸리는 최대 시간보다 짧으면 오동작이 발생하고, 허용할 수 있는 고장 지속 시간보다 길면 보호 목적을 충족하지 못합니다. 부트로더(bootloader)·초기화·펌웨어(firmware) 갱신과 저전력 모드에서의 워치독 상태도 해당 MCU 문서에 따라 확인합니다.
시험용 펌웨어에서 정상 초기화가 끝난 뒤 메인 작업이 진행되지 않도록 만듭니다. 시험 중 외부 장치에 잘못된 제어 신호가 남지 않도록 출력의 초기 상태도 확인합니다. 타이머 인터럽트는 계속 실행되는데 메인 작업만 멈춘 조건도 유용합니다. 이 조건에서 갱신이 계속된다면 감시 위치가 잘못되었을 수 있습니다.
재시작 후 가능한 이른 시점에 리셋 원인 플래그를 읽고 저장합니다. 읽기·지우기 규칙은 MCU별 문서를 따릅니다. 그 다음 센서(sensor), 통신, 외부 드라이버(driver)가 필요한 상태로 초기화되는지 확인합니다. MCU만 리셋되어도 외부 주변장치의 전원이나 내부 상태가 그대로 남을 수 있습니다. 부팅 문구가 다시 나온 것만으로 전체 시스템이 정상 동작으로 복구됐다고 판단하지 않습니다.
작업의 진행 표시와 리셋을 같은 시간축에서 확인합니다
필수 작업 한 주기가 끝났을 때 시험용 핀에 짧은 펄스를 내보내면 진행 상태를 관찰할 수 있습니다. 이런 주기적인 진행 표시를 하트비트(heartbeat)라고 합니다. 타이머 인터럽트가 무조건 만드는 펄스는 메인 작업이 멈춰도 계속 나올 수 있으므로, 무엇의 진행을 표시하는지 먼저 정합니다.
오실로스코프(oscilloscope)의 한 채널에는 하트비트, 다른 채널에는 실제로 관찰 가능한 리셋 신호를 연결합니다. 채널(channel)은 계측기의 개별 입력입니다. 리셋 신호의 활성 극성과 내부 워치독 리셋이 그 핀으로 출력되는지는 해당 MCU에서 확인해야 합니다. 핀에 표시되지 않는 리셋을 파형이 없다는 이유로 실패라고 판정하지 않습니다.
리셋 에지에 단발 트리거(single trigger)를 설정하고, 사건 이전 기록인 프리트리거(pre-trigger) 구간도 확보합니다. 의도적으로 작업을 멈춘 뒤 마지막 정상 진행, 마지막 워치독 갱신, 리셋, 초기화 완료의 시점을 구분합니다. 하트비트와 갱신이 서로 다른 코드 위치에 있다면 두 시각을 같은 것으로 계산하지 않습니다. 재부팅 뒤 저장한 원인 플래그와 대조하면 전원 강하와 워치독 만료를 혼동할 가능성을 줄일 수 있습니다.
디버거(debugger)는 프로그램을 정지시키거나 실행 상태를 조사하는 도구입니다. 디버거로 프로그램을 멈출 때 워치독도 일시 정지하도록 설정되어 있다면 정상 운전과 다른 시험이 됩니다. 디버거 연결 상태와 관련 설정을 기록하고 실제 운전 조건에서도 확인합니다.
명목 시간도 직접 계산해 확인합니다
설명용으로 분주가 64이고 카운트 수가 약 1250, LSI가 32 kHz이면 시간 규모는 64×1250/32000=2.5초입니다. 약 1초라고 가정해 설계하면 복구 시간 요구를 어길 수 있습니다. 리로드 값에 1을 더하는지 등의 정확한 카운터 정의와 실제 LSI 주파수 범위를 적용해 최소·최대 시간을 구합니다.
내부 RC(Resistor-Capacitor) 발진기는 표시 주파수에 오차가 있으므로 정밀한 시간 기준으로 취급하지 않습니다. 온도·전압 등에 따른 허용 오차를 포함하고, 저전력 모드·디버거 연결·부트로더에서 카운터가 어떻게 동작하는지 확인합니다. 윈도 워치독이라면 갱신 가능한 최소·최대 시간 구간을 함께 만족해야 합니다.
시험을 통과했다고 말할 수 있는 범위
| 시험 | 확인할 결과 |
|---|---|
| 정상 최악 부하 | 불필요한 리셋 없이 필요한 작업이 완료됨 |
| 메인 작업 정지 | 갱신이 멈추고 허용 시간 안에 리셋됨 |
| 인터럽트만 계속 실행 | 메인 작업 정지를 숨기지 않음 |
| 리셋 직후 | 원인 기록과 외부 장치 초기화가 확인됨 |
| 반복 고장 | 부팅 반복을 감지하고 원인 기록이 남음 |
전원 강하로 인한 리셋은 워치독 타임아웃과 구분합니다. 같은 사건의 전원 파형과 리셋 원인 기록을 대조하고, 손상된 전원·접속은 별도로 수정합니다. 필요한 작업이 멈추었을 때 감시가 실제 복구로 이어지고 외부 장치까지 의도한 상태로 돌아오는지가 완료 기준입니다.
리셋 뒤 같은 불량 이미지를 계속 고르지 않는지 확인합니다
업데이트한 앱의 CRC(Cyclic Redundancy Check, 순환 중복 검사)가 맞고 부트로더가 앱으로 분기했어도, 필수 제어 작업이 곧 멈출 수 있습니다. CRC는 데이터 오류를 검출하는 검사이며 앱의 정상 실행이나 출처 인증을 증명하지 않습니다. MCUboot의 이미지 검사도 해시 대조와 서명 검증을 다룹니다. 저장된 이미지 검사, 실행 중 작업 진행, 새 버전의 성공 확정은 각각 따로 판단해 기록합니다.
이전의 검증된 이미지, 시험 중인 후보 이미지, 남은 시도 횟수 또는 미확정 상태, 복구 진입 조건을 구분합니다. 필요한 시도 상태를 후보 실행 전에 내구성 있게 남기도록 설계하고, 전원 중단 뒤 실제로 그 상태가 유지되는지 시험합니다. Barebox Bootchooser 분석처럼 저장 함수를 호출했다고 해서 저장에 성공한 것은 아닙니다. 대상 버전의 저장 오류 처리·백엔드·재시도 정책을 확인해야 하며, 남은 횟수가 줄었다는 메모리 상태만으로 재부팅 후의 선택을 보장하지 않습니다.
Barebox의 성공 표시는 부팅된 시스템이 건강하다고 판단한 뒤 남은 시도 횟수를 명시적으로 복원하는 방식입니다. MCUboot의 test upgrade는 되돌리기를 지원하는 구성에서 새 이미지를 시험하고, 확정하지 않으면 다음 부팅 때 이전 이미지로 되돌리는 모델입니다. 둘을 같은 “세 번 재시도” 규칙으로 설명하지 않습니다. Zephyr FOTA 문서가 구분하듯 overwrite-only 모드에서는 이전 이미지가 덮어써져 같은 되돌리기를 기대할 수 없습니다.
Zephyr의 boot_write_img_confirmed()는 실행 중인 이미지를 확정하려고 시도하며, 성공은 0, 실패는 음수 오류로 반환합니다. 함수 호출 자체를 성공으로 기록하지 않습니다. 스케줄러가 시작됐다는 이유만으로 확정하지 말고, 제품이 정한 필수 통신·제어 작업·자기 진단의 준비 조건이 충족됐는지 판단한 뒤 결과를 확인합니다. 준비 조건과 허용 시간은 제품 요구로 정하며 여기서 임의 값을 제시하지 않습니다.
- 검사를 통과한 앱이 멈춤: 시험 이미지의 초기화 또는 필수 작업을 멈춰 워치독 리셋을 유도하고, 재부팅 뒤 미확정·시도 상태와 이전 이미지 또는 복구 경로 선택을 확인합니다.
- 상태 기록 중 전원 중단: 시험 장치에서 시도 횟수·확정 상태를 갱신하는 경계별로 전원 중단을 시험하고, 부분 기록 때문에 같은 후보를 무한히 고르거나 양쪽 이미지가 모두 선택 불가가 되지 않는지 확인합니다.
- 성공 판정이 너무 이른 경우: 필수 작업이 준비되지 않은 상태에서 확정되지 않는지 시험합니다. 리셋 원인 플래그만으로 성공·실패를 결정하지 말고 전원 중단·수동 리셋·워치독 만료와 저장 오류를 구분합니다.
이전 이미지도 무효하거나 보안 롤백 정책상 허용되지 않으면 단순 A/B 전환 대신 별도 복구 경로가 필요합니다. 위 항목은 검증 계획이며 특정 ECU의 구현·전원 차단 시험·기능 안전 인증을 완료했다는 뜻이 아닙니다.
English summary. Image integrity, runtime progress and candidate-image confirmation are separate contracts. Verify persistent attempt/confirmation state across resets, check confirmation errors and use rollback only in a mode that preserves a permitted recovery image. These are test requirements, not measured ECU results.