Bootloader是flash中高地址的一个程序区域,通过它可以实现程序的运行控制,程序更新等。本页给出的是通过串口实现在线更新的方法。程序编译环境:icc avr 6.31。
如果你使用Atmega16芯片,7.3728M晶振,1024的bootloader区,19200的波特率,那么你直接使用下面的hex文件就可以了,下载hex文件。
本站的开发板内,预制这个hex文件,可以按照本页的方法用串口线直接更新程序。
否则,你需要对程序进行调整,然后重新编译Bootloader的hex文件,下载软件包,软件中需要更改的部分:
- 芯片的类型
#include <iom16v.h> //选择对应的芯片 - Bootloader区的大小,和ICC的option相对应。
#define BootSize 'd' //1024 - 串口的通讯频率设置,根据晶振大小对应的进行修改。
#define BAU 23 // 7.3728M 19200(计算方法如下图)
下面这个界面计算出UBBR的值正确的前提是CPU选项中的芯片类型和晶振都选择正确。
程序修改之后,进行如下操作,操作详细步骤说明:
1、在ICC中设置设置bootloader选项。
2、编译,这里很容易出问题,因为你的ICC的安装路径,以及下载后存放文件的路径可能会不同,所以刚开始的时候编译可能会出错,解决的方法,Projects—>Options —>Paths 把路径修改为正确的路径,然后再编译。
3、用ISP下载线或JTAG调试器把生成的hex文件烧写到单片机里。
4、配置熔丝,需要用ISP或者JTAG来完成。
其他熔丝位请参考其他文献,在此不作详诉。Boot loader在flash中对应的是高位字节, 选中此熔丝的目的是让程序在复位时从boot loader开始运行,而不是0x0000。(此处再配置熔丝选择BOOTSZ=1024)
然后打开AVR.EXE
上位机操作说明:
1、确保所要升级程序的单片机与PC机的RS232接口连接正常;
2、打开本软件,选定所使用的通讯端口,选定波特率(本软件默认为19200bps,对应单片机使用7.3728MHz晶振)
3、点击 “打开串口” 按钮;
4、请您复位单片机或断电后重新启动单片机系统,此时在芯片信息栏里会出现您所要操作的单片机的相关信息;
其中版本可能显示与实际版本不符,但不影响使用;
5、点击 “载入文件” 按钮,将您要更新的程序载入,完成后会在数据区正下方出现数据占用的页数; 每次都需重新点击“载入文件”选择相应的hex文件,不然下一步无法继续。
6、点击 “下载程序”按钮开始下载,测试在总页数旁边会实时显示已经完成的页数,请耐心等待;
7、当所有程序都更新完后,实时显示的页数与总页数相等,并在信息框中会显示 “程序下载已完成”;
8、点击 “退出BOOT”按钮,此时单片机跳转到0x0000开始运行从串口写入的程序,更新完毕。
想写入下一个程序时,再次点载入文件,然后复位一下单片机,就可以再出现第5步之后的界面了。
说明:上位机借用了别人的软件,此举是为了大家共同学习所用。在单片机复位,如接受不到上位机发出的命令,则自动转到应用程序区运行。
Ps: 此bootloader是由上位机通过串口发出命令控制,在实际的操作中完全可以模拟此程序写出满足自己要求的逻辑炸弹或相应的更新软件。自己做的测试程序 小灯 可以正常显示。