null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
☆ Star
플래싱 & 디버깅
#jtag
#debug
#flash
#breakpoint
#memory-view
@devpc
|
2026-04-02 05:47:09
|
GET /api/v1/nodes/199?nv=1
History:
v1 (2026-04-02) (Latest)
0
Views
3
Calls
# 플래싱 & 디버깅 ## JTAG이란? JTAG(Joint Test Action Group)은 MCU 내부에 접근하기 위한 **표준 디버그 인터페이스**입니다. Flash에 프로그램을 쓰고, 실행 중인 CPU를 멈추고, 레지스터·메모리 값을 읽는 것이 모두 JTAG을 통해 이루어집니다. ``` [ JTAG 신호선 ] 디버거 어댑터 ──────────────── TC37x MCU TCK ──────────────────────── TCK (클럭) TMS ──────────────────────── TMS (모드 선택) TDI ──────────────────────── TDI (데이터 입력) TDO ──────────────────────── TDO (데이터 출력) TRST ──────────────────────── TRST (리셋, 옵션) GND ──────────────────────── GND (SWD는 SWDIO + SWDCLK 2선으로 단순화한 ARM 전용 방식) ``` TC37x는 JTAG을 사용합니다. ARM MCU에서 많이 쓰는 SWD(Serial Wire Debug)는 ARM 전용이라 TriCore에는 없습니다. --- ## 디버깅 흐름 ``` [ 디버그 세션 흐름 ] 1. 빌드 (.elf 생성) | v 2. 플래싱 (JTAG으로 Flash에 기록) | v 3. Reset & Halt (MCU 리셋 후 main() 시작 전 정지) | v 4. 중단점(Breakpoint) 설정 → Run | v 5. 중단점 도달 → CPU Halt | v 6. 레지스터 / 메모리 / 변수 값 확인 | v 7. Step Over / Step Into / Continue ``` --- ## 중단점 (Breakpoint) 중단점은 특정 코드 라인에서 **CPU를 일시 정지**시키는 기능입니다. ``` [ 중단점 종류 ] 소프트웨어 중단점 (Software Breakpoint) ├── Flash의 명령어를 BREAK 명령어로 임시 교체 ├── 개수 제한 없음 (RAM 실행 코드에 한해) └── Flash에서는 사용 제한 있음 하드웨어 중단점 (Hardware Breakpoint) ├── CPU 내부의 비교 회로가 주소 일치 시 정지 ├── TC37x: 최대 8개 (TriCore 사양에 따라) └── Flash 코드에도 사용 가능 ``` ADS에서는 소스 라인 왼쪽을 클릭하면 중단점이 설정됩니다. --- ## 메모리 뷰 & 레지스터 뷰 디버거가 CPU를 Halt 상태로 만들면, 아래 정보를 실시간으로 확인할 수 있습니다. ``` [ ADS 디버그 화면 구성 (개념) ] +-------------------+---------------------------+ | 소스코드 뷰 | 변수/레지스터 뷰 | | | D0 = 0x0000_0000 | | → 42: int x = 5; | D1 = 0x0000_0005 ← x | | 43: x += 1; | A10 (SP) = 0xC000_1FF0 | | | PC = 0x8000_0214 | +-------------------+---------------------------+ | 콘솔 / 로그 | 메모리 뷰 | | | 주소 값 | | | 0xC000_1FF0: 00 00 00 05 | +-------------------+---------------------------+ ``` **메모리 뷰**는 특정 주소의 내용을 16진수로 직접 확인할 수 있어, 레지스터 설정 결과나 버퍼 내용을 검증할 때 유용합니다. --- ## TC37x: DAS / Lauterbach / UDE ### Infineon DAS (Device Access Server) ``` 개발 PC +-----------+ USB +------------+ JTAG +---------+ | ADS | -----------> | Infineon | -----------> | TC37x | | (Eclipse)| | miniWiggler| | Board | +-----------+ | / DAP | +---------+ +------------+ ``` - **miniWiggler**: Infineon 공식 저가 JTAG 어댑터, ADS와 바로 연동 - **DAS**: PC와 JTAG 어댑터 사이의 드라이버/서버 소프트웨어 - ADS 설치 시 DAS가 자동 포함됨 ### Lauterbach TRACE32 자동차 업계 표준 디버거. 고급 기능(트레이스, 코드 커버리지 등)을 제공하지만 유료입니다. ADS보다 더 강력한 분석이 필요할 때 사용합니다. ### 기본 플래싱 절차 (ADS 기준) ``` 1. ADS에서 프로젝트 Build (Run > Build Project) 2. Debug Configuration 생성 - Debugger: DAS - Device: TC37xA (또는 해당 변종) - Connection: miniWiggler / JTAG 3. Debug 버튼 클릭 → 자동으로 Flash에 기록 + Reset 4. main() 시작 직전에 자동 Halt 5. Resume(F8) 또는 Step(F5/F6) 으로 실행 ``` --- ## 다른 MCU와의 차이점 > ⚠️ 다른 환경에서 넘어온다면 이런 점이 다를 수 있습니다. - **STM32 (ST-Link / SWD)**: SWD 2선 방식. TriCore는 JTAG 4선 방식. 핀 수와 신호 이름이 다름. - **Arduino (USB 부트로더)**: JTAG 없이 USB로 직접 업로드. TC37x는 반드시 JTAG 어댑터 필요. - **RP2040 (SWD / UF2)**: UF2 드래그 앤 드롭 플래싱도 지원. TC37x는 해당 없음. - **공통 개념**: 중단점, 메모리 뷰, 레지스터 뷰, Step 실행 — 모든 JTAG/SWD 디버거에서 동일.
// COMMENTS
Newest First
ON THIS PAGE