Arduino Bootloader
bootloader 를 보면 일단 microcontroller 에 의해 나뉜다. (쉽게 cpu 라고 생각하자.) 그래서 크게 2가지 소스가 있다.
- AVR bootloader
- Atmel Atmega microcontrollers 용 bootloader
- Arduino/hardware/arduino/avr/bootloaders at master · arduino/Arduino · GitHub
- SAMD bootloader
- Arduino Core for Atmel's SAMD21 processor (used on the Arduino/Genuino Zero, MKR1000 and MKRZero board
- ArduinoCore-samd/bootloaders at master · arduino/ArduinoCore-samd · GitHub
- Atmel Atmega microcontrollers 용 bootloader
- Arduino/hardware/arduino/avr/bootloaders at master · arduino/Arduino · GitHub
- Arduino Core for Atmel's SAMD21 processor (used on the Arduino/Genuino Zero, MKR1000 and MKRZero board
- ArduinoCore-samd/bootloaders at master · arduino/ArduinoCore-samd · GitHub
여기서 용도에 따라 보드 종류에 따라 여러가지로 소스를 나눠놨다. 확인은 안해봤지만 대략적인 동작은 아래 ATmega8/Atmega168 bootloader 와 비슷할 듯 하다.(추측)
ref. 1 에서는 AVR bootloader 중 3가지에 대해 간략하게 설명을 해준다. 정리하면 다음과 같다.
ATmega8 bootloader(source)
- 1KB 의 flash memory 만 사용한다.
- 이것도 invalid data 를 받을 때 timeout 시키지 않는다.
- bootloader 가 동작할 때 6-8초 동안 data 가 보드로 전송되지 않게 해야 한다.
ATmega168 bootloader(source)
- 현재 Arduino 0009 에 들어가 있는 bootloader 는 "Diecimila" 과 "NG" 버전(ATmega168이 장착된)과 거의 같다.
- ATmega168에서 19200 baud 속도로 동작하고, flash memory 의 2 KB 를 사용한다.
- Diecimila 과 NG 버전의 차이점
- 시작시 초반에 새로운 프로그램이 동작하도록 기다려 주는 시간이 있다.(Diecimila 는 시간을 절약하기 위해 1초 미만을 기다리고, NG 는 6~8초를 기다린다.)
- pin 13 LED 를 번쩍이는 횟수(Diecimila 은 한번 깜빡임, NG 는 3번)
- NG 버전의 특징
- Arduino NG 에 들어가있는 bootloader 는 약간 다르다.
- pin 6 에 있는 internal pullup resistor 를 enable 한다.
- RX pin 에 있는 internal pullup 는 enable 하지 않는다.
- invalid data 를 받고 있는 동안에도 timeout 을 하지 않는다. 그래서 만약 reset 하자마자 data 를 upload 하면, 그 sketch 는 절대 동작하지 않을 것이다.
Arduino BT 의 bootloader(source)
- Arduino BT 의 bootloader 는 블루투스 모듈에 대한 초기설정을 한다.
References
- Arduino - Bootloader > Versions of the bootloader
댓글 없음:
댓글 쓰기