您当前的位置:首页 > 智能家居 > 重写bootloader可以用ESP8266给Arduino烧录程序 网站首页 智能家居
重写bootloader可以用ESP8266给Arduino烧录程序
发布时间:2017-03-21 22:22:26编辑:透明阅读()
-
在使用Arduino通过串口烧录程序的时候,不知道有没有想过为什么AVR芯片本身不能直接通过串口烧录程序,而Arduino可以。其实是因为Arduino在Avr芯片中内置了一段bootloader程序,也许你会问什么是bootloader,这个问题非常好,bootloader就是这篇教程的核心,也是后续实现智能家居固件自升级的核心。由于我们需要通过ESP8266芯片给Arduino烧录程序,所以我们需要修改Arduino自带的bootloader让它支持ESP8266芯片。
什么是bootloader?
Arduino的官方解释如下:微控制器通常使用一个编程器来更新程序;如果在微控制器中有一个固件可以不用外部编程器可以直接给微控制器安装新的软件,这个固件就叫bootloader;
度娘的解释如下:在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境;
其实bootloader就是处理器中引导系统的一段小程序,Arduino中芯片上电以后先执行特定的固件,检查是否有更新软件请求,如果有更新请求就更新,如果没有更新请求就引导flash中的程序执行。
Arduino中bootloader是怎么更新程序的?
Arduino中的bootloader使用的是STK500的协议,STK500是Atmel公司的并行编程器与avrstudio配套。这段程序是一个简单的状态机,从串口收到不同的指令,程序会进入不同的状态,例如:收到指令‘A’就会返回芯片的数字签名,收到指令‘P’就会进入编程模式,等等。如果有兴趣详细了解可以去阅读bootloader的源码,或者去Atmel官网下载SKT500的协议。
修改bootloader,支持ESP8266
看清楚bootlader的原理后,修改也就很简单了,只需要修改bootloader的初始化,接收数据函数和发送数据函数。
1)初始化
原来的bootloader初始化操作是对串口波特率等信息的初始化,我们还需要在这个基础上增加对ESP8266的初始化,如:工作模式配置、服务器地址、端口配置等
2)接收数据
原来的bootloader接收数据是从arduino的串口缓冲区中接收,使用ESP8266后,是从ESP8266的串口接收数据,所以需要对ESP8266的数据进行识别和转换
3)发送数据
原来的bootloader发送数据是把原始数据直接使用gcc中提供的outp函数,而ESP8266发送数据是需要使用AT指令来发送,所以需要把数据封装在AT指令中发送给ESP8266
修改完成以后,把bootloader重新编译一遍(不会编译bootloader?快去问问度娘),然后烧写到ardino中就可以了。
bootloader写入Arduino
使用AVR ISP写入就可以了,不过由于修改后bootloader变大了,需要修改以下熔丝位
关键字词:Arduino,bootloader,ESP8266