아두이노 우노에 사용되는 MCU 는 ATMEGA328P 이다. 즉, ATMEGA328P-PU 이거나 ATMEGA328P-AU가 일반적으로 사용된다. 보통 DIP 타입의 ATMEGA328P-PU MCU 와 ATMEGA16U2 를 포함한 정품과 동일한 규격의 복제품과 TQFP 타입의 ATMEGA328P-AU MCU 와 CH340 USB 드라이버를 사용하는 복제품이 있다. 둘 다 복제품이다.
기본적으로 우노에 사용되는 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가 켜지고 꺼지며 정상 작동하는 것을 확인할 수 있다.
[정리]
무료 SPICE 프로그램인 QUCS 개요 (0) | 2023.02.26 |
---|---|
MS50SFA2 & MS50SFB2 - nRF52832 모듈 (0) | 2022.03.27 |
MS50SFA2 - nRF52832 모듈 (0) | 2022.03.27 |
Adafruit Feather nRF52 Bluefruit LE - nRF52832 회로도 (0) | 2022.02.24 |
nRF52832 칩의 종류 (0) | 2022.02.23 |