강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

최강휴님의 프로필 이미지
최강휴

작성한 질문수

PCB HW설계 실무 : STM32를 활용한 Mixed-signal 보드 설계 프로젝트

섹션4 BOOT0 핀 설정

해결된 질문

작성

·

23

0

BOOT0핀을 왜 그라운드와 바로 연결하지 않고 100K를 달았는지 궁금합니다.

답변 2

0

안녕하세요, 답변 남겨드립니다.

BOOT0 핀을 GND에 바로 쇼트시키지 않고 100 kΩ 저항을 거쳐서 GND로 당겨 주는 데에는 실무적인 이유가 있습니다. 한 줄로 요약하면, “기본값은 항상 0으로 두되, 나중에 필요하면 강제로 1로 올릴 수 있도록 여지를 남겨두기 위해서”라고 보시면 됩니다. 이 강의에서 사용하는 STM32F103 보드도 동일한 개념을 따르고 있습니다.

먼저 BOOT0의 역할을 다시 짚어보면, 리셋 시점에 BOOT0 레벨에 따라 다음과 같이 부트 경로가 결정됩니다.
BOOT0 = 0 → 사용자 Flash에서 부트
BOOT0 = 1 → 시스템 메모리(ROM 부트로더) 또는 SRAM 부트 (옵션에 따라)

양산 보드는 대부분 “항상 Flash에서 부트”가 기본이기 때문에, BOOT0를 0으로 묶어 두는 게 맞습니다. 여기서 선택지가 두 가지입니다.

  1. BOOT0를 GND에 직접 접지

  2. BOOT0를 저항을 통해 GND로 풀다운

1번처럼 GND에 직접 연결해 버리면 회로는 단순해지지만, 나중에 BOOT0를 1로 만들 수 있는 방법이 사실상 없어집니다. 예를 들어 펌웨어가 망가져서 부팅이 안 되거나, 사용자가 플래시를 잠가 버려 SWD가 정상 동작하지 않는 상황에서, ROM 부트로더(USART, USB DFU 등)를 이용해서 다시 살리고 싶을 때가 있습니다. 이때 BOOT0를 1로 강제로 올릴 수 있어야 ROM 부트로더로 진입이 가능한데, 핀이 GND에 직접 쇼트되어 있으면 외부에서 3.3 V를 물리는 순간 VDD와 GND를 직결시키는 꼴이 되어 버립니다. 심하면 보드가 타거나 보호회로가 동작합니다.

반대로 2번처럼 100 kΩ을 거쳐서 GND에 연결하면, “기본 상태에서는 논리 0으로 확실하게 잡혀 있으면서도, 필요할 때는 외부에서 고레벨을 인가해서 모드를 바꿀 수 있는” 구조가 됩니다. 예를 들면 다음과 같은 방식이 가능합니다.

개발 초기에만 사용하는 2.54 mm 핀헤더를 BOOT0 핀과 3.3 V 사이에 하나 빼 두고, 점퍼를 꽂으면 3.3 V로 강제 High, 점퍼를 빼면 100 kΩ을 통해 GND로 Low 유지.
ICT(테스트 장비)나 JTAG/Serial 프로그래머에서 BOOT0 테스트 패드를 집게로 물고, 테스트 시에만 High로 강제.

이때 전류를 정량적으로 보면, 외부에서 BOOT0를 3.3 V로 직접 구동하고, 보드 쪽에는 100 kΩ 풀다운만 걸려 있다고 가정하면, 저항을 통해 흐르는 전류는
I = V / R = 3.3 V / 100 kΩ ≒ 33 µA
정도로 아주 작습니다. 외부 드라이버 입장에서는 33 µA 정도만 더 내면 되고, 보드 전력 소모도 사실상 무시 가능한 수준입니다. 만약 풀다운을 10 kΩ으로 설계했다면 I = 3.3 / 10 kΩ = 330 µA가 되는데, 이것도 절대값으로는 작지만, 저전력 시스템에서는 불필요한 누설 전류를 줄이기 위해 100 kΩ 수준으로 올리는 경우가 많습니다.

“그러면 왜 아예 내부 Pull-down만 믿고 외부 저항도 안 달면 안 되나요?”라는 질문도 많이 나오는데, STM32F1의 BOOT0는 리셋 시점 부트모드 결정에 매우 중요해서, 데이터시트/앱노트에서도 외부에서 확실한 레벨을 잡아 주는 것을 권장합니다. 전원 인가 순간의 노이즈, 주변 신호에 의한 커플링 등을 고려하면, 고정값이 필요한 핀은 외부 풀업/풀다운으로 확정해 두는 것이 안전합니다.

현업 보드에서 자주 쓰는 패턴을 예로 들면 다음과 같습니다.

양산 제품: BOOT0 – 100 kΩ – GND, 그리고 패널이나 내부에 숨겨진 Test Pad를 BOOT0 핀에 하나 빼 둠. 양산 단계에서는 항상 0으로 동작하지만, RMA(고장 분석)나 펌웨어 복구 시에는 엔지니어가 그 패드를 집게로 찝어서 High로 만들어 ROM 부트로더 진입.
개발 보드: BOOT0 – 100 kΩ – GND, 그리고 점퍼 셀렉터 [GND – BOOT0 – VDD] 구조. 사용자가 점퍼 위치를 바꿔서 수 초 안에 부트 모드를 바꿀 수 있도록 설계. STM32 Nucleo/Discovery 보드들이 거의 이 패턴을 따릅니다.

또 하나의 실무적인 이유는 “핀 재사용 가능성”입니다. 일부 STM32 라인업에서는 부트핀을 GPIO로 재활용하기도 하는데, 이 경우에도 저항을 통해 기본값만 정해 주고, 실제 동작 중에는 GPIO로 사용하면서도, 리셋 시에는 원하는 부트모드가 유지되도록 설계하는 패턴이 많이 쓰입니다. BOOT0가 완전 전용 핀인 경우에도, 나중에 동일 보드를 다른 MCU나 다른 리비전으로 교체할 때 이런 유연성이 도움이 됩니다.

정리하면, BOOT0를 GND에 바로 연결해도 동작 자체에는 문제가 없지만,
펌웨어 복구 및 ROM 부트로더 진입 경로 확보
개발·양산 테스트에서 부트모드 강제 설정
전원/드라이버 충돌 없이 외부에서 High를 인가할 수 있는 안전한 회로 구성
저전력 관점에서 누설 전류를 제한하면서도 안정적인 기본값 확보
이 네 가지 관점 때문에, 현업에서는 100 kΩ 정도의 풀다운 저항을 두고 GND에 연결하는 방식을 많이 사용합니다.

0

안녕하세요, 인프런 AI 인턴입니다. 최강휴님, 질문해 주셔서 감사합니다. BOOT0 핀 설정에 대해 궁금하신 점을 설명드리겠습니다.

BOOT0 핀의 역할 및 설정 이유

  1. BOOT0 핀의 기능:

    • STM32 MCU 시리즈에서 BOOT0 핀은 마이크로컨트롤러의 부트 모드를 결정하는 데 사용됩니다. BOOT0 값은 브릿지 모드, 시스템 메모리 모드, SRAM 모드를 결정하며, 각 모드는 MCU가 어떻게 부팅할 것인지 설정하게 됩니다.
  2. 저항을 추가하는 이유:

    • BOOT0 핀을 단순히 GND와 직접 연결하지 않고 100K 저항을 추가로 연결하는 것은 두 가지 주요 이유가 있습니다:
      • 유연성: 저항을 추가하면 하드웨어 디버깅이나 다양한 부트 모드로의 변경이 필요할 때 보다 쉽게 변경 가능합니다. 저항을 통해 BOOT0 핀 상태를 간편히 설정할 수 있습니다.
      • 레벨 풀다운(Floating 방지): BOOT0 핀이 floating 될 경우 불안정한 동작을 유발할 수 있으므로, 저항을 통해 제대로 GND에 풀다운하여 안정적으로 수준을 결정하는 역할을 합니다.

이와 같은 설정은 설계자에게 보다 안정적이고 유연한 개발 환경을 제공하며, 회로의 신뢰성을 높여줍니다. 실제 설계에서는 보드의 초기 부트 환경에 따라, 사용자가 원하는 모드가 언제든지 쉽고 안전하게 설정될 수 있도록 하는 것이 중요합니다.

관련하여 유사한 주제에 대해 다룬 게시글을 참고하시면 더 많은 정보를 얻으실 수 있습니다:
- STM32의 BOOT 핀 설정과 관련된 질문 - BOOT 핀 및 디커플링 관련 사례입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

최강휴님의 프로필 이미지
최강휴

작성한 질문수

질문하기