搜索
bottom↓
回复: 16

一种8051单片机的bootloader实现方式

[复制链接]

出0入0汤圆

发表于 2013-9-25 09:52:35 | 显示全部楼层 |阅读模式
本帖最后由 qllaoda1 于 2013-9-25 09:55 编辑

一,        基本硬件需求
要实现IAP功能,需要51单片机可以在程序里修改代码空间的Flash,或者至少可以修改用户程序区的Flash,新出的51大部分都能满足这个要求

二,        空间划分
一般bootloader位于单片机代码空间的起始地址,用户程序在后面。这个需要根据实际的需求来决定,bootloader功能简单,就少占用一些,bootloader功能复杂的就多占用一些。除此之外,一般还要根据Flash的页为界线划分。附带的工程模板里,bootloader使用0x0000-0x0fff区间,用户程序使用0x1000以后的空间。

三,        中断的处理
51单片机的中断入口一般位于0地址开始的区间,无法修改,但是根据上面的空间划分方式,这个区间位于bootloader的范围,是不能随意更改的。所以代码里用了一个软件的方式对中断入口做了重映射处理,后面将结合具体的代码介绍实现方式。

四,        Bootloader的处理
1,        建立工程的时候,选择把Startup.a51添加到工程
2,        在Startup.a51里添加如下代码:
ORG      0003H
                                LJMP     2003H
                                ORG      000BH
                                LJMP     200BH
                                ORG      0013H
                                LJMP     2013H
                                ORG      001BH
                                LJMP     201BH
                                ORG      0023H
                                LJMP     2023H
                        ………………………….
根据具体型号的中断数量和地址,添加中断跳转代码,格式为ORG  XXH   LJMP 2000+XXH,这样做,是为了将中断映射到用户程序区的0x2000开始的空间,在用户程序里,还要做一些对应的设置,后面将介绍。
3,        Bootloader的处理流程。Bootloader的主要作用一般是开机初始化,自检和升级用户程序,以及引导用户程序。因为上面已经把中断映射到用户程序空间,所以bootloader里最好就不要用中断了。

五,        用户程序的处理。
1,        用户程序的Startup.a51无特殊需求,可以根据需要选择添加到工程,然后自己做修改,也可以不添加到工程,由编译器连接一个默认的startup.a51
2,        用户程序的所有普通函数和中断函数也没有特殊要求,可以按正常的方式编写
3,        用户程序的工程设置。因为用户程序不再是从0地址开始,所以需要在工程设置里做定位处理:设置用代码的范围,定位用户代码入口地址。具体设定如下图:
因为用户代码规划到0x1000以后的空间,所以设置code range从0x1000开始
为了让bootloader能准确跳到用户程序入口,所以需要将C_C51STARTUP定位到0x1000位置。(C_STARTUP位于startup.a51里,它才是程序的真正入口,而不是main函数;另外,入口也并不是必须定位在这个位置,只要位于用户代码空间就可以)

4,        中断映射。在bootloader里,将中断入口定位在了0x2000开始的空间,在用户程序里,也必须做一个对应的设置。方法如下:

这样处理之后,便完成了中断的映射。当中断发生时,会先进入位于bootloader里的硬件中断入口,然后在那里跳转到0x2000开始的一个软件重定义的向量表,再跳转到中断入口函数。和没有bootloader的方式比起来,这样做会多一次LJMP跳转,但是一般情况下影响不大。

六,        关于升级文件
升级文件的传输可以根据需要使用任何方式,例如串口,网络,USB,存储卡等。升级文件的传输可以做在bootloader里,也可以做在用户程序里,或者两种方式都有。一般来说,bootloader的代码比较简单,不适合做复杂的传输方式。如果传输方式比较复杂,可以在用户程序里传输升级文件,暂存到一个外部存储器,然后跳转到bootloader,让bootloader从外部存储器读出并升级用户程序。升级的时候要注意用户代码的范围。
为了传输的可靠性,升级文件一般还会添加一个文件头,里面包含一些基本的文件信息,例如长度,校验等,这些可以通过编写一些简单的工具来完成。

                另外,推荐一些升级文件的传输方式,做bootloader的时候可以考虑
1,        串口。可以考虑使用XMODEM协议传输升级文件,因为这是一个比较标准的传输协议,很多现成的软件可以支持,例如Windows下自带的超级终端就可以实现(XP以后的系统没有超级终端,但是也有一些别的软件可以代替,例如SecureCRT)
2,        USB主机。可以用U盘方式升级。升级文件取一个特定文件名,放在特定位置,主机读取到文件后自动升级
3,        USB从机。可以让从机虚拟成一个U盘,PC把文件复制到这个虚拟U盘就完成升级。这样就不需要编写专门的升级软件
4,        以太网。
a)        TFTP,这是标准的文件传输命令,Windows自带,而且协议简单
b)        Web。用网页的方式,界面有好直观,用网页浏览器就可以实现,也不用单独开发专用的升级软件。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-9-25 11:21:52 | 显示全部楼层
看起来很高级,好好研读学习一下。用web方式升级听起来很高端,广告区置顶的一个广告就是用web来管理终端的,这个值得学啊。

出0入0汤圆

发表于 2013-9-25 11:53:56 | 显示全部楼层
还以为老式51能。。。

出0入0汤圆

发表于 2013-9-25 11:58:03 | 显示全部楼层
研究研究。

出0入0汤圆

发表于 2013-9-26 14:38:21 | 显示全部楼层
引导区吗  强人

出70入145汤圆

发表于 2013-9-26 15:38:48 | 显示全部楼层
51也能玩很多花样啊

出0入0汤圆

发表于 2013-9-26 15:47:42 | 显示全部楼层
这个可以有!~

出100入101汤圆

发表于 2013-9-26 16:19:37 | 显示全部楼层
写得好!

出0入0汤圆

发表于 2013-12-2 17:19:56 | 显示全部楼层
学习了

出0入0汤圆

发表于 2013-12-3 10:25:42 | 显示全部楼层
哇,原来升级没那么复杂,扫盲了,学习升级

出0入0汤圆

发表于 2013-12-3 10:50:57 | 显示全部楼层
好东西,但是老式的不能自己修改flash吧

出0入0汤圆

发表于 2014-1-15 17:35:58 | 显示全部楼层
标记下,感觉会有用

出0入0汤圆

发表于 2014-1-25 09:18:41 来自手机 | 显示全部楼层
好东西,标记一下

出0入0汤圆

发表于 2014-1-31 15:38:49 | 显示全部楼层
看起来很厉害的样子,研究研究

出0入0汤圆

发表于 2014-2-1 21:12:42 | 显示全部楼层
这个标记一下,放假完回去试试,我的是GSM远程升级

出0入0汤圆

发表于 2014-2-1 21:58:34 | 显示全部楼层
谢谢分享,学习了~

出0入0汤圆

发表于 2014-7-31 14:13:53 | 显示全部楼层
非常感谢楼主的帮助,这个代码很好用 谢谢了!在STC上面测试有效
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 12:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表