新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于CAN总线连接的MEGA8远距离在线升级方案

基于CAN总线连接的MEGA8远距离在线升级方案

作者:时间:2012-08-04来源:网络收藏

  1、3 系统智能监控节点

  系统智能监控节点由5部分组成:微控制器Mega8,并串转换电路,独立CAN控制器SJA1000,驱动器TJA1050和高速光电耦合6N137。如图2所示

  为了提高稳定性和安全性,在SJA1000的TX0和RX0与TJA1050的TXD和RXD相连时,采用了高速光电耦合6N137,并且两个光电耦合器各自连接两个完全隔离的电源,这样就很好地实现了总线上各CAN节点间的电气隔离。在SJA1000与Mega8通信中,中间加入了一个并串转换电路。除了给Mega8留出更多的引脚用于外围电路外,更重要的是传输多位数据时,可以通过并串转换电路,连接到Mega8单片机的通用同/异步串行接口 USART的RXD与TXD引脚。把接收过进来的数据送入USART数据寄存器UDR中,通过ID认证后,进入FLASH编程监控程序,进行自编程修改,达到升级的目的。

  2、MEGA8单片机升级功能

  2.1 引导加载自编程功能

  ATmega8具备引导加载支持的用户程序自编程功能(In-System Programming by On- chip Boot Program),它提供了一个真正的由MCU本身自动下载和更新(采用读/写同时“Read-While-Write”进行的方式)程序代码的系统程序自编程更新的机制。使用该功能时,MCU可以灵活地运行一个常驻Flash的引导加载程序(Boot Loader Program),实现对读取代码,或者从程序存储器中读取代码,然后将代码写入(编程)到Flash存储器中。引导加载程序有能力读写整个Flash存储器,包括引导加载程序所在的引导加载区本身。引导加载程序还可以对自身进行更新修改,甚至可以将自身删除,使系统的自编程能力消失。基于这个因素,使得成为了可能。引导加载程序区的大小可以由芯片的设置,该段程序区还提供两组锁定位,以便用户选择对该程序区的不同级别的保护。

  2、2 MEGA8的BOOT介绍

  由于MEGA8具有IAP可在应用中升级的功能,本系统在软件设计上采用了功能。主程序采用C语言编写,BOOT程序则采用了汇编编写。目的是为了提高下载速度,设计中放弃了ATMEL提供的AVRPROG烧录软件,另外采用了一个下载烧录速度较高的ID通讯协议,在程序代码量比较大的时候,具有更明显的速度优势,并且也便于用户二次开发。

  MEGA8的引导功能可通过相应的来确定,程序的入口、BOOT区的大小可以通过烧录单片机的BOOTSZ1、BOOTSZ0两个来确定。单片机复位后向量入口也是通过烧录单片机的BOOTRST熔丝位来确定。另外,单片机在执行IAP编程时需要用到 Store Program Memory Control Register(SPMCR)寄存器。

  SPMCR寄存器包含了页擦除,页写入,BOOT区加密设置,页填充及页的RWW(Read While Write)等功能的设置。需要注意的是在执行每个功能时,都需要设置SPMEN标志,在随后的4个时钟周期内运行SPM指令,该标志会在SPM执行完成后自动清零。函数如下:

  Do_SPM:

  Wait_SPM: ; 等待页操作完成

  in templ,SPMCR

  sbrc templ,SPMEN

  rjmp Wait_SPM

  out SPMCR,temp

  spm ; 执行SPM指令

  .dw 0xffff

  nop

  ret

  有了以上的函数,就可以很容易的进行页擦除、页写入、页填充等程序的设计了。比如需要执行页擦除指令,则首先要将需要擦除的页地址写入Z寄存器,然后置位SPM的PGERS(页擦除位)和SPMEN(SPM允许位),然后再调用Do_SPM函数即可。程序如下:



评论


相关推荐

技术专区

关闭