본문 바로가기
Embedded Program

펌웨어 디버깅 기법 – JTAG, SWD, 시리얼 로그 활용법

by rlawnsghtest 2025. 2. 7.

1. 개요

펌웨어 개발 과정에서 디버깅은 필수적인 요소이며, 효과적인 디버깅 기법을 선택하는 것이 중요합니다. 대표적인 펌웨어 디버깅 방법으로 JTAG, SWD, 시리얼 로그가 있으며, 각 방법은 특정한 장점과 활용 사례를 설명해보겠습니다. 또한,  JTAG, SWD, 시리얼 로그의 개념과 차이점을 비교하고, 실무에서 어떻게 활용할 수 있는지 알아보겠습니다.

2. JTAG (Joint Test Action Group)

2.1 정의

JTAG는 IEEE 1149.1 표준을 기반으로 한 디버깅 및 테스트 인터페이스로, 프로세서 내부의 디버그 레지스터에 접근하여 실행을 제어하고, 메모리 내용을 확인할 수 있도록 설계되었습니다. 여러 개의 디바이스를 체인 방식으로 연결하여 하나의 포트를 통해 다수의 장치를 디버깅할 수 있다는 특징이 있습니다. 주로 SoC, FPGA, 고급 마이크로컨트롤러에서 사용되며, 개발 과정뿐만 아니라 하드웨어 검증 및 생산 테스트에도 활용됩니다.

2.2 특징

  • 다중 장치 디버깅 지원: 하나의 JTAG 포트를 통해 여러 디바이스 연결 가능
  • 하드웨어 레벨 디버깅: 내부 레지스터 및 메모리 직접 접근 가능
  • 브레이크포인트 및 단일 스텝 실행 지원
  • 4~5핀 사용

     TDI (Test Data In) – 데이터 입력

     TDO (Test Data Out) – 데이터 출력

     TCK (Test Clock) – 클럭 신호

     TMS (Test Mode Select) – 테스트 모드 선택

     TRST (Test Reset, 선택적) – JTAG 리셋 신호

2.3 장단점

  • 장점: 강력한 하드웨어 디버깅 기능 제공, 다중 디바이스 지원, 안정적인 디버깅 가능
  • 단점: 다수의 핀을 필요로 함, 설정이 복잡하며, 고가의 디버깅 장비 필요

2.4 예시

  • 복잡한 SoC 및 FPGA 디버깅
  • PCB 설계 검증 및 생산 테스트
  • 임베디드 시스템의 초기 부트로더 및 커널 디버깅

3. SWD (Serial Wire Debug)

3.1 정의

SWD는 ARM Cortex-M 기반 마이크로컨트롤러에서 JTAG를 대체하는 디버그 인터페이스로, 단 두 개의 신호선(SWDIO, SWCLK)만 사용하여 디버깅을 수행할 수 있습니다. ARM의 표준 디버깅 인터페이스로, JTAG와 동일한 기능을 제공하면서도 하드웨어 요구 사항이 줄어듭니다. 특히 임베디드 시스템과 같은 소형 기기에서 효과적인 디버깅 솔루션으로 널리 사용되고 있습니다.

3.2 특징

  • JTAG 대비 간단한 하드웨어 요구 사항
  • 빠른 데이터 전송 속도 및 ARM Cortex-M 시리즈와의 높은 호환성
  • 적은 핀 사용 (2핀: SWDIO, SWCLK)

 

     SWDIO (Serial Wire Debug Input/Output) – 데이터 입출력

     SWCLK (Serial Wire Clock) – 디버깅 클럭

 

3.3 장단점

  • 장점: 적은 핀 수로 JTAG와 유사한 기능 제공, 간편한 구성, 빠른 디버깅 속도
  • 단점: JTAG 대비 일부 고급 기능 제한, 멀티 디바이스 디버깅이 어려움

3.4 예시

  • MCU 기반의 소형 임베디드 시스템 디버깅
  • 전력 소비가 중요한 저전력 장치 개발
  • 제한된 PCB 설계에서 디버깅 인터페이스 최소화

4. 시리얼 로그 (Serial Log)

4.1 정의

시리얼 로그는 UART(Universal Asynchronous Receiver-Transmitter) 인터페이스를 이용하여 시스템 내부 상태 및 디버깅 정보를 출력하는 방식입니다. 주로 printf()와 같은 출력 함수를 사용하여 디버깅 메시지를 기록하며, 실시간으로 동작 상태를 모니터링하는 데 유용합니다. 하드웨어 디버깅 인터페이스 없이도 구현할 수 있으며, 원격 디버깅 및 시스템 이벤트 분석 등에 널리 활용되고 있습니다.

개발이 완료된 이후에 장비의 고장탐구나, 이력(Log)등을 확인할 수 있는 좋은 수단 입니다.

4.2 특징

  • 소프트웨어 기반 디버깅 기법
  • 하드웨어 요구 사항이 적음
  • 원격 디버깅 및 실시간 로그 확인 가능

 

     TX (Transmit) – 데이터 전송

     RX (Receive) – 데이터 수신

     GND (Ground) – 공통 접지

 

4.3 장단점

  • 장점: 저비용, 설정이 간단, 실행 흐름 및 이벤트 분석에 유용함
  • 단점: 실시간 디버깅 기능이 제한적, 속도가 느려 대량의 데이터를 처리하기 어려움

4.4 예시

  • 임베디드 시스템 부팅 로그 분석
  • 네트워크 장비 및 원격 시스템의 오류 모니터링
  • 실시간 이벤트 기록 및 분석

5. 비교 및 선택 기준  

기법 핀 수 요구  디버깅 방식 활용 용도
JTAG 많음 (4~5핀 or 15핀) 하드웨어 레벨 디버깅 SoC, 복잡한 시스템
SWD 적음 (2핀) 하드웨어 레벨 디버깅 MCU, 소형 시스템
시리얼 로그 매우 적음 (2~4핀) 소프트웨어 기반 디버깅 실행 로그 분석

6. 결론

펌웨어 디버깅에서는 시스템의 특성과 요구사항에 맞는 적절한 기법을 선택하는 것이 중요합니다. JTAG은 복잡한 SoC 및 하드웨어 디버깅에 유리하며, SWD는 MCU 기반 시스템에서 효율적입니다. 시리얼 로그는 간단한 오류 분석 및 실행 흐름 확인에 적합합니다. 각 기법의 장점을 이해하고 상황에 맞게 활용하는 것이 효과적인 디버깅을 위한 핵심 요소입니다.

보통 개발시에는 2~3개의 디버깅 방법을 같이 사용합니다.

내용에 대한 질문이 있다면 언제든지 댓글로 남겨 주세요!