일부 아노이노 혹은 usb to serial 장치에는 usb to serial 칩셋으로 atmegaXuX등의 칩셋이 장착되어 있습니다

그리고  대부분은 atmega16u2 칩셋을 사용합니다

그리고 이 칩셋을 해킹?변형? 해서 마우스, 키보드등의 HID 기기로 바꿀 수 있죠

하지만 많은 클론 아두이노들은 크기가 더 작거나 혹은 더 저렴한 칩셋을 사용하여, 변형이 불가능합니다...

즉 DFU 모드에 진입하기 위해서는 atmega16u2칩셋은 필수입니다


아무튼 아두이노를 마우스 같은 HID로 변형하기 위해선 DFU모드에 진입해야 합니다

근대 대부분의 정품 아두이노에선 문제가 없지만

가끔식 클론 아두이노에서 atmega16u2칩셋을 사용하는데도 불구하고, 진입이 안되는 경우가 있습니다

그렇다고 클론아두이노를 안 쓸 순 없구요, 개인적으로 클론 아두이노를 매우 좋아합니다 ㅋㅋ



저같은 경우, atmega16u2칩셋이 장착된6~7000원 짜리 클론 아두이노를 구입했는데 DFU 모드에 진입이 불가능하더군요... ㅂㄷㅂㄷ


처음에는 짝퉁으로 사기인줄 알았습니다만.. 육안으로 정품 아두이노와 회로까지 카피한 제품이라 atmega16u2칩셋은 장착된거 같았습니다

그리고 dfu 모드에 진입하기 위해서, 핀 두개를 접지시킬 떄 순간적으로 아두이노가 리셋은 되지만, dfu모드에 진입을 못하고, 다시 아두이노로 인식하고 있다는걸 눈치채고, 4~5 시간의 구글링을 통해 해답을 찾았습니다.. 랄까 도중에 게임을 했..을지도


대충 구글링을 하면서 알게된것은


기본적으로 아두이노는 usb to serial( 컴퓨터랑 아두이노를 USB로 연결시키는 장치 )와 메인 CPU?로 나뉘어져 있고,

우노 R3 정품 기준으로, CPU격 되는놈은 atmega328칩셋을 사용하고, usb 장치는 atmega16u2칩셋을 사용합니다

그리고 위에서 말 했듯이 클론은 usb장치를 다른놈을 씁니다.. 이름은 까먹었네요

그래서 클론들은 대부분 dfu를 포기하셔야 합니다, 그리고 저 처럼 atmega16u2칩셋이 장착된 클론인데 dfu진입이 불가하다면 저를 따라오세요



두번째로 구글링하면서 알게된것은


dfu진입이 안되고, 계속 아두이노로만 인식되는건 atmega16u2칩셋에 펌웨어가 설치안되었다는것..

혹은 다른 펌웨어가 설치되어 있는 경우라더군요

그래서 atmega16u2칩셋의 펌웨어를 구워줘야 합니다


문! 제! 는! 우리가 기본적으로 atmega16u2칩셋의 펌웨어를 구워줄 떄, dfu프로그램을 이용한다 말이죠...

망했...가 아니라 다른 방법이 있습니다


우리 아두이노는에는 icsp라는것이 존재하는데 이것은 대부분 atmegaXuX칩셋과 atmegaX칩셋등 처럼 펌웨어를 설치 할 수 있는 칩셋에 하나식 박혀 있습니다

그리고 우리는 이놈을 이용해서 칩셋의 펌웨어를 구울 수도 있고, 다른 아두이노를 구울 수도 있습니다

즉 usb칩셋을 새로 굽기 위해서 한개의 아두이노가 더 필요합니다



뭐 더 자세한것은 저도 잘 모르니.. 따라만 해봅시다



먼저





사진처럼 아두이노( 아두이노 1 이라 명칭 )의 cpu칩셋과 연결된 icsp( ICSP1 )과 dfu 진입이 안되는 아두이노( 아두이노 2 )의 usb 칩셋의 icsp( ICSP2 )을 연결해주세요

참고로 핀 하나(PIN 5 )는 D10에 연결해야 합니다


꼽는게 어렵다면 그냥 사진보고 그대로 똑같이 해주세요


arduino_sketches-master.zip

그리고 위 파일을 다운받아, 압축을 풀어줍니다


일단 아두이노 1하고 컴퓨터랑 연결해줍니다

그러면, 아두이노 2에도 전원도 들어올겁니다


일단 icsp의 연결이 정상적으로 잘 되었는지 확인을 위해서

( 여기 부분은 생략하셔도 됩니다 )

아까 압축을 푼 파일에서

Atmega_Board_Detector폴더에 들어가서 Atmega_Board_Detector.ino를 열어서 업로드 해줍시다


업로드를 해준 뒤, 시리얼 모니터를 열고, 보트 레이트를 115200으로 설정해준뒤.

시리얼 모니터에 이런식으로 뜬 다면 성공적입니다



Atmega chip detector
Atmega chip detector.
Written by Nick Gammon.
Version 1.19
Compiled on Dec  4 2016 at 04:55:30 with Arduino IDE 107011.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x94 0x02
Unrecogized signature.
LFuse = 0xFE
HFuse = 0x00
EFuse = 0xFE
Lock byte = 0x00
Clock calibration = 0x00

First 256 bytes of program memory:

~생략~

Programming mode off.


만약에 ICSP programming mode 모드에 진입이 실패했다던가, 그러면 다시 iscp를 연결해주세요







이제 usb칩셋을 구워주면 되겠군요!

아까 압축을 풀어준 폴더로 갑니다 그리고 Atmega_Board_Programmer 폴더로 가신뒤,

Atmega_Board_Programmer.uno를 업로드 해준뒤 똑같이

시리얼 모니터를 열어주신뒤, 보트 레이트를 115200으로 설정해주세요

참고로 자작 아두이노를 만들 때? usb 칩셋 혹은 cpu 칩셋을 구울 떄 사용하지만,

지금의 경우도 usb 칩셋에 에러가 있는거니깐.. 새로 구워버립시다 ㅋ


시리얼 모니터를 열면


Atmega chip program
Atmega chip programmer.
Written by Nick Gammon.
Version 1.37
Compiled on Dec  4 2016 at 05:02:27 with Arduino IDE 107011.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x94 0x28
Unrecogized signature.
LFuse = 0xFE
HFuse = 0x00
EFuse = 0xFE
Lock byte = 0x00
Clock calibration = 0x00
Programming mode off.
Type 'C' when ready to continue with another chip ...



이렇게 뜰겁니다( 안 뜨는 경우도 있습니다 )

시러얼 모니터에 C를 입력해주시면


Atmega chip programmer.
Written by Nick Gammon.
Version 1.37
Compiled on Dec  4 2016 at 05:02:27 with Arduino IDE 107011.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x94 0x89
Processor = ATmega16U2
Flash memory size = 16384 bytes.
LFuse = 0xFF
HFuse = 0xD9
EFuse = 0xF4
Lock byte = 0xFF
Clock calibration = 0x95
Bootloader address = 0x3000
Bootloader length = 3380 bytes.
Type 'Q' to quit, 'V' to verify, or 'G' to program the chip with the bootloader ...


이렇게 뜨는데, G를 눌러주시면 usb칩셋의 펌웨어를 굽워줍니다


참고로 usb 칩셋 뿐만 아니라 cpu 칩셋의 펌풰어도 위 파일로 굽기 가능합니다


ㅅㄱㅇ








( 사진, 자료 출처 : http://www.gammon.com.au/bootloader )

( 정보 출처 : http://arduino.stackexchange.com/questions/13292/have-i-bricked-my-arduino-uno-problems-with-uploading-to-board )









blog image

Written by Pichachu