본문 바로가기
Study/Arduino

아두이노 부트로더 구조

by Answer Choi 2015. 12. 14.
반응형

※아두이노 위키백과를 바탕으로 작성하였습니다.



먼저 Arduino는 두개의 ATmega로 구성되어 있습니다.


ATmega16U2는 USB-Serial 컨버터의 역할을 하는 녀석이고,


ATmega328P는 부트로더와 앱(APP)이 들어가는 녀석입니다.


구조를 보면 아래의 그림과 같습니다.

"Arduino Uploader ko" by Dolicom - 자작. Licensed under CC BY-SA 3.0 via 위키미디어 공용 - https://commons.wikimedia.org/wiki/File:Arduino_Uploader_ko.svg#/media/File:Arduino_Uploader_ko.svg


아두이노의 USB로 전원이 연결되면 ATmega16U2를 거쳐 UART를 통해 ATmega328P로 전달됩니다.


"AVR8 Bootloader Flash Config" by Dolicom - 자작. Licensed under CC BY-SA 4.0 via 위키미디어 공용 - https://commons.wikimedia.org/wiki/File:AVR8_Bootloader_Flash_Config.png#/media/File:AVR8_Bootloader_Flash_Config.png


ATmega328P의 Flash 영역을 보면 0번지부터 프로그래밍을 할 수 있고, 뒷부분에 부트로더가 장착되어 있습니다.


Arduino는 AVR과 같은 체계의 부트로더를 사용하는데 BOOTRST비트가 1이면 0번지(APP영역)부터


시작을 하게되고, BOOTRST비트가 0이면 부트로더의 시작주소부터 시작하게 됩니다.


부트영역의 공간은 BOOTSZ1, BOOTSZ0 에 의해 총 4가지 영역의 크기가 선택됩니다.


하지만 아두이노가 리붓 될 때마다 BOOTRST 비트 퓨징을 매번 하는것이 쉽지 않아 BOOTRST비트는


0으로 고정하고 부트로더에서 업로드를 할지 0번지(APP영억)부터 시작할지를 결정합니다.


"AVR bootloader Proc" by Dolicom - 자작. Licensed under CC BY-SA 4.0 via 위키미디어 공용 - https://commons.wikimedia.org/wiki/File:AVR_bootloader_Proc.jpg#/media/File:AVR_bootloader_Proc.jpg


부트로더의 실행 순서는 위 그림과 같은데, 전원이 인가되면 PORT D를 입력으로 설정합니다.


PORT D 핀의 특정핀이 1이면 0번지(APP)영역이 실행되고, 0이면 부트로더로 진입합니다.


그리고 프로토콜을 확인하고, 유효한 프로토콜이면 프로토콜대로 작업을 수행하게 됩니다.


추가로 시리얼 터미널 연결시 Arduino가 리셋되는 것을 확인 할 수 있는데, 시리얼 연결시 


부트로더로 들어와 리셋명령을 수행하는 것을 확인할 수 있습니다.





반응형

'Study > Arduino' 카테고리의 다른 글

플래쉬 다운로딩이 안될때  (0) 2016.08.30
자주쓰이는 체터링방지 버튼(Button) 코딩법  (1) 2016.06.13
hex string to byte array  (0) 2016.06.01
Intel Edison 초기설정하기  (0) 2015.11.23
arduino uno  (0) 2015.03.26

인기글