原创 PIC系列单片机BootLoader (一)

2013-5-21 16:06 3905 18 19 分类: 消费电子

实在纠结,这是写的第三遍了,第一次是上传附件时网站说什么系统错误写的全没了,第二次是自己不小心碰了下鼠标也没了,这次是在WORD里写的,看它还会不会不见!

 

现在大部分单片机都支持BootLoader功能,BootLoader从字面上解释就是引导程序,也就是像电脑开机后一样,电脑也会给出进入BootLoader选项.在单片机复位后,单片机并不是直接就进入了应用程序存储区,而是先进入BootLoader区,在跳转到应用程序存储区.现在的单片机支持BootLoader的方式也有所不同,有的是出厂前就已经将BootLoader程序固化到了MCU内部,有的是在单片机的程序存储区内划分了一块区域专门用来存储BootLoader程序,方便用户自行开发适合自己的BootLoader程序,如AVR,而有的单片机既不事先固化BootLoader程序,也不在程序存储区内划分一块区域专门用来存储BootLoader程序,但是单片机的结构却允许使用其它的方式来模拟实现Boot区,如MicroChip公司的PIC系列单片机.三种方式相比之下,第三种开发起来难度最大,开发者要对单片机的程序存储区的结构具有很深的了解,不适合初学者学习.

 

其实BootLoader早就出现在我们的单片机学习道路中.举个例子,大学时学习51单片机时大部分人会购买51的学习板进行学习,但是很少会有人去购买专用的编程器进行程序下载,那当初我们是怎样将应用程序下载到单片机内部的呢?我记得大学时我也买过一块51学习板,当初卖家就给了一个好像叫做ISP的上位机软件(具体软件名字记不太清了)进行程序的烧入,我们只需要将编译后的hex文件通过此软件利用电脑的串口就能很快的将程序烧入单片机内部.那这是为什么我们能直接的将应用程序通过上位机软件和串口下载到MCU内部呢?而有的单片机却需要购买专用的编程器才能将应用程序烧写进去,这就是BootLoader的功劳,记得当初51学习板上的单片机是STC公司的增强型51单片机,它最大的特点就是在其内部将BootLoader程序已经固化好了,用户是不能进行访问和修改的,这样就方便了用户不用自己开发就能将应用程序很快的下载到单片机内部,但是通过上位机将应用程序烧写到单片机时有一个步骤不知道大家还记不记得就是每次烧写程序时都要事先将单片机断电在上电才能将应用程序烧写进去,而且有时还会出现,如果断电上电 的时间不是很及时还会出现应用程序也无法烧入进去,为什么要先断电在上电呢?这在后面将会提到.将BootLoader程序固化到单片机内部虽然方便了用户不用用户在去开发BootLoader,但是它不好的一面就是不能进行代码的保密,无法通过BootLoader进行加密.说到这里,大家是否对BootLoader有点印象了呢!

 

BootLoader到底有什么功能呢?它的功能实在是太多了,大家可以上网查询一下.在此向大家推荐一本好书>,此书是以AVR单片机为切入点,以在单片机开发过程中出现的问题为专题进行讲解,读者能很快的用到其它的单片机上,此书面向的读者是具有一定开发工作经验的单片机开发工程师.应用专题精讲

 

在此说说BootLoader几个显著的功能,应用专题精讲

第一:方便下载,更新程序.在使用时我们只需在使用一次编程器将BootLoader程序下载到MCU内部,以后的下载更新就直接使用上位机软件就能简单的将应用程序下载到单片机内部,假设我们已经将产品称交给用户,如果我们想升级程序,只需要将应用程序的hex文件给用户,让用户通过简单的上位机软件就能进行下载,方便了用户和自己,同样也增加了程序的保密性.应用专题精讲

第二:程序的保密性.使用BootLoader我们只需要使用应用程序的HEX文件就能更新应用程序,并且还可在此hex文件中进行加密操作,加密的算法很多,具体的我也没有使用过,相关的资料大家可以上网查询.应用专题精讲

第三:下载的方法很多,例如有UART,CAN,SOFTWARE UART,SPI,I2C等等,因为我们电脑大多是带有RS232接口,所以用的最多的还是UART.应用专题精讲

应用专题精讲

 

 

应用专题精讲

单片机应用专题精讲>

关于PIC单片机的BootLoader它就是属于上述的第三种方式,即单片机内部没有固化的BootLoader程序,也没有在Flash内专门留出一块内存区用来存放BootLoader程序,只能用户自己通过软件模拟的方式来实现Boot区的划分.BootLoader在PIC单片机内的工作原理是当单片机上电后,MCU不是立即的运行到用户应用程序区,而是先运行Boot区中的BootLoader程序,在BootLoader程序中我们会设置一个时间上限,如果在这个时间内收到了来自于PC机串口发出的程序指令字节,那么MCU就开始进行接收PC机发出的这些命令字节并将其存储在相应的Flash区,接收完成后MCU就跳转到这一区域开始运行新的用户应用程序,如果在这一时间上限内没有收到PC机发出的相关命令字节,则当时间到后,MCU依旧会运行到相应的用户应用程序区,只不过这时运行的还是上次的程序,并没有实现对程序进行升级处理,说到这里肯定有人会想MCU怎么知道是不是接收完成 或者在接收过程中是否出现了错误呢,对于是在上位机端的程序就要求对发出的命令字节进行校验,常用的校验方法有CRC检验,和检验等等.关于PIC单片BootLoader程序在网上的资源不是很多,但在官网上还是能找到相关的应用笔记,MicroChip提供的模拟Boot区的方法是在应用程序存储区的第一页 留出Boot区,将相关的中断向量表向后移,这种方法难度较大,因为要对编译器本身提供的.gld文件进行修改, 一旦出错后果严重.并且还会造成FLASH资源的浪费.而在国外的一个开源组织上,它们采用的方法是将Boot区划分在应用程序存储区的最后一页,这样就不需要对单片机的FLASH进行重新的划分,不用修改其链接脚本文件就能进行移植,相关的网站和相关的移植程序在最后列出,在移植过程中要注意对从Boot区跳转到应用程序存储区的时间设置,不要设的太短,不然的话会出现你还没来得及将新的应用程序下载到MCU内部,MCU就运行到应用程序区了,这样你将无法进行第二次下载以及后续的下载也无法进行.注意接下来升级程序时,采用的是和上面说过的51类似的方式,即要让单片机进行复位,这也就是为什么说利用上位机下载程序到51单片机时,也要让它重新上下电,原因在于上下电后,单片机产生复位,单片机重新开始运行又从Boot区开始运行,这时你将应用程序进行烧写,才能将程序烧写进去,不然的话,如果你直接的通过上位机将 应用程序下载到MCU内部,是无法成功的,因为MCU一直在运行应用程序区不会去运行Boot区,你就无法升级程序,如果不想通过不断的上下电来进行处理,还有一种方式就是你在应用程序中放置一条goto指令,让应用程序定期的去运行Boot区,这样你就有机会下载程序,但感觉这种方式还没有直接上下电或者是利用复位按键好.

 

 

PIC BootLoader网站:http://mrmackey.no-ip.org/elektronik/ds30loader/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

文章评论1条评论)

登录后参与讨论

用户1602177 2013-5-21 16:05

对于博主的遭遇深表同情和无奈~~本人也吃过这样的亏~~于是学会了一招,就是用TXT文档写博客,复制粘贴发表之后再贴图或者上附件~~重中之重是要保留敲好的文字,不让真的伤不起~~
相关推荐阅读
huhaomcu_856934054 2014-08-19 20:54
uCOS-Ⅱ
启动uCOS-Ⅱ的学习与移植!...
huhaomcu_856934054 2014-07-20 10:08
多通道电路原理图
简单说说关于Protel中提供的多通道原理绘制与PCB布局布线. Protel(不知99SE是否可以)有提供多通道电路原理图的设计,这项功能在有些方面还是很有用处的,比如说:当部分原理图在一张图...
huhaomcu_856934054 2014-04-07 09:10
IAR制作工程模板
我个人学习新的MCU过程一般会是如下过程,建立一个个的DEMO工程,每个DEMO工程学习一个外设,所以每个DEMO程序都很简单,但是在建立一个个DEMO程序的过程中,会发现开始的步骤基本上就是相同...
huhaomcu_856934054 2014-03-14 18:06
新公司与老公司的比较
在新公司上了几天班真心有点想念以前的老公司了! 下面来比较比较新公司与老公司吧: 1.业务量。新公司的项目更多,人员更多,涉及的面也较广,整体的技术水平要大大强于以前的老公司。以前老公司里...
huhaomcu_856934054 2014-02-24 15:01
辞职了!
辞职了,但愿柳暗花明又一村!!...
huhaomcu_856934054 2014-02-21 09:22
回来啦!
之前因为身体原因一直在家休息,直到今天才来武汉上班。但愿今年个人的工作能有所上升!...
我要评论
1
18
关闭 站长推荐上一条 /2 下一条