打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C8051F410单片机实现BootLoader方法详解
userphoto

2023.02.02 浙江

关注

,待擦除完成后重新写入这3个字节,其实现代码如下:

BootAddr[0]=FlASH_ByteRead(0x0001);

BootAddr[1]=FLASH_ByteRead(0x0002);

FLASH_PageErase(0X0000);//擦除0页

FLASH_ByteWrite(0x0000,0x02);//跳转指令0x02

FLASH_ByteWfite (0x0001,BootAddr [0]);//写入bootloader的开始地址

FLASH_ByteWrite(0x0002,BootAddr[1]);

“用户程序”入口地址的保存:“用户程序”入口地址在程序文件内标示保存在程序的前3个地址字节内,在生成的程序的Hex文件内显示为:

:03000000021ECC11

:0C1ECC00787FE4F6D8FD7581700216A046

第1行内的内容表示在地址0x0000及向后的两个字节内的内容为0x02ECCC,即为要跳转到Flash地址0x1ECC处去执行“用户程序”的第1条指令,这里我们就要把这个地址保存起来,以便让BootLoader程序在执行完后跳转到这里来运行“用户程序”,即把“用户程序”文件内原来指向地址0x0000~0x0002的3个字节保存到BootLoader指定的一个页单独保存,本应用中是保存到了0x7A00页的前3个字节,实现代码如下:

#define APP_ADDR_PAGE 0x7C00L∥用户程序的入口地址……

startAddr=RecData[2]*256+RecData[3];

if((startAddr+i==0)‖(startAddr+i==1)‖(startAddr+i==2))

FLASH_ByteWrite(APP_ADDR_PAGE+i,RecData[5+i]);

startAddr为上位机传来的数据帧内指明的数据应保存的地址

BootLoader程序区的保护:在更新“用户程序”过程中要防止上位机传来的数据包含与BootLoader程序保存区地址重复的地址段,如果将BootLoader区覆盖将导致下次复位后不能正确执行引导程序。通过以下程序段实现引导区的保护:

if(startAddr>=0x6000)//与BootLoader冲突

SendString(“Code overflow!\r\n”);

绝对地址的跳转:当升级完成或在复位后上位机未响应升级握手时,程序即跳往“用户程序”的入口地址,此地址保存于Flash的0x7C00处。

4 上位机软件开发

为了配合单片机内BootLoader的功能实现,需要在计算机端编写对应的下载程序来共同完成固件升级,按照BootLoader的通讯协议,上位机服务程序使用Delphi开发,程序主要针对串口操作,完成握手协议、用户程序文件读取并按照固定格式打包、下载及进度监测等功能,程序的运行界面如图4所示。

5 结束语

BootLoader是一个完善产品应该具备的基本功能,其为基于单片机的产品程序升级提供了很好的解决途径。

通过C8051F410单片机内核的实际产品使用,很好的验证了本文所述方法的实用性、可靠性,同时这种方法也同样适用于其他相似结构的单片机。

当程序具有重要保密需求时,可考虑将原Hex文件进行加密,在下载过程中按照加密规则进行解密,以使程序升级更加安全、通用。

为了使程序功能更加完善,在更新程序前应将单片机内原有旧版本的“用户程序”下载并保存,然后再进行更新,当新升级的程序不能使用时还可恢复为旧版本。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
 ISP IAP 详解与ISP IAP的实现
汽车网络安全之——一个汽车ECU的逆向分析
STM32固件IAP程序实现
STM32单片机Bootloader设计(下)
精品! 我们如果了解单片机Bootloader程序
STM32的BootLoader 从SD卡更新固件
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服