Inflearn Community Q&A
JTAG 통신 질문
Written on
·
22
·
Edited
0
JTAG 통신 관련 질문이 있습니다!
동영상 9분~10분 정도에 PB12, PB13, PB14, PB0에 Global Label을 붙이는 것을 확인했습니다. 다만 Datasheet상에서는 위의 핀들이 GPIO 핀으로 사용되는 것으로 확인됩니다. 또한 AF로 보더라도 JTAG 관련 통신은 없는 것으로 파악됩니다.
혹시 PB12, PB13, PB14, PB0을 사용하는 필연적인 이유가 따로 있는건가요??
아니면 DataSheet에 Main Function이 port 역할을 하는 4개를 아무거나 선정해도 되는건가요?
아!! 또한 F407과 통신을 하기 위해서 Global Label을 쓴다는 것은 이해했습니다.
JTAG 포트로 일반적으로 TCLK, TDO ,TDI, TRST, TMS 총 5개의 포트를 사용하는 것으로 알고있습니다.
영상에서 F407과 통신을 위해 TCLK, TMS, TRST 3개의 Global Label만 사용하신 이유가 따로 있을까요??
Answer 1
0
안녕하세요, 답변 남겨드립니다.
질문 주신 부분은 회로도에서 붙인 Global Label의 의미와, MCU가 실제로 지원하는 JTAG/SWD 전용 핀을 분리해서 보시면 훨씬 깔끔하게 이해됩니다. 제가 강의에서 PB12, PB13, PB14, PB0에 Global Label을 붙인 것은 그 핀들이 원래 JTAG 전용 핀이라서 선택한 것이 아니라, F103과 F407 사이에서 특정 신호를 연결해 설명하기 위한 예시로 사용한 것입니다. 즉, Global Label은 같은 이름의 net을 서로 연결해 주는 회로도 표기이고, 그 이름을 TCLK나 TMS처럼 붙였다고 해서 해당 GPIO가 자동으로 JTAG 전용 기능을 가지는 것은 아닙니다.
STM32F103에서 실제 디버그 포트로 사용하는 SWJ 계열 핀은 정해져 있습니다. 그래서 “정식 JTAG 또는 SWD 디버깅 포트”를 설계하는 상황이라면, 그 핀들은 임의로 PB12, PB13, PB14, PB0처럼 바꿔서 사용할 수 없습니다. 반대로 제가 강의에서 보여드린 부분처럼 MCU 간에 일반 신호를 주고받기 위한 용도라면, 반드시 특정 포트를 고집해야 하는 것은 아니고, 현재 설계에서 충돌이 없는 spare GPIO를 선택하시면 됩니다. 다만 여기서도 정말 아무 핀이나 고르면 되는 것은 아니고, 부트 설정에 걸린 핀이나 크리스털, 디버그 전용 핀, 이미 다른 주변장치와 강하게 엮인 핀은 피해서 잡는 것이 실무적으로 맞습니다.
질문하신 “왜 하필 PB12, PB13, PB14, PB0인가”에 대해서는, 그 핀들만이 가능한 필연적인 이유가 있었다기보다 강의 흐름상 설명하기 편하고, 해당 예제 회로에서 사용 충돌이 적은 GPIO라서 선택한 것으로 이해하시면 됩니다. 실제 프로젝트에서는 보드 전체 pin assignment를 보고 남는 GPIO를 고르게 되고, 이때는 기능 충돌, 향후 펌웨어 확장 가능성, 라우팅 난이도, 주변 노이즈 영향까지 같이 봐야 합니다. mixed-signal 보드에서는 이런 선택이 생각보다 중요해서, 디지털 제어선 하나를 어디에 두느냐에 따라 ADC 근처로 불필요한 스위칭 노이즈가 들어오기도 합니다.
그리고 JTAG 포트가 원래 TCK, TMS, TDI, TDO, TRST까지 5개 신호를 쓴다고 알고 계신 부분은 맞습니다. 다만 STM32 계열 보드 실무에서는 full JTAG 5선을 항상 다 쓰는 경우보다, SWD 방식으로 단순화해서 SWDIO, SWCLK, 그리고 필요하면 NRST 정도만 빼는 경우가 훨씬 많습니다. 그래서 강의에서 3개의 Global Label만 사용한 이유도, “표준 JTAG 5선 전체를 구현한다”는 의도라기보다, 필요한 신호만 연결하는 구조를 보여드리기 위한 맥락으로 보시면 됩니다. 즉, 그 장면을 full JTAG 표준 예제로 이해하시면 조금 헷갈릴 수 있고, 실제로는 두 MCU 사이 연결 또는 최소한의 디버그/제어 신호 연결 관점에서 받아들이시는 편이 맞습니다.
여기서 중요한 판단 기준은 딱 하나입니다. 정말 외부 디버거를 붙여 MCU를 디버깅하려는 목적이면 MCU에 정해진 디버그 핀을 따라야 하고, 단순히 MCU와 MCU 사이에서 특정 제어 신호를 넘기려는 목적이면 일반 GPIO에 원하는 net label을 붙여 연결해도 됩니다. 강의에서 보신 PB12, PB13, PB14, PB0은 후자에 가까운 예시라고 이해하시면 자연스럽습니다. 이름이 TCLK, TMS, TRST처럼 보이더라도, 그것이 곧바로 “이 핀들이 JTAG 전용 핀이다”라는 의미는 아니라는 점만 정확히 잡아두시면 이후에 회로를 보실 때 훨씬 덜 헷갈리실 거예요.





답변 감사합니다!