关于bootloader
* 通常情况下MCU烧写程序都需要通过专门的编程器进行。
* 假使每次复位时MCU不是从程序存储器起始位置开始读取命令,而是预先加载一段指令,实现一些设置和功能,再开始执行代码。这样可以极大的方便MCU编程与使用,而这些预先写入的程序代码就是bootloader。
* Arduino通过预先写入的bootloader,当用户通过串口给Arduino板下载程序时,Arduino板首先会复位一次,这样就进入了bootloader。 接着向Arduino板发送特定的下载指令,bootloader识别到这些指令后就会开始接收待更新的程序代码,并写入到内部flash中;如果没有进行下载,bootloader没有识别到下载指令,那么它就会跳转到程序区正常工作。
* 总结上述内容,可以理解为:Arduino之所以能用一根usb线就愉快下载程序的原因就是bootloader。
问题来了:
有些情况下我们需要自己搭建Arduino最小系统板,或者将其嵌入到自己的PCB项目里。这些只要你想都很容易,但是:新出厂的ATmega328p等等MCU里是没有bootloader的,怎么办?这时就需要自己烧写。
烧写bootloader
• 硬件接口
烧写bootloader本质上只是使用编程器烧写一段特殊的程序到MCU中,因此其方法与使用编程器烧写程序是一样的,这个方法在不同厂商、不同种类的单片机上都是不同的。
对于一般的Arduino开发板使用的AVR单片机来说,烧写程序是通过ICSP(in-circuit serial programmming)硬件接口来实现的。