ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Atmega328u 에 부트로더 굽기
    myProjects 2022. 3. 28. 15:31

    ATMEGA328P 또는 ATMEGA328 에 부트로더 굽기

    아두이노 우노에 사용되는 MCU

    아두이노 우노에 사용되는 MCU 는 ATMEGA328P 이다. 즉, ATMEGA328P-PU 이거나 ATMEGA328P-AU가 일반적으로 사용된다. 보통 DIP 타입의 ATMEGA328P-PU MCU 와 ATMEGA16U2 를 포함한 정품과 동일한 규격의 복제품과 TQFP 타입의 ATMEGA328P-AU  MCU 와 CH340 USB 드라이버를 사용하는 복제품이 있다. 둘 다 복제품이다.

     

    ATMEGA328P 와 ATMEGA328 의 차이

    기본적으로 우노에 사용되는 MCU 는 P 가 붙어 있는 Pico Power 대기모드에서 소비전력을 줄인 것이 사용된다. 그러다보니 ATMEGA328P 와 ATMEGA328 즉, 뒤에 P 가 붙지 않은 칩이 다르게 인식된다.

    생긴건 동일하게 생겼는데 내부 ID가 다르다보니 정작 부트로더를 구울 때 ATMEGA328 을 사용하면 에러를 발생시킨다.

     

    얼마전까지만 해도 이 문제를 해결하는 것이 쉽지 않았던 것으로 보인다. 하지만 지금은 쉽게 처리할 수 있게 되었다.

     

    우선 기본적인 ATMEGA328P-PU(사진의 위쪽) 또는  ATMEGA328 U(사진의 아래쪽)를 사용하는 경우 부트로더를 굽는 방법은 다음과 같다.

     

    부트로더 굽는 방법

    1. arduino ide 를 실행한다.

    2. PC 와 아두이노 우노를 USB 케이블로 연결한다. [툴] 에서 보드와 포트 번호를 맞춘다. 이때 아두이노 우노는 사용하던 것을 사용하면 된다. DIP 타입이거나 혹은 SMD 타입이건 상관없다. 단, 우노(UNO)여야 한다.

    3. [파일] - [예제] - [11.ArduinoISP] - [ArduinoISP] 를 클릭하고 업로드 한다. 이제 아두이노 우노는 ArduinoISP 로 작동한다.

    4. 다음과 같이 연결한다.


    5. ARDUINO IDE 의 [파일] - [환경설정] - [추가적인 보드 매니저 URLs] 에 https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json 을 추가한다.

    6. [툴] - [보드] - [보드 매니저] 에서 "minicore" 를 검색하고 나온 것을 설치한 후 창을 닫는다.

    7. [툴] - [보드] - [MiniCore] 에서 [Atemega328] 을 선택한다.

    8. Clock 은 16MHz 로, 나머지는 그대로 두고, Variant 를 P 칩을 사용한 경우 328P/328PA 를 선택하고, P 칩이 아닌경우 328/328A 를 선택한다. 328PB 는 아두이노 마이크로 보드에 사용되는 칩이다.

     

    8. [툴]  - [프로그래머] - [Arduino as ISP(MiniCore)] 를 선택한다.

    9. [툴] - [포트] 에서 연결된 아두이노 우노의 포트를 선택한다.

    10. [툴] - [부트로더 굽기] 를 선택하면 아두이노 우노를 ISP 로 이용하여 연결된 ATMEGA328P 또는 ATMEGA328 칩에 부트로더를 굽는다. 다음과 같은 메시지를 보여준 후 완료된다.

     

    avrdude: Version 6.3-20201216
             Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
             Copyright (c) 2007-2014 Joerg Wunsch
    
             System wide configuration file is "C:\Users\eventia\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\2.1.3/avrdude.conf"
    
             Using Port                    : COM3
             Using Programmer              : stk500v1
             Overriding Baud Rate          : 19200
             AVR Part                      : ATmega328
             Chip Erase delay              : 9000 us
             PAGEL                         : PD7
             BS2                           : PC2
             RESET disposition             : dedicated
             RETRY pulse                   : SCK
             serial program mode           : yes
             parallel program mode         : yes
             Timeout                       : 200
             StabDelay                     : 100
             CmdexeDelay                   : 25
             SyncLoops                     : 32
             ByteDelay                     : 0
             PollIndex                     : 3
             PollValue                     : 0x53
             Memory Detail                 :
    
                                      Block Poll               Page                       Polled
               Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
               ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
               eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
               flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
               lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
               hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
               efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
               lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
               calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
               signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
    
             Programmer Type : STK500
             Description     : Atmel STK500 Version 1.x firmware
             Hardware Version: 2
             Firmware Version: 1.18
             Topcard         : Unknown
             Vtarget         : 0.0 V
             Varef           : 0.0 V
             Oscillator      : Off
             SCK period      : 0.1 us
    
    ...(중략)...
    
    avrdude: verifying ...
    avrdude: 32768 bytes of flash verified
    avrdude: reading input file "0x0f"
    avrdude: writing lock (1 bytes):
    
    Writing | ################################################## | 100% 0.02s
    
    avrdude: 1 bytes of lock written
    avrdude: verifying lock memory against 0x0f:
    avrdude: load data lock data from input file 0x0f:
    avrdude: input file 0x0f contains 1 bytes
    avrdude: reading on-chip lock data:
    
    Reading | ################################################## | 100% 0.01s
    
    avrdude: verifying ...
    avrdude: 1 bytes of lock verified
    
    avrdude done.  Thank you.

     

    부트로더 구워진 칩 프로그래밍 하기

    부트로더 구워진 칩을 사용하는 방법은 다양하다. 알아서 사용하면 된다. 아직 잘 모르는 초보들을 위해 간단한 한가지 방법을 알려주겠다. 기존 아두이노 보드에 넣어서 프로그램한 후 다시 빼서 사용하고자 하는 곳에 넣으면 된다.

     

    제대로 되었는지 확인하기 위해 DIP 타입 ATMEGA328P-PU 를 사용하고 있는 아두이노 우노의 칩을 핀셋으로 조심스럽게 꺼내고 새롭게 부트로더를 구운 ATMEGA328 U 칩을 넣어서 BLINK 예제를 작동시켜본다. 

    이때 주의할 것이 있다.

     

    우리가 사용한 칩이 ATMEGA328 U 이라면 보드를 Arduino UNO 를 선택하면 안된다. ATMEGA328P-PU 와 ATMEGA328 U 는 ID 가 다르기 때문에 다른 기종으로 인식된다. 즉, [툴] - [보드] - [MiniCore] 에서 ATmega328 을 선택하고, 나머지 사항도 그에 맞게 맞춰주어야 한다.

     

    [파일] - [예제] - [01.Basic] - [Blink] 를 선택하고 업로드 버튼을 클릭한다. 이때 [툴] - [프로그래머] 는 어느 것이든 관계없다. [툴] - [프로그래머] 는 부트로더를 업로드 할 때만 사용되고, 부트로더가 올라간 상태의 아두이노는 USB 를 통해 UART 통신으로 프로그램코드가 올라간다. 즉 [툴] - [프로그래머] 는 상관없다.

     

     

     

    아무 문제 없이 1초에 한번씩 LED가 켜지고 꺼지며 정상 작동하는 것을 확인할 수 있다.

     

    [정리]

    1. ATMEGA328 칩을 구했을때 부트로더 굽기
      1. IDE - 환경설정 - 추가적인 보드매니저 URLs- https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json
      2. 툴 - 보드 - 보드매니저 - MiniCore
      3. 보드 - MiniCore - ATmega328 // Variant - 328/328A
      4. ArduinoISP & 프로그래머 Arduino as ISP
    2. 부트로더 구워진 ATMEGA328 칩 사용하기
      1. DIP 타입 사용하는 아두이노 우노에서 칩을 뺀 후 그 자리에 삽입하여 사용
      2. 보드 - MiniCore - ATmega328 & 기타 설정

     

Designed by Tistory.