历史上的今天
今天是:2024年10月15日(星期二)
2018年10月15日 | AVR使用范例--使用Bootloader 升级芯片内程序详解
2018-10-15 来源:eefocus
Bootloader是flash中高地址的一个程序区域,通过它可以实现程序的运行控制,程序更新等。本页给出的是通过串口实现在线更新的方法。程序编译环境:icc avr 6.31。
如果你使用Atmega16芯片,7.3728M晶振,1024的bootloader区,19200的波特率,那么你直接使用下面的hex文件就可以了,下载hex文件。
本站的开发板内,预制这个hex文件,可以按照本页的方法用串口线直接更新程序。
否则,你需要对程序进行调整,然后重新编译Bootloader的hex文件,下载软件包,软件中需要更改的部分:
芯片的类型
#include //选择对应的芯片
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是由上位机通过串口发出命令控制,在实际的操作中完全可以模拟此程序写出满足自己要求的逻辑炸弹或相应的更新软件。自己做的测试程序 小灯 可以正常显示。
史海拾趣
|
老公开玩笑时说“三八妇女劳动节”,事实上,不幸被其言中。由于上周出差拍摄了一些视频采访,今天编了一天的片子还没编完,晚上对着视频又记录文字,好明天作为字幕用,刚弄完。在这个三八节,我是不折不扣地在劳动。下午给一个朋友打电话,她也正 ...… 查看全部问答> |
|
电路图:如下 此款电路经过调整电阻参数等: 输出负载为14并7串,总电流420MA的灯管; 频率为50KHZ左右; 实验用数字表;负载接线有点绕; 低压85-200V输入时,手碰到电流表420ma不变,当输入大于200V时,手接触电流表,电流就降低1 ...… 查看全部问答> |
|
用的是 飞凌te2440 II 开发板, 上面搭载 WINCE5.0, 我用 Microsoft ActiveSync 4.5通过 usb口连接着计算机进行应用开发, 怎么每连接上几分钟,就会断开连接呢?… 查看全部问答> |
|
Typical storage methods are shown. Read operation A read operation starts with a command (00h), followed by five address cycles, followed by the read confirm (30h). After the read transfer time (tR) of approximately 25 μs, the ...… 查看全部问答> |
|
大家好,我们现在在使用MARVELL8686这个WIFI芯片的驱动,总是没有加载成功,打印信息如下:高手们帮我分析一下呀1 SDBusDriver: PROCESS_ATTACH INIT - Enter DriverEntry *** Driver version 38.p45 *** *** Built on Aug 16 2009 18:44:11 ...… 查看全部问答> |
|
Montavsta linux环境下,pci usb host controller芯片支持,当然这个PCI转USB设备应该是External pci master了,那板卡是Master还是slave,还是两者都是?因为master与slave的寄存器配置不一样… 查看全部问答> |
|
在列表控件上显示设置里的图标,有的大有的小,如何才能拉伸致一样大?还有个问题,如何知道设置里的图标是在个人还是在系统还是在连接里?谢谢 void GetFileIcon(DWORD fpid,SHFILEINFO *info) { ZeroMemory(info, ...… 查看全部问答> |
|
因项目需求,要给应用程序提供一个直接操作NandFlash的接口,小弟在网上找到些直接操作Flash的文章,按照上面试了下, [code] m_hFmd = CreateFile(_T(\"DSK1:\"),GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL); 运行这句话的时候 ...… 查看全部问答> |




