본문 바로가기
Embedded/Atmel

Mac에서 Atmel(AVR) MCU 개발을 위한 환경 구축 - 5 : 저렴한 JTAG로 Debugging 하기

by Gordon_ 2025. 4. 4.

- 개발 환경

Macbook Pro 14 (M3)

macOS : Sequoia 15.4

 

개발 보드 : NewTC AVR MEGA 128 개발보드

프로그래머 : NewTC AVR용 USPISP V7.0

Jtag 프로그래머 및 디버거 : AVR JTAG ICE USB


0. 사전 작업 (Toolchain을 설치 하지 않았다면)

https://littlebitodd-developer.tistory.com/34

 

Mac에서 Atmel(AVR) MCU 개발을 위한 환경 구축 - 1 Toolchain 설치

- 개발 환경Macbook Pro 14 (M3)macOS : Sequoia 15.4 개발 보드 : NewTC AVR MEGA 128 개발보드프로그래머 : NewTC AVR용 USPISP V7.0Jtag 프로그래머 및 디버거 : AVR JTAG ICE USB1. 서론  사실 Atmel MCU는 윈도우에서 AVR studio

littlebitodd-developer.tistory.com

1. 서론

  4번 포스트 까지 만으로도 충분히 개발을 진행 할 수 있지만 디버깅을 하기 힘들기에 개발에 더많은 시간을 투자해야 할 것입니다. 그렇다고 정식 AVRICE를 사기에는 너무 비싸 취미로 개발하고있는 사람으로써는 매우 부담이 됩니다. 하지만, 중국산 저렴한 AVR용 JTAG로도 충분히 디버깅을 할 수 있음을 이 포스트에서 확인하겠습니다.

 

2. Avarice 설치

2.1. 사전 패키지 설치

brew install automake

 

 

2.2. Avarice 설치

https://github.com/avrdudes/avarice

 

GitHub - avrdudes/avarice: AVaRICE is a program for interfacing the Atmel JTAG ICE to GDB to allow users to debug their embedded

AVaRICE is a program for interfacing the Atmel JTAG ICE to GDB to allow users to debug their embedded AVR target. - GitHub - avrdudes/avarice: AVaRICE is a program for interfacing the Atmel JTAG ...

github.com

# git으로 코드 다운로드
cd ~/Downloads
git clone https://github.com/avrdudes/avarice

# configure 파일 생성
cd avarice
./Bootstrap

# 설치 파일 분리
mkdir build
cd build
../configure

# avarice 설치
sudo make install

 

avarice 설치 완료

3. JTAG 프로그래머와 AVR MCU 연결

출처 : https://www.newtc.co.kr/dpshop/shop/item.php?it_id=1314599835

4. 디버깅 전 확인 사항

4.1. OCDEN 퓨즈 비트 1로 설정

아직 퓨즈를 설정하지 않았다면 아래 5번을 참고하여 퓨즈를 설정을 하면 정상적으로 동작합니다.

아래 포스트에서는 STK500을 사용하였지만 JTAG로도 퓨즈 설정이 가능합니다. (-c 의 인자를 jtag1으로 변경하면 됩니다.)

https://littlebitodd-developer.tistory.com/35

 

Mac에서 Atmel(AVR) MCU 개발을 위한 환경 구축 - 2 : LED 점등 예제 동작

- 개발 환경Macbook Pro 14 (M3)macOS : Sequoia 15.4 개발 보드 : NewTC AVR MEGA 128 개발보드프로그래머 : NewTC AVR용 USPISP V7.0Jtag 프로그래머 및 디버거 : AVR JTAG ICE USB1. 서론  지난 포스트에서 Toolchain를 설치

littlebitodd-developer.tistory.com

 

4.2. avr-gcc 컴파일 파라미터 설정

디버깅을 하기 위해 2가지 옵션을 추가 하여야 합니다.

-O0 : 컴파일시 최적화를 하지않습니다. 컴파일러가 최적화시 필요없다 판단되는 코드를 수정하는데 디버깅시 방해가 됩니다.

-g : 출력 파일에 디버깅 심볼을 추가하여 gdb로 디버깅을 할 수 있도록합니다.

 

예시)

avr-gcc -Wall -O0 -g -mmcu=atmega128a -DF_CPU=16000000UL main.c -o main.bin

 

5. avarice 실행

이제 JTAG로 연결된  MCU에 접근하기 위해 avarice를 실행합니다.

avarice --jtag <JTAG 디바이스 파일> :4242

 

예시)

avarice --jtag /dev/tty.usbserial-110 :4242

 

6. gdb 연결

gdb가 설치 되지 않았다면 아래 커맨드를 이용하여 gdb를 설치합니다.

#gdb 설치
brew install gdb

 

이제 주의 사항을 확인하면서 gdb를 아래 처럼 실행하면 됩니다.

# 주의 사항
# 1. main.hex가 아닌 main.bin 파일이다.
# 2. avr-gcc로 컴파일시 -O0 -g 옵션을 넣었는지 확인한다.
gdb ./main.bin

 

# 타켓 아키텍쳐를 avr로 설정
set architecture avr

# avarice에 연결
target remote localhost:4242

 

이제 디버깅할 준비는 완료되었습니다.

디버깅을 더 쉽게 하기 위해 몇가지 명령어를 실행하도록 하겠습니다.

#명령어 위에 디버깅할 코드를 보여주기 위한 화면 생성
layout next

 

# main 함수 시작부분에 break point 설정
b main
# main 함수의 코드를 출력
l main

# 위에서 설정한 break point까지 실행
continue

 

 

7. gdb 종료