강의

멘토링

커뮤니티

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

HWGOGOGO님의 프로필 이미지
HWGOGOGO

작성한 질문수

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

STM32F103 schematic - Debugging pin 설계

디버거에 대한 질문입니다.

해결된 질문

작성

·

21

0

안녕하세요!

F407의 디버거로 F103을 설계 하였는데, 디버거의 역할이 궁금합니다. 또한 F103 설계 내에도 따로 디버깅 핀을 부여하고 커넥터를 연결하여 활용할 수 있도록 하셨는데 이 커넥터는 어디에 연결되며 어떤기능을 하게 되는지가 궁금합니다.

답변 2

0

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

질문 주신 내용을 하나씩 나눠서 설명드리겠습니다.

먼저 “F407의 디버거로 F103을 설계했다”는 부분은, 강의에서 사용한 STM32F407 보드(NUCLEO, Discovery 혹은 ST-LINK 기능이 포함된 보드)의 디버거 기능을 떼어다가, STM32F103이 달린 여러분의 메인 보드를 디버깅·프로그램하는 용도로 활용한다는 의미입니다. 즉 F407은 실제 제품의 기능을 수행하는 메인 MCU 역할이 아니라, PC F103 사이에서 “USB–SWD/JTAG 디버그 브리지” 역할을 하는 전용 디버거/프로그래머로 동작하게 됩니다. 이런 보드에는 ST-LINK V2/V3가 온보드로 구현되어 있고, USB를 통해 PC와 통신하면서 SWDIO, SWCLK, NRST, GND, VTREF(타겟 전압 인식용) 신호를 F103 쪽으로 보내게 됩니다. 실제로는 SWD 클럭이 수 MHz(예: 1~4 MHz 정도)로 동작하면서, 수십 kB~수백 kB의 펌웨어를 몇 초 이내에 다운로드하고, 그 이후에는 실시간 디버깅(브레이크포인트, 레지스터 읽기/쓰기, 메모리 확인, Run/Stop 제어 등)을 수행합니다.

디버거의 핵심 역할을 정리하면, 첫째, Flash 프로그램 다운로드입니다. F103의 Flash에 펌웨어를 굽는 일을 전담합니다. 예를 들어 128 kB 정도의 펌웨어를 2~5초 이내 수준으로 반복 다운로드 가능하게 해줍니다. 둘째, 디버깅 인터페이스 제공입니다. PC의 IDE(STM32CubeIDE, Keil, IAR 등)에서 C 소스 단위로 Breakpoint를 걸고, 한 줄씩 Step-into/Step-over 하면서 레지스터 값, 메모리 맵(예: 0x2000_xxxx RAM, 0x4001_xxxx Peripheral) 등을 실시간으로 확인할 수 있게 해줍니다. 셋째, Chip 상태 제어입니다. 디버거를 통해 하드웨어 Reset을 걸거나, Low-power 모드에 들어간 이후에도 다시 깨워서 상태를 확인할 수 있어서, 저전력 설계나 Fault 상황(예: HardFault) 분석에 매우 유용합니다. 실무에서도 보드 Bring-up 시 거의 100% 필수로 사용하는 장비가 이 디버거입니다.

두 번째로 질문 주신 “F103 설계 내에 따로 디버깅 핀을 부여하고 커넥터를 연결해 둔 이유”는, 디버거 기능을 특정 보드(F407 보드) 하나에만 의존하지 않고, 표준화된 디버그 포트를 보드에 남겨두기 위해서입니다. 강의의 “STM32F103 schematic – Debugging pin 설계” 파트에서도 별도의 Debug 커넥터(예: 2x5 1.27mm Cortex Debug Connector나 1x6/1x10 2.54mm 핀 헤더)를 배치하는 흐름을 잡습니다.

이 커넥터에는 일반적으로 다음과 같은 신호들이 연결됩니다. 타겟 전원 기준 전압(VTREF, 예: 3.3 V), GND, SWDIO(PA13), SWCLK(PA14), NRST(하드웨어 리셋), 필요시 SWO(Trace 출력) 혹은 추가 UART Tx/Rx 핀 등이 함께 나갈 수 있습니다. 예를 들어 Cortex 10핀 커넥터를 쓴다고 하면, 실제 핀 구성은 다음과 같이 될 수 있습니다: Pin1 VTREF(3.3 V), Pin3 GND, Pin5 SWCLK, Pin7 SWDIO, Pin9 SWO, 나머지 핀들은 NC 또는 Reset, 특정 Vendor 정의 핀으로 사용. 이런 식으로 구성해 두면, 외부에서 ST-LINK V2 독립형 디버거, J-LINK, CMSIS-DAP 디버거, 혹은 양산 라인의 프로그래밍 장비를 그대로 꽂아서 사용할 수 있습니다.

“이 커넥터는 어디에 연결되나요?”라는 질문을 현업 관점에서 답변드리면, 기본적으로는 “외부 디버거/프로그래머”에 연결된다고 보시면 됩니다. 개발 단계에서는 USB가 달린 상용 디버거 박스(예: ST-LINK V2 동글, Segger J-LINK)를 이 커넥터에 꽂고, PC에 연결해서 F103의 펌웨어를 다운로드하거나 디버그를 수행합니다. 예를 들어 개발 초기에는 F407 보드를 디버거처럼 사용하다가, 이후에는 사내 표준 J-LINK 디버거를 사용하고 싶을 수 있는데, 이때도 같은 커넥터 핀맵만 유지하면 디버거만 교체해서 바로 사용 가능합니다.

양산 관점에서는 이 커넥터가 ‘프로그램 포트’가 됩니다. 예를 들어 생산 라인에서 ICT(In-Circuit Tester)나 간단한 Jig에 ST-LINK 여러 개를 달아서, 보드를 컨베이어로 흘려보내며 자동으로 펌웨어를 굽고, 검사하는 식의 공정을 구성합니다. 이때 Jig에는 이 디버그 커넥터와 대응되는 테스트 핀(POGO 핀)이 배치되어 있고, 보드가 내려앉으면 VTREF / GND / SWDIO / SWCLK / NRST가 자동 접촉되어, 한 번에 수십 개 보드에 동시에 펌웨어를 굽기도 합니다. 이처럼 디버그 커넥터를 설계 단계에서 확보해 두면, 개발–디버깅–양산까지 전 흐름에서 동일 포트를 재활용할 수 있어 실무 효율이 매우 높습니다.

또 하나 중요한 포인트는, F407 디버거 보드가 항상 붙어 있을 수는 없다는 점입니다. 예를 들어 실제 고객에게 납품하는 최종 제품에는 F407 보드를 같이 넣지 않겠죠. 하지만 필드에서 문제가 생겼을 때, RMA로 회수된 보드에 다시 디버거를 꽂고 상태를 분석해야 하는 경우가 있습니다. 이런 상황에서 디버그 커넥터가 보드 상에 남아 있으면, 외부에서 별도의 디버거만 들고 가서 SWD로 연결해 펌웨어 버전 확인, Fault 발생 시점 레지스터 값 확인, 부트로더 재플래시 등 다양한 작업을 할 수 있습니다. 실무에서는 필드 디버깅을 고려해 이 디버그 포트를 숨기거나(케이스 내부에 배치), 혹은 서비스용 포트로 별도 관리하는 경우도 있습니다.

정리하자면, F407의 디버거는 PC와 F103 사이를 중계하는 “USB–SWD 디버그 장비” 역할을 하고, F103 설계 내의 디버깅 핀+커넥터는 이 SWD 신호들을 보드 밖으로 꺼내서, F407 보드든 ST-LINK V2든 J-LINK든 어떤 디버거든 자유롭게 연결할 수 있도록 해주는 “표준 디버그 인터페이스”라고 이해하시면 됩니다. 개발 단계에서는 F407을 임시 디버거로 쓰고, 장기적으로는 그 디버그 커넥터를 통해 다양한 디버거/양산 프로그래머를 꽂을 수 있도록 확장성을 확보했다고 보시면 됩니다.

0

안녕하세요, 인프런 AI 인턴입니다. HWGOGOGO님, F407과 F103 관련 디버거 설계에 대해 궁금증을 가지고 계시는군요.

F103의 디버깅 역할

일반적으로 STM32F103은 ST-Link나 J-Link 등 외부 디버거 없이도 F407의 디버깅을 수행할 수 있도록 설계됩니다. F103을 디버거로 사용하면, 외부 장비 없이도 F407의 상태를 모니터링하거나 간단한 디버그 작업을 수행할 수 있습니다. 이를 통해 개발 시 디버깅 편의성을 크게 높일 수 있습니다.

F103에서의 디버깅 핀 및 커넥터

F103 설계에서 별도 디버깅 핀을 부여하고 커넥터를 설정하는 이유는, F103이 F407을 디버깅하는 것 외에도 F103 자체에 대한 디버그를 수행하기 위해서입니다. 이 커넥터는 일반적으로 F103의 디버깅을 위해 설정된 JTAG 또는 SWD 인터페이스와 연결됩니다. 이를 통해 개발자는 F103 자체의 상태를 모니터링하거나 오류를 검출할 수 있습니다.

상세 디버깅 기능:

  • JTAG/SWD 프로토콜 지원: F103의 특정 핀을 통해 JTAG 또는 SWD 인터페이스로 디버깅 연결을 할 수 있습니다.
  • 디버깅 커넥터 역할: 이 커넥터는 PC의 디버그 소프트웨어와 연결되어 MCU 내부의 실행 상태를 실시간으로 확인하고 변수 및 레지스터를 조정하는 역할을 수행합니다.

관련 토픽에 대한 추가적인 정보는 다음과 같은 유사한 질문들에서 확인하실 수 있습니다:

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

HWGOGOGO님의 프로필 이미지
HWGOGOGO

작성한 질문수

질문하기