串口Bootloader相对比较复杂,因此分成两篇文章来讲,第一篇简单描述Bootloader原理及系统组成,第二篇详细讲解Bootloader涉及到的Flash空间分配、飞思卡尔MC9S12XS128中的S19文件以及单片机程序流程等(重点),上位机程序及调试。

飞思卡尔MCU在系统开发前期,通常采用BDM或P&E等专用的烧写工具进行代码升级。然而,在产品调试阶段以及设备使用和维护过程中,系统装机后并不适合使用烧写工具进行代码更新。本文在Flash编程基础上,提出一种基于串口,采用XOnXOff流控制协议来实现Bootloader在线升级的方案,并且在MC9S12XS128单片机上得以实现。设计使用Visual C#开发上位机软件,通过串口将Code Warrior编译生成的S19文件传输给下位机,下位机Bootloader在接收文件流的同时,解析S19文件内容,并将机器码写入Flash,从而完成单片机的串口引导加载程序。

对于嵌入式系统设备的开发和维护,由于控制策略、程序部分参数的不断调整,不可避免要对用户程序进行调试、修改和升级。在国内,传统的开发方式是由开发人员携带BDM烧写工具到现场进行代码更新。对于已经安装到设备或者实验台架上的MCU,BDM接口并不方便引出,为了减轻频繁拆卸MUC所带来的不便,不使用BDM烧写工具而直接利用MCU引出的串口与计算机交互来完成代码升级,毫无疑问更加的简单直接。对于智能车后期调试而言,还可以使用串口蓝牙模块进行代码升级。为了实现这一目的,本文针对MC9S12XS128单片机,基于串口开发了专用的Bootloader上位机软件和下位机程序,实现了用户程序的在线升级。实验结果表明,该Bootloader实现了简便、稳定的单片机在线升级,提高了开发效率。

Bootloader原理及系统组成

Bootloader又称引导加载程序,是系统上电或复位后首先运行的一段小程序,用于判断是执行用户程序,还是进入引导加载模式。引导加载实现的功能包括初始化硬件设备、建立正确的内存空间映射、初始化栈、全局变量和内存,读取上位机命令来擦除用户程序Flash空间或者接收、处理上位机传输来的文件流并将Bootloader存储在Flash中的用来擦除、写入用户程序的代码组件拷贝到RAM中执行从而将用户程序写入Flash中。值得注意的一点是,在Flash擦除和写入期间,无法从Flash中读取机器码,因此擦除、写入组件必须拷贝到RAM中执行[35]。在嵌入式系统中,Bootloader是依赖于硬件开发的,因此不同单片机难以建立一个通用的Bootloader。

本文下位机采用飞思卡尔半导体公司生产的16位单片机MC9S12XS128,它具备两通道串口及128KB可在线编程Flash。由于现今笔记本电脑已经逐渐弃用串口,而更多的采用便于拔插的USB接口,因此MCU通过RS232-USB转换芯片CH340T实现RS232串口电平信号到USB电平信号的转换,笔记本windows7系统自动识别该芯片并建立一个虚拟串口,使用上与传统串口无异。另外下位机还可以使用串口蓝牙模块,笔记本电脑的蓝牙同样通过配置虚拟串口来实现通讯。上位机软件使用微软公司Visual Studio2012,基于C#窗体应用程序开发。上位机运行专用软件通过USB数据线与下位机进行交互,从而组成了整个Bootloader系统。

飞思卡尔MC9S12X串口Bootloader设计(一)

智能车Bootloader调试系统组成

未完待续

相关文章