'arduino nano'에 해당되는 글 4건

  1. 2020.02.16 Hardware | 고장난 Arduino Nano 수리기
  2. 2019.03.18 Hardware | PN523 - RFID / NFC breakout 보드
  3. 2018.12.11 Software | Arduino Nano Bootloader 를 update 해보자
  4. 2017.03.31 Hardware | Arduino nano 조립기

Hardware | 고장난 Arduino Nano 수리기

|

1. Arduino Nano 고장내기


Arduino 를 가지고 놀다 보면, 전원 +/- 극성을 바꿔서 input 으로 넣거나 하면서 부품을 태워 먹을 수 있습니다.

저는 이런 식으로 해서 arduino nano 두 개를 고장냈네요.


한 번은, DIY 한 Arduino 2560 에 bootloader 를 입히면서,

또 한 번은 CO2 센서 동작 확인하면서 GND 입력에 전원을 잘 못 인가하면서.


두 가지 모두, 회로적으로 전원 +/- 를 쇼트 시키면서 발생했습니다.

Arduino nano 에서 매캐한 연기가 피어오르며, diode 가 타버렸습니다.


아래 사진에서 USB 쪽 diode 가 부풀어 올랐고, 갈라진 모습을 보여줍니다. 저기서 연기가 피어 오릅니다.

냄새가 맹독류라 그런지 (아마도 발암 물질) 집에서 태우면 냄새가 꽤 오래 남습니다. ㅠㅠ



다행인 것은 회로가 short 되면, 그 역전류를 diode 가 받으면서 타 주었기 때문에, 다른 부품의 손상을 방지 할 수 있었습니다.




2. 교환 diode 찾기


제가 가지고 있는 arduino nano 는 Chinese fake 제품이어서 그런지, S4 라고 적혀 있어 사양이 조금 다를 수 있습니다만,

Original arduino nano 에 들어가는, 전원쪽 diode 는 다음 부품입니다.


MBR0520-TP

- MBR0520LT1-D.PDF



사양서를 보면, 20V / 0.5A Schottky Doide 임을 알 수 있습니다.

이왕 이렇게 되었으니, 오리지널 제품과 동일한 diode 를 넣어 주면 더 좋을 듯 합니다.


AliExpress 에서 검색하니 팔고 있어서 주문합니다.


* 100pcs SMD diode 0805 SOD-123 1N5819 1N4007 1N4148 MBR0520 MBR0530 MBR0540 B2 B3 S4 T4 SOD-323 1206 1N4148WS 1N5819WS B5819WS
    - https://www.aliexpress.com/item/4000331408283.html



도착샷은 예의.



Diode 마킹이 B2 = MBR0502 가 아니라, SD 라고 되어 있네요.



또 이상한거 보낸거 아냐? 라고 생각해서 찾아 봤습니다.


MBR0520

- MBR0520.pdf


제조회사마다 마킹이 다르게 나왔을 수 있네요. 이번에 구입한 회사는 마킹을 B2 대신에 SD 를 사용한 것 같습니다.



물건 도착은 나중 일이고, 일단 기존 가지고 있던 diode 를 이용하여 수리해 보기로 합니다.




3. 적당한 다른 대체 diode 찾기


가지고 있던 arduino nano 두 개나 태워먹어 버리자, aliexpress 에서 부품 오기만을 기다릴 수가 없었습니다.

지금까지 이 취미 하면서 구입하여 보유해 놨던 diode 들 중에 적당한 놈을 찾아 봅니다.


* 7 kinds*10pcs=70pcs/lot SMD diode package / M1 (1N4001) / M4 (1N4004) / M7 (1N4007)/ SS14 US1M RS1M SS34 KIT

- https://www.aliexpress.com/item/32774058057.html



M1 부품 소비가 많아, 일전에 동일한 업자에게 또 한번 구입하였습니다.



M1 (1N4001) / M4 (1N4004) / M7 (1N4007)

M1 (1N4001) 이 50V / 1A 로, 그나마 MBR0520-TP 의 20V / 0.5A 와 비슷하네요.



SS14

허용 전압과 전류가 너무 낮아서 안되겠군요.



SS34

전압은 40V 으로 M1 보다는 낫지만, 허용 전류가 너무 높습니다.



US1M

말도 안되게 높은 전압때문에 패스.



RS1M

진심 1000V ?!!!!



결과적으로 spec. 비교 결과, M1 (1N4001) 이 가장 적당한 diode 되겠습니다.


다만, 주의할 점은, 20V / 0.5A 이었던 허용 전류/전압이, 그 두배 이상인 50V / 1A 가 되었으므로,

앞으로 short 시에는 diode 는 멀쩡하지만, 다른 중요한 부품들을 태워 먹을 수 있는 가능성이 생겨버렸습니다.


MBR0520-TP 가 도착하면, 그 때 또 바꿔 줘야겠네요.





4. M1 이식


M1 으로 납땜하여 붙여 줍니다.



PCB 패턴보다 조금 큰 diode 인지라, 붙이는데 애좀 먹었네요.

열을 너무 많이 가하면 고장나는 부품이라, 깨끗하게 붙이면서 열을 가하지 않게 하느라 작업에 시간이 걸렸습니다.


수리 후, 동작 확인해 보니, 전원도 들어오지 않던 arduino nano 가, 언제 그랬냐는 듯 잘 동작합니다.

Sketch upload 및 센서 인식에도 전혀 문제가 없네요.


Mission Completed!




4. 원래 제품으로 수리


MBR0520 (SD) 가 도착 했으니, 나머지 arduino nano 하나도 수리해 봅니다.

수리라고 해 봤자, 고장난 부품 때어 낸 자리에 새 부품 납땜 하는 것이지만요.



애정을 담아 납을 듬뿍 발라 줬습니다.

Diode 가 작아서 충분히 인두 팁을 기판에 접근 시킬 수 있고, pin point 로 납을 먹일 수 있어 flux 없이도 쉽게 했습니다.


임시로 M1 (1N4001) 을 사용하여 수리한 것도 MBR0520 로 바꿔 줘야 하나, 귀찮아서 그냥 사용 할람니다.



두 개 모두 Sketch 도 업로드 되고, 동작도 잘 됩니다.

이상 arduino nano 다이오드 수리기 였습니다.



And

Hardware | PN523 - RFID / NFC breakout 보드

|

이 글은, 아래 포스트에서 예고 했듯이, RFID / NFC 를 arduino 를 이용하여 tag를 인식시켜 보는 글 입니다.


* Book | 훤히 보이는 RFID/USN - Get to know RFID/USN

https://chocoball.tistory.com/entry/Book-Get-to-know-RFID-USN





1. 대응 가능한 chip


RFID / NFC 를 읽을 수 있는 chip 중에 PN532 가 FeliCa 도 인식할 수 있으며, 대중적으로 구입 가능하다는 것을 알게 되었습니다. (범용)


* RFID Selection Guide - Adafruit Industries

https://cdn-shop.adafruit.com/datasheets/rfid+guide.pdf

rfid+guide.pdf



PN5xx 시리즈 중에서 시중에서 구입 가능한, 그리고 xx 부분의 숫자가 큰 것으로는 PN532 가 있더군요.

가장 우수한 chip 으로는 PN544 입니다만, 관련 breakout 은 5만원 이상이었습니다.


저렴하게 AliExpress 에서 골라서 구입합니다.


* 1Set GREATZT PN532 NFC RFID Wireless Module V3 User Kits Reader Writer Mode IC S50 Card PCB Attenna I2C IIC SPI HSU For Arduino

https://www.aliexpress.com/item/1Set-GREATZT-PN532-NFC-RFID-Wireless-Module-V3-User-Kits-Reader-Writer-Mode-IC-S50-Card/32859551116.html



- User manual : PN532_Manual_V3.pdf


[Features]

1. Gilt PCB and Small dimension and easy to embed into your project

2. Support I2C, SPI and HSU (High Speed UART), Change between those modes

3. Support RFID reading and writing

  1) SupportP2P communication with peers

  2) Support NFC with Android phone


4. Typical Operating Distance have been updated to 5cm~7cm reading distance

5. Work in NFC Mode or RFID reader/writer Mode

6. RFID reader/writer supports:

  1) 1k, 4k, Ultralight, and DesFire cards

  2) ISO/IEC 14443-4 cards such as CD97BX, CD light, Desfire, P5CN072 (SMX)

  3) Innovision Jewel cards such as IRT5001 card

  4) FeliCa cards such as RCS_860 and RCS_854


7. Plug and play, for compatible

8. Built in PCB Antenna, with 4cm~6cm communication distance

9. On-board level shifter, Standard 5V TTL for I2C and UART, 3.3V TTL SPI

10. Work as RFID reader/writer

11. Work as 1443-A card or a virtual card

12. Exchange data with other NFC devices such as smartphone



[Package Included]

1 x1PCS*PN532 NFC RFID Module

1x 2.54mm spacing 4pin Cable

1xMifare One S50 White Card

1xMifare One S50 Key Card

1x12P bended male pins


사양을 보면 FeliCa 도 읽을 수 있다고 되어 있습니다.

FeliCa 는 일본 지하철 / 국철에서 사용할 수 있는 Suica / PASMO 카드에 사용된 기술입니다.

마침 일본에서 사용했던 Suica / Pasmo 카드를 가지고 있으니, FeliCa 대응 가능한 이 breakout 을 이용할 수 있겠네요.


다만, fake 제품은 읽을 수 없다고 합니다. (나중에 안 사실)

AliExpress 에서 구매할 수 있는 저가품이다 보니, 아마 불가능할 것 같다는 느낌은 듭니다.





2. 도착


배송에 한달정도 소요되었습니다.



구성품은 다음과 같습니다.

Tag 종류가 둥그런 것과 카드형식, 두가지가 들어 있네요.



Breakout 보드의 확대 사진입니다.



뒷면입니다. I2C 용 pin head 와 SPI 용이 따로 구분되어 있습니다.



Arduino 와 연결하기 위해서 pin head 들을 납땜 했습니다.

납땜 팁이 오래 쓰면서 산화되어 버려 이제는 납볼이 잘 생성되지 않았지만, 어떻게든 이쁘게 된것 같네요.







3. Library 설치


이 보드에 관한 제작 / 판매하는 사이트를 따라가다 보면 Seeed Studio 라는 회사가 떠오릅니다.

관련한 source 들은 아래 GitHub 에서 공유되어 있습니다.


* elechouse/PN532

https://github.com/elechouse/PN532


위의 사이트에서 설명되어 있기론, 아래 두 파일을 Arduino libraries 폴더에 압축을 풀어서 copy 하라고 합니다.

결국 위의 GitHub 의 파일과, 추가로 Don 이라는 사람이 만든 NDEF 파일을 Arduino > libraries 에 설치하면 준비는 끝납니다.


PN532-PN532_HSU.zip

NDEF-master.zip


위에서 시키는 대로 하면, PN532 directory 가 많아지므로, 구분을 위해 prefix "elechouse" 를 붙여서 아래처럼 저장했어요.



다른 source 로는, 가장 유명한 adafruit 에서 나온 PN532 library 를 설치하면 됩니다.


* adafruit/Adafruit-PN532

https://github.com/adafruit/Adafruit-PN532


위에서 파일을 다운로드 받아 libraries 에 copy 해도 되고, 아래처럼 Library Manager 를 이용하여 install 해도 됩니다.



다만, adafruit 소스에는 HSU (High Speed UART) 연결방식이 지원되지 않습니다.

그러니 HSU 를 사용하고 싶으면, 처음에 소개된 elechouse source 가 필요합니다.





4. I2C 연결


이제 소스를 올리고 RFID 인식을 시켜 봅니다.

Arduino 와 연결 방식은 I2C / SPI / HSU 가 있으니, 먼저 가장 단순한 I2C 를 이용해 봅니다.


아래처럼 DIP switch 를 I2C 방식으로 변경합니다.



문제 없이 I2C 통신이 이루어 지는지 I2C detect 소스로 확인해 봅니다.

방법은 예전에 올렸던 아래 포스트에서 확인해 보세요.


* Hardware | Gyroscope GY-521 MPU-6050 을 사용해 보자

https://chocoball.tistory.com/entry/Hardware-Gyroscope-GY521-MPU6050



PN532 breakout 의 측정된 주소로 "0x24" 가 나왔네요.

연결은 다음과 같이 합니다.


   PN531  | Arduino Nano
-------------------------
    VCC   |     5V
    GND   |     GND
    SDA   |     A4
    SDL   |     A5
-------------------------


연결 layout 은 다음과 같습니다.

구매한 breakout 보드와 동일한 fritzing 파트를 찾을 수 없어서 adafruit 에서 나온 것을 사용하였습니다.



여타 I2C 연결이 그러하듯 동일합니다.



아래 sample source 를 arduino 에 로드합니다. iso14443a_uid 가 처음 시작하기에 가장 평범한 소스라고 하네요.


File > Examples > elechouse_PN532 > iso14443a_uid



Serial Monitor 에서 확인하면 다음과 같이 인식합니다!



위의 소스의 단점은 준비 상태로 되는 것과 카드를 태킹하면 인식에 시간이 좀 걸린다는 것 입니다.

실생활에 전혀 사용할 수 없는 수준이네요.


그럼 이번에는 Adafruit 의 동일한 소스를 사용해 봅니다.


File > Examples > Adafruit PN532 > iso14443a_uid


adafruit 소스는 먼저번 소스와는 다르게, IRQ 와 RESET (RSTO) 를 추가로 연결하는 부분이 존재합니다.


// If using the breakout or shield with I2C, define just the pins connected
// to the IRQ and reset lines.  Use the values below (2, 3) for the shield!
#define PN532_IRQ   (2)
#define PN532_RESET (3)  // Not connected by default on the NFC Shield

// Uncomment just _one_ line below depending on how your breakout or shield
// is connected to the Arduino:

// Use this line for a breakout with a SPI connection:
//Adafruit_PN532 nfc(PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS);

// Use this line for a breakout with a hardware SPI connection.  Note that
// the PN532 SCK, MOSI, and MISO pins need to be connected to the Arduino's
// hardware SPI SCK, MOSI, and MISO pins.  On an Arduino Uno these are
// SCK = 13, MOSI = 11, MISO = 12.  The SS line can be any digital IO pin.
//Adafruit_PN532 nfc(PN532_SS);

// Or use this line for a breakout or shield with an I2C connection:
Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);


위의 소스의 일부분에서 보여주는 것 처럼 SPI 부분을 주석처리 하고, I2C 부분을 활성화 시킵니다.

두개의 pin 연결이 아래처럼 추가되었습니다.


   PN531  | Arduino Nano
-------------------------
    VCC   |     5V
    GND   |     GND
    SDA   |     A4
    SDL   |     A5
    IRQ   |     D2
   RSTO   |     D3
-------------------------


결과는 인식률과 인식 속도가 엄청 빨라졌습니다.

결국 IRQ / RESET 핀이 준비상태 및 인식 처리를 추가로 담당한다는 것을 예상할 수 있습니다.

Serial Monitor 결과는 다음과 같습니다.



참고로 위의 소스로 신용카드 (버스카드) 를 인식 시키면 "Mifare Classic" 으로 읽어보라고 메시지가 뜹니다.


File > Examples > Adafruid PN532 > readMifareClassic 을 로드 시켜 봅니다.



뭔가 정보를 더 많이 뿌려줌과 동시에, "Mifare Classic" 이라고 이야기 해 줍니다.


조금 벗어난 이야기 이지만,

RFID / NFC 분야도 존재하는 규격이 많아서 chip 제조사로서는 골치가 아플 듯 합니다.


이것도 결국 기술 로열티와 표준 제정 이권싸움의 결과겠죠.

Thunderbolt 도, 결국은 Thunderbolt 3 = USB Type-C 로 통합되듯, 언젠가 RFID / NFC 도 통합이 되었으면 좋겠습니다.





5. SPI 연결


이제 SPI 연결을 시도해 봅니다. 역시 많은 데이터 교환은 I2C 보다는 SPI 방식입니다.

먼저, Software SPI 연결법 입니다.


   PN531  | Arduino Nano
-------------------------
    VCC   |     5V
    GND   |     GND
    SCK   |     D2
    MISO  |     D5
    MOSI  |     D3
    SS    |     D4
-------------------------


소스는 adafruit 의 것을 이용해 봅니다. (elechouse 것도 상관 없슴)


File > Examples > Adafruit PN532 > readMifare


이미 소스에서 SCK / MOSI / SS / MISO 의 pin 번호를 정희해 놨으므로, 그에 맞게 arduino 와 연결해 줍니다.



TIMEOUT! 이 뜨긴 합니다만, 결과는 아래와 같이 잘 나옵니다.

아무래도 Software SPI 여서 그런 듯 합니다.



역시 SPI 는 Hardware SPI 죠. Hardware SPI 법으로 구동해 봅니다.


   PN531  | Arduino Nano
-------------------------
    VCC   |     5V
    GND   |     GND
    SCK   |     D13
    MISO  |     D12
    MOSI  |     D11
    SS    |     D4
-------------------------


SS pin 은 어느 digital IO pin 이나 상관 없습니다.

이미 PN532_SS 를 4 번 pin 으로 정의해 놨으니, 그 pin 을 그대로 사용합니다.



나머지 pin 들은 각각의 arduino 에 맞게 연결하면 됩니다.

참고로 arduino nano 는 위의 주석에 설명되어 있는 것처럼 SCK = 13, MOSI = 11, MISO = 12 로 맞추면 됩니다.

이는 아래 그림처럼 실제 nano 의 pin out 과 동일합니다.



결과는 다음과 같이 나옵니다. TIMEOUT! 도 없고 인식도 가장 빠른것 같아요.



동영상도 올려 봅니다.






6. FeliCa 인식


FeliCa 가 된다고 하니, electhouse 소스의 FeliCa_Card_Read 를 실행해 봅니다.


File > Examples > elechouse_PN532 > FeliCa_Card_Read


실망스럽게도 PASMO 는 인식되지 않았습니다.

당연하게도 Mifare (ISO14443A) 카드들에게는 전혀 반응하지 않았구요.


단, 희한하게도 일본에서 사용했던 Times (한국의 SOCAR 같은 서비스) 카드는 이 소스로 읽혔습니다.



FeliCa 도 여러 종류가 있는 듯 합니다.

아쉽게도 지하철에 사용되는 FeliCa 인, 일본의 PASMO 와 싱가포르의 EZ-Link 는 어떤 소스에도 읽히지 않았습니다.





7. High Speed UART 연결


특이하게 HSU 라는 연결 방법을 제공합니다. 이는 High Speed UART 의 약자.

이 HSU 는 Hardware Serial (Serial1) 을 바탕으로 소스가 만들어졌습니다.



다만, 위의 표에서 보이듯이, Hardware Serial 를 사용하는 지라, 일부 arduino 에서는 Serial Monitor 를 열어서 확인할 수 없게 됩니다.

Arduino Nano 도 Hardware Serial 은 USB 통신에 점유되어 있어서 "Serial1" 을 사용할 수 없었습니다.



하늘이 무너져도 솟아날 구멍은 있다던가요, 가지고있는 arduino micro 에서는 사용 가능했습니다.

그럼 아래 source 를 arduino micro 에 업로드 해봅니다.


File > Examples > electhouse_PN532 > iso14443a_uid


PN532_HSU 쪽을 활성화면서 "Serial1" 을 사용하게 합니다.



Arudino micro 와의 pin 연결은 다음과 같습니다.


   PN531  | Arduino Micro
--------------------------
    VCC   |     5V
    GND   |     GND
    SDA   |     RX
    SDL   |     TX
--------------------------


잊지 말아야 할 것은, DIP switch 를 HSU 으로 설정해 둬야 합니다.



Arduino micro 의 RX / TX 와 연결하여 HSU 인겁니다.



오오오오! 느낌적으로 SPI 보다 더 빠른 듯 합니다. 이게 가장 빠르네요.




결과는 이렇게 보이구요.



동영상도 올려 봅니다.



그럼 arduino nano 처럼 Hardware Serial 여유가 없는 arduino 는 안되는거냐!

찾아보니 방법을 GitHub 의 설명에서 친절하게 알려주고 있었습니다.


아래 소스처럼 "SoftwareSerial.h" 를 이용하여 구현이 가능합니다.

우선 바로 아래는 Hardware Serial 로 구현된 부분을...


#include "PN532_HSU.h"
#include "PN532.h"

PN532_HSU pn532hsu(Serial1);
PN532 nfc(pn532hsu);

void setup(void)
{
	nfc.begin();
	//...
}


아래처럼 SoftwareSerial.h 를 추가하고 관련된 pin 을 정의해 주면 됩니다.

뭐, 관련된 함수를 "PN532_SWHSU.h" 에서 구현해 줘서 가능한 것이지만 말입니다.


#include "SoftwareSerial.h"
#include "PN532_SWHSU.h"
#include "PN532.h"

SoftwareSerial SWSerial( 10, 11 ); // RX, TX

PN532_SWHSU pn532swhsu( SWSerial );
PN532 nfc( pn532swhsu );

void setup(void)
{
	nfc.begin();
	//...
}


최종적으로 Hardware Serial 관련 부분을 주석처리 하고, SoftwareSerial 을 활성화 하는 코드를 추가하면 됩니다.



Pin 연결은 위에서 정의한 D10 과 D11 에 각각 연결하면 됩니다.

참고로, SDA 는 TX 이고, SDL 은 RX 이므로, SDA(TX) <--> D10 (RX), SDL(RX) <--> D11(TX) 가 됩니다.


   PN531  | Arduino Nano
-------------------------
    VCC   |     5V
    GND   |     GND
    SDA   |     D10
    SDL   |     D11
-------------------------


잘 구동합니다만, 뭔가 타이밍이 맞지 않은지 authentication fail 이 뜹니다.

소스코드에서 수정해야 할 부분이 있는듯 보입니다만, 확인이 어느정도 되었으니 패스.






8. 확인한 RFID / NFC 카드들


마지막으로, 본 포스트에서 확인용으로 사용된 카드들을 소개합니다.



위는 PN532 breakout board 를 구입하면 기본으로 딸려오는 tag 들 입니다. 하나는 원형, 하나는 카드 모양입니다.



위는 싱가포르 출장때 구입해서 사용했던 지하철 패스카드 입니다. 충전식이죠.

아쉽지만, 구입한 PN532 가 짝퉁이라서 못 읽는 것인지 모든 소스와 연결 방법에서 읽기를 실패했습니다.



마찬가지 FeliCa 인식에서 실패한 일본 PASMO 입니다. 일본에서 거주할때 신세를 졌었죠.



저의 회사 출입 카드 입니다. 5년전에 찍은 거라 얼굴이 지금보다 젊어 보이네요. ㅠㅠ



버스카드 겸용인 신용카드 입니다. Mifare Classic 입니다. 잘 읽힙니다.

전용 어플을 이용하면 RFID 정보도 덮어 씌기가 될 듯 한데, 이번에는 도전하지 않았습니다.



유일하게 읽힌 FeliCa 카드 입니다!

다른 소스에서는 전혀 읽히지 않았고, FeliCa Read 소스에서만 유일하게 읽힌 놈입니다.

일본에서 자가용을 운용할 여유가 안되어서, 잘 빌려서 타고 다녔습니다. (SOCAR 같은 서비스)





9. FIN


역시 아쉬운 점은 지하철용 FeliCa 를 읽을 수 없었다는 점 입니다.

뿌듯한건 모든 인터페이스 - HSU, Software HSU, I2C, I2C with RST, Hardware SPI, Software SPI - 모두를 확인해 봤다는 점 입니다.


기회가 되면, 아래 스샷처럼 NXP 에서 나온 어플을 가지고 완벽하게 debugging 을 해보고 싶습니다.

다만, PN544 breakout 보드가 5만원 이상이라는 것 때문에, 일단 여기서 멈춥니다.



And

Software | Arduino Nano Bootloader 를 update 해보자

|

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

https://arduino.stackexchange.com/questions/13292/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 나 올려 봅니다.



잘 되네요.

로그를 첨부합니다.


Sketch_upload_201812.txt



첫날 연속 실패의 원인은, 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

- arduino_sketches-master.zip


특히 "Atmega Board Detector" 를 사용하면 Bootloader 소스 뿐만 아니라 거의 모든 정보를 알 수 있습니다.

여기서도 연결은 Arduino as ISP + ICSP header 조합입니다.


우선 Arduino Nano 의 정보 입니다.

Arduino_Nano_result.txt


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 의 정보 입니다.

Arduino_Micro_result.txt


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



And

Hardware | Arduino nano 조립기

|

1. 시작하기

Aliexpress 에서 판매되는 Arduino nano 는 2가지 버전이 있습니다.

조립되어 있고 USB cable 이 포함되어 있는 버전과, 케이블이 없고 다리들을 납땜해야 하는 버전.


한 700원 차이나지만, 궂이 cable 도 필요 없고 돈도 아낄 겸, 납땜해야 하는 버전도 하나 구입합니다.



납땜 연습에도 적격입니다.



2. 도착

물건 도착하자 마자 찍어놓은 사진입니다.



뒷모습



앞모습



MEGA328P 프로세서 입니다.



3. 완성

그냥 납땜 합니다.

빵판에 다리를 고정시켜 놓고 납땜하면 편합니다.



위에가 납땜한 버전입니다.

layout 상 다른 부분은 오실레이터가 수평이 아닌, 프로세서랑 나란이 위치하고 있는데 다릅니다.




4. 테스트

전원을 넣으면 빨간불이 켜지면서 ready 한 상태가 됩니다.



BME280 sketch 를 올리고 돌려보면 정상 작동하는 것을 확인하였습니다.

우훗!



성공입니다.



FIN

더 필요하면 납땜 버전을 계속 구입하겠습니다.


이제 뭘하지?

'Hardware' 카테고리의 다른 글

Hardware | BMR-C1 heatsink  (0) 2017.04.26
Hardware | Sharp GP2Y1010AU0F dust sensor  (0) 2017.03.31
Hardware | GeForce GTX 560 Ti 수리 실패기  (0) 2017.03.16
Hardware | BME280 sensor  (0) 2017.03.09
Hardware | DSO150 Oscilloscope  (0) 2017.03.07
And
prev | 1 | next