Cộng đồng Hỏi & Đáp của Inflearn
Thực hành thiết kế phần cứng PCB: Dự án thiết kế bo mạch tín hiệu hỗn hợp (Mixed-signal) sử dụng STM32
32강 debugging pin 설계 강의 관련 질문 드립니다.
Đã giải quyết
Viết
·
52
0
global label로 JTMS_F407을 PB14, PB12에 연결하고 NTRST_F407은 PB13에, JTCLK_F407은 PB0에 연결한 이유가 무엇인지 궁금합니다. PB14, PB12가 SPI2_MISO/ USART3_RTS(9) TIM1_CH2N (9) 이런 기능을 할 수 있다고 datasheet에 나와있던데 매인 mcu와 디버깅용 muc가 spi나 usart 통신을 하게 하기위해 PB14, PB12에 연결한건가요? 그렇다면 PB14,PB12가 아니여도 통신 방식에 맞게 datasheet를 보고 핀을 선택해서 해당 핀을 이용해도 되는건가요?
Câu trả lời 1
0
안녕하세요, 답변 남겨드립니다.
질문 주신 “JTMS_F407을 PB14, PB12에, NTRST_F407을 PB13에, JTCLK_F407을 PB0에 연결”은, 해당 핀들이 SPI나 USART 같은 주변장치 통신을 하려고 “그 기능을 쓰기 위해” 선택됐다기보다는, 디버깅 인터페이스(JTAG/SWD) 신호를 보드 안에서 “어느 GPIO로 내보낼지”를 정한 설계 선택으로 보는 게 더 정확합니다. STM32F4 계열의 경우 디버그 포트는 Arm의 SWJ-DP(Serial Wire/JTAG Debug Port)이고, JTAG의 TMS/TCK는 SWDIO/SWCLK와 핀을 공유하며 2선(SWD) 또는 5선(JTAG)으로 디버깅이 가능하다는 점이 데이터시트에도 명시돼 있습니다.
여기서 핵심은 “타깃 MCU(예: STM32F407) 쪽의 SWDIO/SWCLK 같은 디버그 핀은 사실상 고정(기능적으로 강하게 규정)”인 반면, “보드 내 디버깅용 MCU(예: STM32F103 등) 쪽에서 그 신호를 구동/샘플링하는 핀은 설계자가 비교적 자유롭게 정할 수 있다”는 점입니다. 즉, 디버깅용 MCU가 타깃 MCU를 프로그래밍/디버깅하는 역할(일종의 ST-LINK 류 역할)을 한다면, 디버깅용 MCU의 특정 GPIO들을 TMS/SWDIO, TCK/SWCLK, nRESET(nTRST/NRST 계열) 같은 선에 매핑해서 쓰게 되는데, 이때 그 GPIO가 “SPI2_MISO가 될 수 있다/USART가 될 수 있다” 같은 표기는 단지 대체기능(AF) 후보일 뿐이고, 실제로는 그냥 GPIO로 써도 됩니다. 인프런 커뮤니티의 유사 Q&A에서도 “데이터시트의 단순 핀명만 보고 끝내기보다, 디버그 신호의 의미를 라벨로 명확히 해서 회로 가독성과 호환성을 높이려는 관례”라는 취지로 설명하고 있습니다.
그렇다면 왜 하필 PB12, PB13, PB14, PB0 같은 조합이 나왔느냐는 부분은 “전기적/펌웨어적/PCB 배치적 실용성” 쪽 이유가 큽니다. 현업에서 디버그 라인 핀을 고를 때는 보통 첫째, 부팅 스트랩(BOOT0/BOOT1), 크리스털, 리셋 등 보드 생존에 치명적인 핀을 피합니다. 둘째, 다른 핵심 인터페이스(Ethernet RMII, USB, 고속 ADC/DAC 등)와 충돌 가능성이 낮은 핀을 고릅니다. 셋째, 같은 GPIO 포트에 몰아두면 펌웨어에서 한 번의 레지스터 접근으로 여러 신호를 동시에 토글/샘플링할 수 있어 타이밍 스큐를 줄이고 속도를 올리기 유리합니다. 예를 들어 TMS, TCK, TDI를 모두 GPIOB에 몰아두면, GPIOB->BSRR 한 번(32bit write 1회)로 여러 핀을 동시에 set/reset할 수 있어서, 개별 핀을 순차적으로 건드릴 때 생기는 수십 ns 단위의 상대 지연을 줄일 수 있습니다. Cortex-M에서 GPIO 토글이 루프당 수십~수백 ns 수준으로 동작한다고 보면, 이런 “같은 포트 집중”은 SWD 클록을 1 MHz에서 2~4 MHz 수준으로 끌어올릴 때 체감 차이가 나오는 편입니다(보드 배선 길이, 프로브, 시리즈 저항 유무에 따라 달라집니다). 또 PB12~PB15는 STM32F1에서 SPI2가 걸려 있는 대표적인 핀 묶음이라, 나중에 “JTAG 비트뱅잉을 SPI 하드웨어를 부분적으로 활용해 가속” 같은 확장 아이디어를 남기는 설계도 실제로 있습니다(예: SCK=TCK, MOSI=TDI, MISO=TDO처럼 데이터/클록 경로를 하드웨어로 보내고 TMS만 GPIO로 제어). 다만 이 케이스에서 JTCLK가 PB0로 간 점은, 보드 내 다른 용도(예: PB13을 LED/인터럽트/다른 라인으로 이미 사용)나 라우팅 편의 때문에 클록 라인을 다른 위치로 빼는 타협이 있었을 가능성이 큽니다. 이 부분은 회로도에서 “PB13이 다른 넷과 겹치는지”, “PB0가 커넥터/저항 네트워크 근처인지”를 보면 설계 의도가 더 명확해집니다.
질문하신 “PB14, PB12가 아니라도 통신 방식에 맞게 데이터시트를 보고 골라도 되느냐”에 대해서는, 디버그 라인 관점에서는 “네, 원칙적으로는 된다”가 맞습니다. 단, 조건이 있습니다. 그 핀들이 디버깅용 MCU 펌웨어에서 실제로 GPIO로 구동/입력 가능해야 하고, 부팅 직후부터 외부에 이상 레벨을 강하게 내보내서 타깃을 오동작시키지 않아야 하며, 보드 제작/검증 관점에서 표준 ARM 10핀(SWD) 헤더 같은 외부 디버거 연결 경로와 충돌하지 않게 구성돼야 합니다. 현실적인 가이드로는, 보드 안 SWD/SWCLK 라인 배선 길이가 5 cm 이내이고(왕복 리턴패스 포함), 22~47 ohm 시리즈 저항을 클록/데이터에 넣고, 그라운드 레퍼런스를 가까이 두면 2~4 MHz 정도는 비교적 안정적으로 나오는 경우가 많습니다. 반대로 10 cm 이상 길어지거나 커넥터/케이블이 길어지면 링잉이 커져서 1 MHz 이하로 낮춰야 안정화되는 사례도 흔합니다. 이런 정량 값은 “절대 규격”이라기보다, 현장에서 디버그 안정성 튜닝할 때 자주 나오는 경험치 범위로 이해하시면 좋습니다.
추가로 한 가지 짚고 넘어가실 게, 질문에서 “글로벌 라벨로 JTMS_F407을 PB14, PB12에 연결”이라고 하셨는데, KiCad/OrCAD에서 같은 글로벌 라벨을 두 군데에 붙이면 그 둘은 전기적으로 같은 넷(쇼트)입니다. 따라서 PB14와 PB12가 “같은 MCU의 두 핀”에 동시에 같은 라벨로 직결돼 있다면 일반적으로는 권장되지 않습니다(한쪽이 출력일 때 충돌 위험). 보통은 PB14는 디버그 MCU 핀, PB12는 커넥터나 점퍼/0옴 저항을 지난 다른 지점처럼 “서로 다른 부품의 핀”인 경우가 많습니다. 이 구조는 실무에서 디버그 신호를 “외부 디버거로도 빼고, 온보드 디버거로도 연결”하려고 점퍼(0 ohm, solder bridge, 2:1 mux 등) 옵션을 주는 패턴에서 자주 나옵니다.
정리하면, 해당 핀 선택은 SPI/USART 통신을 하려는 목적이라기보다 디버깅 신호를 어떤 GPIO로 구성할지(그리고 라우팅/포트 집중/확장성까지) 고려한 설계 선택일 가능성이 높고, 다른 핀으로 바꿔도 되지만 부팅 안정성, 포트 충돌, 디버그 신호 품질(배선 길이/시리즈 저항/그라운드 리턴)까지 함께 만족하도록 고르시는 게 핵심입니다.




