티스토리 뷰

안녕하세요 :) 



저번 포스팅에서는 MCU(Micro Controller Unit)에 대해 이야기하였습니다.


밑의 주황색 글씨가 MCU 관련 포스팅으로 가는 링크입니다. ↓

http://mosesnah.tistory.com/1





오늘은 DIY(Do It Yourself) 프로젝트에서 자주 활용되는 


ATMega328P MCU가 내장된 아두이노 우노(Arduino Uno) R3 개발 보드에 대해


한층 더 깊이 이해해보는 시간을 갖고자 합니다.


이번 포스팅에서는 아두이노 우노의 부트로더(Bootloader)에 대해 소개해드리고자 합니다.




아두이노 우노 R3의 뇌인 ATMega328P는 보드에 탈착/장착이 가능하게 되어 있습니다.



따라서, 어떠한 경우에 의해서 ATMega328P가 고장 나는 경우 (보드의 뇌가 맛이 간 경우)



시중에 파는 ATMega328P를 구매하여 새롭게 교체하실 수 있습니다. (물론 정품 구매 시 :)





그러면 시중에서 구매하여, 집으로 갓 배달 온 ATMega328P를 아두이노 우노에 딱! 하고 끼워 넣으면


마치 기존의 아누이노 우노 R3처럼 작동할까요?





답은 아쉽게도 아닙니다.


왜 그럴까요?


답은 부트 로더(Bootloader) 프로그램 새로 구매한 ATMega328P에 


아직 업로딩 되어 있지 않기 때문입니다.




새로 산 ATMega328P를 아두이노에 장착하기 전


뇌가 완전히 통통 비어 있는 ATMega328P에 



Bootloader라는 소프트웨어를 새로 업로딩 해야 됩니다. 


Bootloader 코드를 주입한 ATMega328P를 아두이노 우노 R3에 장착한다면


완전 새 거 같은 아두이노 우노로 사용할 수 있게 됩니다.



사실 제가 부트 로더라는 녀석에 대해 알게 된 것도 


앞서 언급한 단순한 호기심이 계기가 되었는데요.




아두이노 우노 R3 ATMega328P의 경우에는 


Bootloader 프로그램이 이미 업로딩 되어 있기에


따로 Bootloader를 업로드할 필요 없이 바로 사용해도 작동이 잘 됩니다.






 그렇다면 Bootloader 프로그램의 정체는 도대체 무엇일까요?





 Bootloader라는 녀석은 ATMega328P리셋되었을 때 (컴퓨터로 비유하자면 껐다 다시 켰을 때)


ATMega328P가 제일 먼저 실행하는 소프트웨어 코드입니다.




ATMega328P는 새로 켜졌을 경우 (리셋된 경우)


특정 메모리 주소(Memory Location)로 바로 가서


거기에 쓰여 있는 명령(Instruction)들을 수행합니다.


ATMega328P의 특정 메모리 주소에 쓰인 이 코드들이 바로 Bootloader입니다.



ATMega328P는 Bootloader의 명령들을 1순위로 수행합니다.


업로딩된 스케치 파일도 Bootloader가 실행 된 이후에 실행됩니다.





흔히 우리가 컴퓨터 '부팅 중 (Booting)'이라는 단어도 바로 이 Bootloader와 연관이 되어 있지요.




자 그럼 ATMega328P는 리셋된 후에 Bootloader의 명령들을 수행한다고 했습니다.


그럼 Bootloader'무엇'을 수행할까요?


Bootloader의 플로우 차트(Flow Chart)는 다음과 같습니다. [1]





ATMega328P가 리셋된 후, 실행되는 Bootloader의 명령은 다음과 같습니다.



만약 리셋된 후, Bootloader가 1초 내에 


새로운 코드 파일이 업로드 대기중이라는 신호를 


특정 시리얼 코드(Serial Code)의 형태로 받는다면


기존에 업로딩 되어 있던 코드를 지운 뒤, 새 코드를 업로딩 합니다. 


여기서 말씀드리는 코드는 스케치 파일(.ino File) 코드를 의미합니다.


새 코드가 업로딩이 완료된 경우, 1초를 세는 타이머는 리셋됩니다.




만약 새로 업로드할 코드가 있다는 신호를 1초동안 받지 못했다면 


아두이노 Bootloader는 그냥 기존에 업로딩 되어 있는 코드를 실행합니다.







잠깐, 그러면 그 뜻은 아두이노 IDE에 있는 업로딩 버튼을 누르게 되면


ATMega328P는 강제로 리셋 되는 뜻인가요?







맞습니다.



새 스케치를 업로딩 하기 전


ATMega328P는 강제로 리셋 됩니다.


컴퓨터가 명령을 내리기 때문이죠.


옛날 아두이노 우노의 경우에는 소프트웨어의 레벨로 리셋하는 기능이 없었기에



스케치를 업로딩 하기 전에, 적절한 타이밍에 수동으로 리셋 버튼을 눌렀어야 했습니다.


추후 포스팅에서 자세히 다룰 내용이라 간단히 말씀드리자면


요즘 아두이노는 Data Terminal Read (DTR)을 통해 ATMega328P를 강제로 리셋시킵니다.






혹시 아두이노 우노의 Bootloader라는 존재를 이번 포스팅에서 처음 알게 되었나요?


그런 분들이 혹시나 계신다면, 이 글이 조금이라도 도움이 되었기를 바랍니다.



다음 포스팅 때 보도록 하겠습니다.


감사합니다.










[출처]

   [1] http://blog.solutions-cubed.com/creating-an-arduino-clone/

   [2] http://www.instructables.com/id/Overview-the-Arduino-sketch-uploading-process-and-/

   [3] https://www.baldengineer.com/arduino-bootloader.html


[그림 출처] 

  1. https://blog.exporeal.net/en/rein-forum-takes-digital-transformation-to-expo-real/

  2. https://pixabay.com/ko/arduino

  3. https://ktechnics.com/shop/atmega328p-pu/

  4. https://pixabay.com/ko/arduino

  5. https://www.tekrevue.com/tip/mac-startup-options/

  6. powerpoint로 직접 그림

  7. https://www.arduino.cc/en/uploads/Main/arduino-uno-schematic.pdf


* 그림들이 나온 순서대로 번호를 매겨, 출처를 기입하였습니다. 글쓴이가 직접 만든 이미지의 경우들은 언급해 놓았습니다.





댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함