最近在做freescale HCS12系列单片机的bootloader,毕竟是新手,对这方面的入门知识还是欠缺。尽管NXP官网已经有了相当丰富的文档与例程,可是无奈例程太过复杂,不知道如何下手第一行代码。这里先感谢经验丰富的某位高人醍醐灌顶的指导,为了让再入门的新学者能够有个参考,所以就将本次开发bootloader的过程学习过程记录下来以其能够对大家有所启发。因为本人自己也是新学者,所以有问题可以留言讨论。
这里单片机的bootloader与我们广义的Linux以及windows的bootloader是不同的。这种大型操作系统的bootloader是为了做操作系统与硬件之间的桥梁:初始化硬件系统、为操作系统的引导做准备。但是单片机的bootloader主要作用却是为烧录程序提供一种新的方式,即可以让单片机可以通过串口,蓝牙,CAN, LIN等通讯方式更新烧写在Flash中的程序以及参数。这样做的好处很多,比如一个串口烧录的bootloader可以通过串口向单片机的Flash烧录程序而不需要再额外用专用的烧录器来操作,丰富了修改程序的方式,使烧录更加方便。我们常使用的慧净51系列单片机以及Arduino能够通过一根简单的串口线就烧录程序原理都是如此,在这些板子出厂时的原程序是通过专门烧录器烧录的,但由于bootloader的存在,后续用户的程序就可以通过串口烧录。再比如单片机的bootloader在实际使用时可以远程更新单片机程序,为实用的场景提供程序更新的功能,尽管做到这一点对通用计算机非常简单,无非是卸载程序重新安装,但是对于Flash空间较小的单片机而言,就需要通过bootloader这样的程序来提供这种功能。
单片机的bootloader基本概念实际上也非常的简单,就是把单片机的存储空间(Memory,包括RAM以及Flash)都合理的分配。把Flash的程序存储空间分为bootloader区域以及user application区域。bootloader程序一般是不修改的,一次烧录后可以一直使用(当然也可以有bootloader程序自身的更新,但是原理是一样的),但是user application区域却是可以重复由bootloader修改的。这里的 user application区域就是我们通常的应用代码,它是为了实现单片机的功能的主要代码。bootloader区域代码却是为了实现对user application区域的控制而存在的,它的程序逻辑是明确的:与上位机建立bootloader专用的通讯,通过串口等简单通讯方式修改Flash或者EEPROM中的程序内容,完成修改后跳出bootloader执行user application的程序内容。
这里笔者要假设读者对freescale的HCS12单片机有了一定程度的了解,关于Bootloader的内容以及文本中的部分实例程序均来自NXP公开的AN3275以及AN4258文档以及文档的样例程序,更多的介绍可以去NXP官网下载。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !