中自网

热门搜索:PID  plc  传感器  电机  变频器  工业以太网  无线通讯  低压 

当前位置:首页>>应用案例首页>>专业论文>>正文

基于AT90CAN128单片机的Boot Loader应用设计

发布日期:2013-01-30   作者:中国矿业大学信息与电气工程学院 邵艳 沈中泽   浏览次数:49475
分享到:
【摘   要】:论文介绍了Atmel公司推出的AT90CAN128单片机引导装载程序的原理,对该单片机的Boot Loader技术进行详细阐述,完成Boot Loader程序设计。并将此设计应用于一个基于Boot Loader的嵌入式软 PLC控制器,应用该控制器可实现梯形图在线编程和现场数据更新功能,它能方便的将上位机梯形图程序移植到单片机上。

1引言
随着微处理器技术的发展,近年来PLC的发展有了一个新的方向——基于微处理器的嵌入式软PLC技术,它充分综合了现代计算机软、硬件资源以及成熟的现场总线和网络通讯技术,为开发以软件技术为核心的嵌入式软PLC铺平了道路。采用高端微处理器作为PLCCPU,大大加强了PLC的功能,逐步发展成为广泛应用的新一代工业自动化控制装置,研究高可靠性和精确实时性的新型嵌入式软PLC必将是工业控制领域的发展趋势。
2嵌入式软PLC硬件架构
考虑到煤矿井下现场工业控制的复杂环境,嵌入式软PLC运行系统硬件平台必须保证整个系统运行的可靠性和稳定性,并且要求抗干扰能力强,利于扩展。嵌入式软PLC硬件平台主要由以下几个部分构成:CPU处理器核心、电源模块、通讯模块、输入/输出模块以及各种外围扩展单元等,系统整体架构如图1所示。

 
1 嵌入式软PLC系统硬件平台架构
该设计中CPU选用的是Atmel公司的一款8AVR内核结构的微处理器AT90CAN128AT90CAN128是一款基于AVR增强型RISC结构、低功耗、采用高密度非易失存储器技的单片机。芯片执行单时钟周期的高效指令,高达1MIPS/MHz的数据吞吐率,有效地优化了系统在处理速度和功耗之间的矛盾[1]
AT90CAN128芯片内的ISP Flash,可以通过SPI接口多次编程。一个引导程序使用任何接口,下载用户程序到应用Flash存储器,实现用户程序的多次编程,这为嵌入式软PLC运行系统的设计应用提供了灵活且低成本的解决方案。设计中,在嵌入式微处理器上的系统应用程序只需要移植一次,就可以在不同的用户环境中正确执行。即使当硬件平台发生变化时,只需要对用户程序进行编辑移植就可,而系统应用程序则不需要任何改变。这样有效保护了系统应用程序资源,提高了系统开发效率,增加了应用程序的复用率。
3Boot Loader的原理
在嵌入式应用软件平台上,Boot Loader的作用其实同我们使用的PC上的BIOS类似,通过这段程序,我们可以对运行系统上的主要硬件进行初始化、建立内存空间映射等工作,为应用系统的启动准备环境。我们使用Boot Loader可以在目标板上实时下载更新梯形图文件,因此一个功能强大的Boot Loader已经相当于一个微型操作系统了。
一般来讲,在嵌入式系统中Boot Loader的设计是严重依赖于其硬件的,要想建立一个通用的Boot Loader几乎是无法实现的。不同的硬件体系结构都对应于不同的Boot LoaderBoot Loader的设计还依赖于嵌入式微处理器的配置应用,所以论文中对AT90CAN128上的Boot Loader需要专门设计。PC硬件平台上,硬件通过BIOS启动的。在嵌入式平台上,AT90CAN128中没有像BIOS那样的固件程序,Boot Loader是硬件上执行的第一段代码,因此整个系统的加载启动任务就完全是由Boot Loader来完成。当引导程序完成任务后,将控制权交至应用程序进行执行代码任务。
论文中基于AT90CAN128Boot Loader编程设计采用交叉编译方法,使用C语言内嵌汇编方式编写,具有可移植性强、阅读方便理解、代码内存小等优点。Boot Loader的设计是实现梯形图实时更新下载的关键,论文中设计的嵌入式软PLCPC机之间的通信和交换数据是通过RS232串口实现, Boot Loader设计要点主要有对于进入和切换Boot Loader和应用程序区的方式的设计。
4AT90CAN128Boot Loader程序设计
论文中运用AT90CAN128单片机的Boot Loader程序设计,用户可以方便地利用PC机对嵌入式软PLC控制分站进行应用程序远程升级。我们只需要在单片机中加入一个Boot Loader程序,当需要更新梯形图程序时,上位机编辑好梯形图程序后通过RS232串口下载,即可以实现用户对PLC控制分站梯形图的自编程更新。而在嵌入式微处理器上的梯形图程序解释只需要在开始时移植一次,就可以实现梯形图的不断更新,解决了现场工作人员对计算机系统程序知识缺乏的问题,提高了的工作效率。
AT90CAN128片内具有128K字节的FlashFlash程序存储器被分成了两个区:引导程序区和应用程序区。嵌入式软PLC运行系统的软件设计主要分为两部分:加载更新梯形图的引导程序区Boot Loader程序设计、梯形图解释执行的应用程序区程序设计。其软件编程设计框架如图2所示。

 
2 软件编程设计框架
对运行系统中的软件进行设计时,编辑环境是使用Image CraftICCAVR编译器,下载器采用AVR Studio4,编辑语言采用C语言程序设计。ICCAVR是一种使用符合ANSI标准的C语言来开发微控制器程序的一个工具,它综合了编辑器和工程管理器的集成工作环境(IDE)。这个工程管理器可以直接生成我们希望得到的可以直接使用的INTEL HEX格式文件,INTEL HEX格式文件被大多数编程器所支持,包含了程序的机器代码,用于下载程序到芯片中去。AVR Studio4是一个完整的开发工具,包括了编辑、仿真功能,我们可以编辑源代码,并将源代码下载到AVR器件上运行。
4.1Boot Loader程序进入方式的选择
为了实现从应用程序区到Boot Loader区的跳转,在基于AT90CAN128单片机的软件设计中,我们使用中断信号触发、运行系统上电复位和通过调用跳转函数这3种方式,都可以进入Boot Loader区。
通过中断信号触发进入到Boot Loader区,其实就是由一些触发信号启动,例如在程序运行过程中,串行端口中断被触发接收到一些相关的字节命令,运行系统即进入到中断操作中。在程序运行中,上位机通过向UART端口发送远程控制命令时,程序进入UART中断运行程序,论文中程序设计为当微处理器的USART1接受到串口0xFF信号时进入中断。此方法在应用程序区中的软件的编程比较简单,只需要在程序中加入一条中断指令。当运行系统在运行时,若监测到UART1中断被触发时,论文中软件设计判断触发信号是否为0xFF字符,若是此信息则执行看门狗复位发生,使得程序运行从应用程序区跳到Boot Loader区。如果是别的字符命令,则根据软件定义进行相应的操作。
#pragma interrupt_handler uart1_rx_isr31
void uart1_rx_isr(void)
{
char pflag;
pflag = UDR1;
if(pflag == 0xff)
while(1);
}
第二种方法即上电复位更加直接,因为Boot Loader是在系统加电后就立即运行的第一段代码,我们可以通过编程引导复位熔丝位,使得复位向量指向引导Flash区的起始地址,而Boot Loader通常放置在不易丢失的存储器的开始地址,这样运行系统断电上电就等于发生了一个复位操作,Boot Loader就被启动了。因为单片机本身不会改变熔丝位的设置,所以当我们通过软件上将复位熔丝位编程后,这就意味着复位向量会一直指向Boot Loader的起始地址。熔丝位可以通过串行或并行编程的方法来改变,完成Boot Loader加载用户程序代码后,程序开始执行应用程序代码。
第三种方法通过调用跳转函数的方式进入到Boot Loader区也比较简单,当需要进入到Boot Loader区时,只需要加入一个跳转函数。论文中通过AVR Studio4设置嵌入式软PLCBoot Loader区大小配置为4096字节,Boot Loader区复位地址(Boot Loader起始地址)0xf000。结合汇编语言,这样一个简单的通过跳转指令进入引导程序C编程代码如下所示:
void appl_boot(void)
{
MCUCR = 0x00;
MCUCR = 0x01; //中断向量表迁移到Boot区头部
RAMPZ = 0x01; //RAMPZ初始化
asm("jmp 0xf000\n");//跳转到Flash0xf000处,执行引导加载程序
}
这样等待用户梯形图程序更新完成,加载了梯形图应用代码后,会自动进入用户应用程序,MCU开始执行应用程序代码。执行更新完程序后从Boot Loader区跳出自动运行用户应用程序,是通过下面语句实现的。
void boot_appl (void)
{
MCUCR = 0x01;
MCUCR = 0x00;    //中断向量表迁移到应用程序区头部
RAMPZ = 0x00;     //RAMPZ清零初始化
asm("jmp 0x0000\n"); //跳转到Flash0x0000处,执行用户应用程序
}
完成了以上工作,接下来就可以进行实际的C程序设计了。
4.2Boot Loader程序设计
Boot Loader有两种不同的操作模式:启动加载下载模式。
启动加载是Boot Loader的正常工作模式,Boot Loader从单片机的固态存储器上将操作系统加载到RAM中运行等,整个过程没有用户的介入。下载模式是指Boot Loader通过串口连接或者网络连接等通信手段从主机下载文件。
论文为实现梯形图的可在线下载更新,设计的Boot Loader支持这两种模式,而且允许在这两种工作模式之间切换[2]
比如当系统上电后Boot Loader在启动时处于正常就启动加载模式,但是程序会延时等待1分钟(等待时间长短可以根据实际情况调整程序可变),设计中通过初始化PORTE2口控制LED的亮灭来观察系统的运行状态。如果在一分钟内如果UART1口接收到编程下载更新梯形图代码命令,则将切换到下载模式,进入梯形图代码更新状态,等待梯形图代码更新完毕后开始执行更新后的新应用程序。如果1分时间内没有收到编程下载更新梯形图代码命令,程序自动跳转到应用程序区,继续执行单片机内原有保存的PLC梯形图程序,其Boot Loader程序运行流程图如图3所示。

 
3  Boot Loader程序运行流程
嵌入式软PLC系统中为实现梯形图实时更新下载提供了两种方法,一是上电复位,即上面所提到的情况。二是在程序运行到应用程序区阶段,若要更新梯形图代码,通过UART1端口接收到命令符0xFF。当UART1接收到命令0xFF,通过看门狗复位到Boot Loader区运行。当UART1接收到数据并且判断结果是进行梯形图下载更新时,嵌入式软PLC就进入到梯形图下载状态。
串口收发数据一般采用两种方式:查询方式和中断方式。采用查询方式收发数据时,系统会一直在监视串口,当有数据进入缓冲区就做出相应的处理,这样就迫使CPU一直监视串口,占用大量系统资源。
中断方式收发数据时,系统只有在缓冲区出现数据时系统产生串口中断相应,并对数据进行处理,这种方式的缺点是其处理速度比查询方式慢些,但是它不会占用大量系统资源数据区就可以完成串口的通讯任务。本系统中串口的通讯方式就是采用了中断接收数据的方式,系统中实现UART1接受数据的整个流程如图4所示。

 
           图4 UART1接受数据运行流程
论文中支持实现了系统引导加载(Boot Loader),Boot Loader在应用系统启动工作一段时间,它主要用于初始化系统资源,以及等待更新代码。论文中实现了基于AT90CAN128单片机的Boot Loader的设计,对于在此基础上实现微操作系统的移植还需进一步研究。通过Boot Loader这段应用程序设计,就可以完成了启动应用程序前的初始化硬件设备和建立内存空间的映射图等工作,将系统的软硬件环境带到一个合适的状态,为进入应用程序准备好一个正确的环境。
5结束语
本论文阐述了基于AVR微处理AT90CAN128Boot Loader功能和应用,对嵌入式软PLC运行系统的软件进行架构设计,应用Boot Loader实现梯形图的下载更新可使应用软件设计更具灵活性。实验结果表明,将Boot Loader应用于PLC实现梯形图下载更新过程中,可使PLC应用软件设计更具灵活性,同时提高了开发效率,在国内PLC研发生产过程中,相信Boot Loader技术将会得到更为广泛的应用。
作者简介
邵艳(1987-)女 研究生,现就读于中国矿业大学信息与电气工程学院,研究方向为计算机通信网络。
参考文献
[1]曹翊军,薛升宁,郭保龙等.Boot Loader的原理及设计要点[J].电子元器件应用,20081):60-62.
[2]郭书杰,马跃,王品,丁万夫等.软件PLC梯形图开发系统的研究与实现[J].控制与检测,20105):47-51.
[3]杨旭辉,席彩虹,徐武德,郑礴等.基于Windows CE系统的嵌入式软PLC的设计[J].计算机工程与设计,200812月第29卷第24期:6260-6261.
[4]李积英.基于AT90CAN128单片机CAN总线实现方案的研究[J].兰州交通大学学报2007 2):32-34.
[5]Atmel Corp. AT90CAN128 Datasheet[K].2005.

 
 
[ 应用案例搜索 ]  [ ]  [ 告诉好友 ]  [ 打印本文 ]  [ 关闭窗口 ]  [ 返回顶部 ]

0条 [查看全部]  网友评论