张正本,翟海庆
(河南机电高等专科学校计算机科学与技术系,河南 新乡 453000)
32位的ARM处理器具有性能高、功耗低等特征,基于32位ARM处理器的嵌入式系统已深入到社会生活的各个领域。MC9328MX1是Motorola公司的产品。其中嵌入了先进的低功耗ARM920T核,运行速度可达 200MHz[1]。UCOS -II是一款源代码开放的嵌入式实时操作系统,其最大的特点是源代码开放,并具有很好的可移植性。BOOTLOADER程序与处理器的体系结构和电路板的硬件设计密切,很难设计一个完全通用的BOOTLOADER程序直接应用于所有的嵌入式系统中,因而BOOTLOADER设计是嵌入式系统设计中的一个关键问题。本文分析BOOTLOADER程序的功能和主要任务,针对一个特定的处理器MC9328MX1,设计了一个BOOTLOADER程序,并应用于家庭智能控制系统中,取得了良好的效果。
简单地说,BOOTLOADER就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境[2]。一般情况下,BOOTLOADER程序有两种不同的操作模式,自举模式和内核启动装载模式。
自举模式的主要功能是通过串行口或网络接口把映像文件下载到嵌入式系统中,并存放在嵌入式系统的非易失性存储器,如Flash中。映像文件包括BOOTLOADER本身的映像、操作系统映像、应用程序映像等。
内核启动装载模式的主要功能是将嵌入式系统非易失性存储器(如Flash)中的映像文件装载到RAM运行。若是多阶段的 BOOTLOADER程序,需将BOOTLOADER本身的映像也装载到RAM,否则只需要将操作系统和应用程序映像装载到RAM中运行即可。
自举模式主要用于产品开发和系统升级的过程中,启动时需要人为的干预;内核启动装载模式主要用于产品交付使用时,启动时不需要人的干预。在两种操作模式之间切换可以采用多种方法,比如可使用跳线,接地是运行自举模式,接高电平时运行内核启动装载模式。本文中使用系统中的一个按键,上电时延时两秒,如果按下按键,则运行自举模式;如果该按键没有按下,则运行内核启动装载模式。
MC9328MX1芯片内部集成了SDRAM控制器、UART、看门狗定时器、定时/计数器LCD控制器、USB控制器等多种片内外设,应用非常方便。MC9328MX1是在个人便携式产品市场上领先的龙珠微处理器家族的第六代产品;具有很高的集成度;为极低功耗系统设计提供了优越的性能;专门对多媒体应用进行了优化;专门对具有高速接口的蓝牙应用进行了优化;支持广泛的应用,如PDA设计、智能电话和下一代的无线通信[3]。
MC9328MX1第一个1MB系统地址空间设计为双映射映像,由于MC9328MX1启动时从地址0x0开始执行,因而第一个1MB的地址空间也被称为引导ROM。上电时,若 BOOT[3:0]引脚配置为 0000,则加电自举ROM映射到第一个1MB的空间,成为引导ROM;若 BOOT[3:0]引脚配置为0110,则片选引脚/CS0引脚所选择的地址空间成为引导ROM。
加电自举ROM中存放的是加电自举程序,该程序在芯片出厂时就已经写好,并且不能被修改。加电自举程序配置UART1和UART2,将控制器初始化为一个目标系统,此时系统为加电自举模式,可下载程序或数据到目标系统的RAM中。在程序下载完毕后可以运行,可对程序分析提供简单的调试环境[1]。
加电自举程序仅能通过UART接收加电自举记录,完成将程序和数据下载到目标系统的功能。加电自举记录格式如表1所示。
?
加电自举记录中前四个字节为地址,指明所要操作(读、写或运行)的目标系统RAM地址;计数/模式字节规定了加电自举记录的功能;最后是N个字节的数据。计数/模式字节中数据计数为0有其特殊的用途:表示从指定的地址开始执行程序。此时,计数/模式字节后不能再有数据。
使用加电自举程序下载数据或程序,代码必须转化为包括加电自举记录的文本文件。作者编写了一个程序ConvertBinToBL,可将编译好的ARM可执行文件(BIN格式)转化为包含加电自举记录的文本文件,需要的读者可电子邮件(ltjszhq@163.com)向作者索取。
家庭智能控制终端硬件包括CPU、电源及复位电路、晶振、Flash存储器、SDRAM存储器、串行口、网络接口、家电控制(I/O口)、键盘、LCD显示器等电路模块。其中 CPU采用 MC9328MX1,串行口采用MAX3221扩展(实现电平转换的功能),Flash存储器使用两片28F320J3A(每个芯片提供16位数据),SDRAM存储器采用两片K4S281632D芯片扩展[2]。整个系统方框图如图1所示。
其中28F320J3A片选接CPU引脚/CS0,其地址空间范围是 0x10000000~0x107FFFFF,共 8MB。K4S281632D片选接CPU引脚/CS2,其地址空间范围是0x08000000~0x09FFFFFF,共 32MB。另外,CPU内部还包含128KB的 SRAM,其地址空间范围是0x00300000~0x0031FFFF。在进行BOOTLOADER设计时,需要进行存储器分配,并将映像文件下载到正确的地址空间中。
本文所设计的BOOTLOADER程序工作于内核启动装载模式时,会将操作系统内核映像和应用程序映像装载到RAM中,并跳转到操作系统入口处执行。若BOOTLOADER程序工作于自举模式,则将自身映像装载到RAM并运行,根据串口发送过来的指令下载操作系统内核映像、应用程序映像或自身映像到RAM,然后将之写入到 Flash存储器中。另外,SDRAM与CPU连接需要有SDRAM控制器(已经集成到MC9328MX1内部)进行控制,经过初始化才能够正确使用[3]。SDRAM初始化程序代码如下:
BOOTLOADER程序总流程图如图2所示。
图2 BOOTLOADER程序总流程图
第一次下载BOOTLOADER程序时,需要先将其转化为加电自举文件,然后使用PC机上的超级终端程序传送到目标系统中,再次下载BOOTLOADER程序时,可先运行 BOOTLOADER,将自身装载到 RAM中运行,将新的BOOTLOADER下载到RAM中并写入Flash。
本文基于高性能嵌入式微处理器MC9328MX1,扩展SDRAM和Flash存储器以及其他外围电路,设计了一个家庭智能控制终端。介绍了BOOTLOADER程序的概念和功能,设计了一个BOOTLOADER程序。该BOOTLOADER程序能将用户应用程序下载到Flash存储器中并启动运行,可提高程序下载和启动运行的速度,当系统出现故障时,还可以从网络上更新应用程序,提高了系统的可靠性。本文将BOOTLOADER程序应用于家庭智能控制终端系统中,取得了令人满意的使用效果。
[1]王祖林,龙翔,郑红.新一代嵌入式微处理器龙i.MX结构及应用基础[M].北京:北京航空航天大学出版社,2004.
[2]朱博,孙运强.嵌入式系统的U-Boot移植分析[J].中国测试技术,2008,(02):57-60.
[3]MC9328MX1 Reference Manual[Z].Motorola,Inc.2003.