먼저 알아둘 용어
부트 스트랩(bootstrap)·GPIO(General-Purpose Input/Output) — 부트 스트랩은 시작 모드를 정하기 위해 특정 시점에 핀 상태를 읽는 기능입니다. GPIO는 범용 입출력 핀이지만 같은 핀이 시작 순간에는 스트랩 역할을 겸할 수 있습니다.
VIH·VIL — VIH는 HIGH로 보장 인식하는 입력 전압 조건, VIL은 LOW로 보장 인식하는 조건입니다. 두 조건 사이 전압은 확실한 논리 상태로 취급하지 않습니다.
푸시풀(push-pull)·레벨 시프터(level shifter) — 푸시풀 출력은 HIGH와 LOW를 모두 능동 구동합니다. 레벨 시프터는 서로 다른 논리 전압을 연결하는 회로입니다. 두 장치의 전원 순서에 따라 초기 핀 상태가 달라질 수 있습니다.

작동 원리
부트 스트랩(strapping) 핀은 정해진 리셋 시점의 논리 상태를 내부에 저장하고 시작 모드를 결정하는 핀입니다. 나중에 일반 GPIO로 사용할 수 있어도 시작 순간에는 다른 역할을 합니다. 초기화 코드에서 풀업(pull-up)을 켜는 방식은 이미 끝난 샘플링(sampling)을 고치지 못합니다. 내부 풀업이 있다고 해도 외부 출력이나 저항망이 그보다 강하게 당기면 의도와 다른 레벨이 될 수 있습니다.
적용 순서
- 사용하는 칩과 모듈(module)의 정확한 세부 모델에 해당하는 부트 설정 표를 확인합니다. 스트랩 핀, 내부 기본 풀 상태, 선택 결과와 샘플링 조건을 한 표에 적습니다. 같은 ESP32 계열이라도 모델마다 핀 기능이 다를 수 있으므로, 다른 모델의 핀 배정표를 그대로 쓰지 않습니다.
- 각 스트랩에 연결된 모든 외부 부품을 추적합니다. 전원 OFF, 전원 상승, 리셋 유지, 리셋 해제, 정상 동작의 다섯 상태에서 누가 그 핀을 구동하는지 적습니다. 센서(sensor)가 아직 준비되지 않았을 때의 출력과 레벨 시프터의 전원 순서도 포함합니다.
- 리셋 신호와 스트랩 전압을 함께 관찰합니다. 데이터시트(datasheet)가 정한 핀 상태가 미리 안정되어 있어야 하는 설정 시간과 그 상태를 유지해야 하는 유지 시간 안에 VIH 또는 VIL이 충족되는지 봅니다. 리셋이 끝난 한참 뒤 멀티미터(multimeter)로 잰 전압만으로 통과 판정하지 않습니다.
- 외부 회로의 초기 구동을 지연하거나, 적합한 풀 저항을 적용하거나, 가능한 경우 스트랩이 아닌 핀으로 옮깁니다. 두 푸시풀 출력이 서로 반대 전압을 강제로 내보내는 상태를 저항값 조정만으로 해결하려고 하지 않습니다. 수정 뒤 정상 부트·다운로드·디버그 등 필요한 모드를 모두 확인합니다.
계산과 판단 예
설명용으로 3.3 V에 연결된 10 kΩ 풀업과 10 kΩ 풀다운(pull-down)이 함께 있으면 이상적인 정지 전압은 1.65 V입니다. 이 전압이 HIGH 또는 LOW의 보장 조건을 만족하는지 사용 부품의 임계값과 대조해야 합니다. 내부 풀 저항은 공차나 상태 의존성이 있으므로 이 저항값을 공통 설계값으로 쓰지 않습니다.
적용 조건과 한계
부트 실패는 스트랩 외에도 전원·클록(clock)·플래시(flash)·리셋 문제일 수 있습니다. 핀에 커패시터(capacitor)를 추가하면 원하는 상태 도달이 늦어질 수 있습니다. 측정 프로브(probe)의 부하도 원래 상태를 바꿀 수 있으므로 작은 여유에서 특히 주의합니다.
확인과 기록
전원을 충분히 껐다가 켤 때, 짧게 껐다가 다시 켤 때, 수동으로 리셋할 때, 주변장치 전원이 먼저 또는 나중에 켜질 때 모드와 파형을 반복 확인합니다. 결과를 “GPIO 최종값”이 아니라 “샘플링 구간의 핀 상태와 실제 부트 모드”로 기록합니다.