Skip to main content

AVR upload executable file in Terminal


Installation

macOS

brew install avrdude

Linux(debian)

sudo apt-get install -y avrdude

Windows

Download: http://download.savannah.gnu.org/releases/avrdude/

.zip파일을 받으시고 원하는 위치에 압축을 푼 뒤, 환경 변수의 Path에 해당 디렉터리를 등록하면 됩니다.

Programmer

Atmel-ICE, USBtoUART, stk500 등을 사용할 수 있습니다.

USB to UART

CH340G 드라이버

macOS

Download: http://www.wch.cn/download/CH341SER_MAC_ZIP.html

Linux(debian)

USB to UART 를 사용하는 경우 ttyUSBx의 소유권이 root에게 있고 그룹이 dialout이기 때문에 권한 문제가 발생할 수 있습니다. 아래 명령어를 사용하여 사용자를 dialout 그룹에 추가시켜 주면 됩니다.

sudo gpasswd --add $USER dialout

Download: http://wch.cn/downloads/CH341SER_LINUX_ZIP.html

sudo apt-get install -y libelf-dev &&\
unzip CH341SER_LINUX.ZIP &&\
cd CH341SER_LINUX/ &&\
sudo make &&\
sudo make load

make 할 때, error가 출력되면 ch34x.c 에 #include <linux/sched/signal.h>를 추가하고 wait_queue_t를wait_queue_entry_t`로 수정한 뒤, 다시 make를 시도해보시기 바랍니다.

Windows

Download: http://wch.cn/downloads/CH341SER_ZIP.html

FTDI 드라이버 설치

Linux(debian)

Ubuntu 11.10 이후 버전에서는 FTDI 드라이버가 커널에 통합되어 있습니다.

macOS, Windows

Download: https://www.ftdichip.com/Drivers/VCP.htm

CP2102 드라이버 설치

Linux(debian)

Linux 3.x.x와 Linux 4.x.x 버전에서는 CP2102 드라이버가 커널에 통합되어 있습니다. Ubuntu 기준 11.10 ~ 18.04 LTS로 확인 됩니다.

macOS, Windows

Download: https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers

Upload

업로드를 진행하기 전에 실행 파일인 .elf 파일이나 .hex 파일이 있어야 합니다.

avr-objcopy는 binutils-avr에 포함되어 있는 오브젝트 파일을 복사하고 다른 파일로 변환해주는 명령입니다. 업로드할 때, <executable file>을 입력파일로 받아들이지 못하는 경우, 아래 명령을 통해 .elf 파일에서 필요한 부분을 .hex 파일에 저장합니다.(avrdude 버전이 낮은 경우 elf를 입력파일로 사용하지 못합니다.)

avr-objcopy -j .text -j .data -O ihex <elf file> <hex file>

avrdude

Ref: https://nongnu.org/avrdude/user-manual/avrdude_4.html#Option-Descriptions

avrdude는 프로그래머를 사용하여 AVR MCU에 실행 파일을 업로드하거나 퓨즈 비트, 락 비트 등을 설정할 때 사용하는 도구입니다. 아래 옵션을 확인하고 사용하는 프로그래머와 AVR MCU에 따라 옵션을 선택하시면 됩니다.

  • -p<partno>: 실행 파일을 업로드할 MCU 설정.
  • -c<programmer-id>: 사용할 프로그래머(업로드 장치) 설정.
  • -P<port>: 프로그래머가 연결된 포트를 설정합니다.
  • -b<baudrate>: UART 통신을 통해 업로드하는 경우 보오 레이트를 설정.
  • -B<bitclock>: JTAG 인터페이스 또는 ISP 클럭에 대한 비트 클럭 주기. 값은 ms 단위로 부동소수점을 사용.
    • 1/<bitclock> MHz
    • 사용된 AVR MCU 클럭의 1/4 이하로 설정하는 것이 적당함.
  • -v: 업로드 시 상세 정보 표시.
  • -U<memtype:op:filename[:format]> : 사용할 저장 공간, 실행 방법, 입력 파일, 파일 형식 설정.
    • memtype: eeprom, flash, fuse, boot 등.
    • op: r, w, v.
    • format: i(intel hex), e(ELF), a(auto detect) 등. e, a 등은 업로드할 때만 사용 가능.
    • .elf 파일 업로드: -Uflash:w:[filename].elf:e
    • .hex 파일 업로드: -Uflash:w:[filename].hex:i

stk500

(@todo stk500 사용시 ISP 클럭 설정 테스트 안됨.)

avrdude -p<partno> -cstk500 -P<port> -v -Uflash:w:<executable file>:e

avrispmkII

avrdude -p<partno> -cavrispmkII -B0.5 -v -Uflash:w:<executable file>:e

arduino

nano의 경우 Old Bootloader를 사용하면 -b57600을 사용해야 합니다.

avrdude -p<partno> -carduino -P<port> -b115200 -v -Uflash:w:<executable file>:e

atmelice_isp

(@todo atmelice_isp 사용시 ISP 클럭 설정 테스트 안됨.)

avrdude -p<partno> -catmelice_isp -v -Uflash:w:<executable file>:e

USBasp

avrdude -p<partno> -cusbasp -B3 -Pusb -v -Uflash:w:<executable>:e`