1. upload 가 이상해
어느때 부턴가 arduino 에 sketch 를 upload 하면 다음과 같이 에러를 냈습니다. 뿜뿜~.
뭐지? 하고 찾아보다가 보니 bootloader 가 새롭게 업데이트 되면서 발생한 문제라고 하는군요.
Arduino IDE 가 업데이트 되면서 자동으로 바뀐것 같습니다.
기존에 선택되어 있던 "Processor : ATmega328P" 이 아니라...
아래와 같이 Processor 의 종류를 "ATmega328P (Old Bootloader)" 로 바꾸어서 upload 하면 해결 됩니다.
Tools > Processor > ATmega328P (Old Bootloader)
찾아보니 이런 내용이 올라와 있네요.
제가 즐겨 쓰는 arduino nano 버전에 사용되는 ATmega328P 에만 관련이 있어 보입니다. (Uno 도 마찬가지?)
* Getting Started with the Arduino Nano
- https://www.arduino.cc/en/Guide/ArduinoNano
일단 해결은 되었으니, 당시에는 급하게 Bootloader 까지 업데이트 할 필요는 없었습니다.
2. Bootloader 를 업데이트 해보자
새로 올라온 Nano 용 Bootloader 는 몇가지 장점이 있다고 합니다.
* Arduino Nano ATmega328P bootloader difference
- https://arduino.stackexchange.com/questions/51866/arduino-nano-atmega328p-bootloader-difference
1. Optiboot will not go into an endless reset loop after a watchdog reset. ATmegaBOOT will.
2. Optiboot expects the upload communication at 115200 baud. ATmegaBOOT, 57600.
This is the reason why the old boards don't work with the Tools > Processor > ATmega328P selection and vice versa.
watchdog 을 리셑 후, 무한루프에 빠지는 문제와, 통신 속도가 달라졌다고 합니다. (저는 못느꼈던 부분....)
추가로 Bootloader 가 작아지면서, 더 많은 소스를 올릴 수 있게 되었다지만, 여분의 부분을 사용하게끔은 아직 안되었다고 하네요.
여분의 메모리 공간 활용을 위해서, 새 Bootloader 는 Optiboot 는 Uno 와 동일하므로,
Nano 이지만, 편법으로 Uno 로 설정하고 Bootloader 를 입히면 된다 합니다.
아직 큰 소스를 제작하지도 않는지라, Uno 용으로 Bootloader 를 입히는 것은 나중에 해보겠습니다.
3. Arduino as ISP 로 연결
궁금하니 새로운 Bootloader 를 올려보기로 합니다.
Bootloader 를 입히는 방법은 여러가지가 있습니다만,
저는 여분의 Arduino Nano / Micro 를 상호 사용하여 Bootloader 를 입히는 방법으로 진행합니다.
이때 사용되는 interface 는 ICSP header 를 사용합니다.
지금까지 arduino 를 사용하면서, 이 ICSP header 가 필요할까? 했는데, 이럴 때 필요하네요.
새롭게 Bootloader 를 입힐 arduino 는 ICSP 에 연결하고,
PC 와 연결되는 arduino 는 ISP 모드로 사용됩니다.
그럼 하나하나 진행해 볼까요.
4. Pin 연결
ISP 모드로 연결되는 arduino 를 SOURCE 라고 칭하고, 새로운 Bootloader 가 입히게 될 arduino 를 TARGET 이라고 하겠습니다.
TARGET 의 ICSP header 와 SOURCE 의 pin 이 어떻게 연결되는지 표로 만들어 봤습니다.
아래는 Arduino Micro 가 SOURCE 로 했기 때문에,
Nano 나 다른 기존일 때에는 거기에 맞는 FUNCTION pin 을 찾아서 연결해 주면 됩니다.
Function | SOURCE (Micro) | TARGET ICSP (Nano) ---------------------------------------------- MISO | MISO | 1 5V | 5V | 2 SCK | SCK | 3 MOSI | MOSI | 4 RESET | D10 | 5 GND | GND | 6 ----------------------------------------------
각 Nano 및 Micro 의 pin 의 FUNCTION 과 ICSP header 정보는 다음 그림을 참고해 보세요.
Micro 는 Nano 와 조금 다른 pinout 을 가지므로 주의해야 합니다.
회로도는 다음과 같습니다.
실제로 연결한 사진은 다음과 같습니다.
5. SOURCE 에 올리는 sketch
다음으로, ISP 모드로 연결될 SOURCE 는 "ArduinoISP" sketch 가 올라가 있어야 합니다.
이 소스는 Arduino IDE 가 설치되어 있으면, 기본으로 가지고 있는 소스 입니다.
File > Examples > 11.ArduinoISP > ArduinoISP
저의 경우는 SOURCE 가 Arduino Micro 이므로, 이 micro 에 upload 해주었습니다.
위처럼 Programmer 를 "AVRISP mkII" 에서 "Arduino as ISP" 로 바꾸어 줍니다.
Board | Arduino Nano Processor | ATmega328P Port | COM6 --> Port connected arduino as a SOURCE Programmer | Arduino as ISP
위의 그림과 조금 다르지만, 새로운 소스는 이제 Old Bootloader 가 아니므로
Processor 에서 "ATmega328P" 로 정의해 주면 됩니다.
추가로 주의할 점은,
Programmer 에서 비슷하게 생긴 "ArduinoISP" 항목이 있지만, 속지 말고 "Arduino as ISP" 을 선택해줘야 합니다.
이제 준비가 완료 되었습니다.
6. 쉽게 끝나지 않는다
그렇죠... 이렇게 쉽게 끝나면 아쉽죠.
모든 글을 참조하여 잘 따라 했는데도 불구하고 실패합니다.
"Device signature = 0x000000" 이라는 문구가 중국 복제품이라서 그런가? 라는 생각도 해봤습니다.
중국 복제품은 아래처럼 Unknown board 라고 표시가 되거든요.
그래서, 이 부분을 강제적으로 메모리에 덮어 씌울 수 있는 방법이 없는가도 찾아 봤습니다.
없더군요... (Atmel Studio 라는게 있지만 잘 안됨...)
그래도 안되길래, ICSP header 접속시 1번 pin 을 잘못 인식하여 5V 를 엄한데 꽂아버려
chip 이 타버렸나 생각해 보기도 했습니다. 그렇게 되면 얼마 하지 않지만 또 구입해야 하니까 매우 번거럽게 됩니다.
참고로, 여러 troubleshooting 하면서 알게된 글이 아래 사이트 입니다.
발생할 수 있는 모든 가능성에 대해, 그에 따른 대응방법을 자세하게 적어 놨습니다.
Bootloader 관련하여 문제가 생겼을 시, 어떻게 조치해야 하는지를 알려주는 성지와 같은 글 입니다.
* Have I bricked my Arduino Uno? Problems with uploading to board
7. 심기 일전
다시 처음부터 시작한다는 마음으로
다음날 아침 일찍, 배선도 다시하고 ArduinoISP 도 새로 올려보고, 모든 과정을 다시금 천천히 해봤습니다.
음?!!!!!!!!!!
성공 했네요?!
"Done burning bootloader" 문구가 뜹니다.
성공한 로그를 첨부합니다.
- Bootloader_update_201812.txt
축하 동영상 올라 갑니다. 아래와 같이 SOURCE 와 TARGET LED가 서로 사이좋게 끔뻑끔뻑 하면 됩니다.
확인해봐야 겠죠?
Processor 를 "ATmega328P" 로 변경하고, 아무 sketch 나 올려 봅니다.
잘 되네요.
로그를 첨부합니다.
첫날 연속 실패의 원인은, pin 을 잘못 연결하지 않았나로 추측해 봅니다.
역시 이 취미는 차분하게 해야 합니다.
8. 여러가지...
IDE 가 업데이트 되면서 지 맘대로 Bootloader 도 업데이트 할 수 있게 되었다면,
필시 그 파일이 존재할 터, 찾아봅니다.
C:\Program Files (x86)\Arduino\hardware\arduino\avr\bootloaders\optiboot
요놈!
Atmel Studio 를 잠깐 사용해 보면서 느낀 것은,
기존에 보유하고 있는 Arduino 의 상태에 대해 알아둘 필요가 있었습니다.
예를 들면, memory 크기나, 인식하는 code, Signature, Fuse bit 같은 것들.
아래 소스를 사용하면 ATmega 시리즈를 사용하는 Arduino 의 chip 현황을 자세하게 알 수 있습니다.
* nickgammon/arduino_sketches
- https://github.com/nickgammon/arduino_sketches
특히 "Atmega Board Detector" 를 사용하면 Bootloader 소스 뿐만 아니라 거의 모든 정보를 알 수 있습니다.
여기서도 연결은 Arduino as ISP + ICSP header 조합입니다.
우선 Arduino Nano 의 정보 입니다.
Atmega chip detector. Written by Nick Gammon. Version 1.20 Compiled on Dec 10 2018 at 21:28:36 with Arduino IDE 10803. Attempting to enter ICSP programming mode ... Entered programming mode OK. Signature = 0x1E 0x95 0x0F Processor = ATmega328P Flash memory size = 32768 bytes. LFuse = 0xFF HFuse = 0xDA EFuse = 0xFD Lock byte = 0xCF Clock calibration = 0x87 Bootloader in use: Yes EEPROM preserved through erase: No Watchdog timer always on: No Bootloader is 2048 bytes starting at 7800 Bootloader: 7800: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 7810: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF ...
이대로 끝나면 아쉬우니, Arduino Micro 도 확인해 봅니다.
Micro 는 ICSP header 의 1번 pin 자리가 살짝 다르니 주의해야 합니다. (아래 그림)
후후, 정상으로 돌아온 Arduino Nano 를 SOURCE 로 하고 Arduino Micro 를 확인해 보는 사진입니다.
Arduino Micro 의 정보 입니다.
Atmega chip detector. Written by Nick Gammon. Version 1.20 Compiled on Dec 10 2018 at 21:28:36 with Arduino IDE 10803. Attempting to enter ICSP programming mode ... Entered programming mode OK. Signature = 0x1E 0x95 0x87 Processor = ATmega32U4 Flash memory size = 32768 bytes. LFuse = 0xFF HFuse = 0xD8 EFuse = 0xCB Lock byte = 0xEF Clock calibration = 0x71 Bootloader in use: Yes EEPROM preserved through erase: No Watchdog timer always on: No Bootloader is 4096 bytes starting at 7000 Bootloader: 7000: 0x5F 0xC0 0x00 0x00 0x78 0xC0 0x00 0x00 0x76 0xC0 0x00 0x00 0x74 0xC0 0x00 0x00 7010: 0x72 0xC0 0x00 0x00 0x70 0xC0 0x00 0x00 0x6E 0xC0 0x00 0x00 0x6C 0xC0 0x00 0x00 ...
Micro는 Bootloader 가 훨씬 크네요.
USB 연결을 위한 chip 도 built-in 되어 있고, 나중에 나온 CPU 이니 확장이 많이 되어있는 듯 합니다.
FIN
뭐가 달라졌을까요?
Old Bootloader 를 일부러 선택하지 않아도 된다는 정도?
또한 가장 눈에 띄는건 Baud Rate 입니다.
19200 --> 115200 으로 바뀐걸 아래와 같이 알 수 있네요.
기존
Using Port : COM6 Using Programmer : arduino Overriding Baud Rate : 19200 AVR Part : ATmega328P 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
NEW
Using Port : COM6 Using Programmer : arduino Overriding Baud Rate : 115200 AVR Part : ATmega328P 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
'Software' 카테고리의 다른 글
Software | Google Analytics 를 이용한 블로그 분석 (2) | 2019.04.29 |
---|---|
Software | RTL-SDR USB dongle 과 PC 활용 - 1 (6) | 2019.02.26 |
Software | 블로그를 검색엔진에 노출시키기 (0) | 2018.11.10 |
Software | Gomez Peer 의 서비스 종료 (0) | 2018.11.07 |
Software | 회로설계 프로그램 EAGLE (2) | 2018.09.04 |