- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
采用RS485连接的mega8的在系统升级
MEGA8单片机的远距离在线升级设计
广州市天河双龙电子有限公司 耿德根
北京汇讯电子技术有限公司 张树民
摘要:本文介绍了如何利用MEGA8通过RS485总线进行远距离在线升级的方法,介绍了MEGA8的BOOT功能,并给出了比较详细的程序流程图和部分源程序。由于该部分具有通用性,所以可很容易地移植到AVR其它MEGA系列的设计方案中。
关键词:ISP,IAP,BOOT引导,RISC,熔丝位
一、MEGA8单片机简介
ATMEL公司最新推出的AVR系列单片机MEGA8,内含8K FLASH程序存储器,1K的内部SRAM,512字节的内部EEPROM。为了便于升级,除了提供ISP在线编程功能以外,还提供了BOOT引导功能,为实现IAP在系统升级提供了可能。
与传统的51单片机不同,MEGA8为RISC结构,在16MHz的晶振下,可以提供高达16MIPS的处理性能,外设包括1个USART同异步串口,1个SPI接口,1个TWI(兼容I2C协议)接口,3个PWM,2个8位定时器,1个16位定时器,一个模拟比较器,还有最多6路10bit、2路8bit 的A/D接口等,内部还自带WDT、BOD,及最高达8M的可校准RC,供电电压最宽可从2.7V到5.5V。由于它具有如此多的功能及相对低廉的价格,使其在工控、仪表、电力、医疗、通讯、家电等诸多电子领域取得了广泛的应用。
二、ISP和IAP
ISP即在系统编程(In System Program),可以通过下载线对PCB板上的单片机直接进行烧录,而不必将单片机取下来,这已经大大方面了我们的设计,而最新的IAP,即在应用中编程(In Application Program),则可以通过在程序运行中接收新的升级数据,然后将自身重新编程的一个过程。这需要一个引导程序,而这个程序可以由用户编写后保存在单片机的BOOT区当中。下面通过一个实际的例子,介绍MEGA8如何实现远距离在线升级。
三、系统简介
本系统包括30个分机,采用RS485总线连接,由上位计算机进行总控制。系统构成如图一。MEGA8含有一个USART,本次只使用其异步通讯功能。具体设置为19200bps、8、N、1工作方式,经过MAX485E芯片转换为RS485工作电平。MAX485E的DT和RT接在一起,由MEGA8单片机的PD2口控制,这样可以避免单片机在发送的时候接收自己发送的数据。
图一
由于计算机只提供RS232接口,而要使用RS485通讯,就必须进行接口转换。目前市场上有多种型号RS232-RS485接口模块,功能也很强。基本上都采用了串口窃电、波特率自适应技术等,极大地简化了用户的重复开发,本次采用了迈威公司的MWE485-A型号转换模块。实际测试在19200波特率下,传送距离可达600m,发送和接收非常可靠。
四、MEGA8的BOOT介绍
由于MEGA8具有IAP可在应用中升级的功能,本系统在软件设计上采用了BOOT引导功能。主程序采用C语言编写,BOOT程序则采用了汇编编写。为了提高下载速度,本次设计放弃了ATMEL提供的AVRPROG烧录软件,另外采用了一个下载烧录速度较高的通讯协议,在程序代码量比较大的时候,具有更明显的速度优势,并且也便于用户二次开发。
MEGA8的引导功能可通过相应的熔丝位来确定,BOOT引导程序的入口、BOOT区的大小可以通过烧录单片机的BOOTSZ1、BOOTSZ0两个熔丝位来确定,熔丝位如表一:
表一
单片机复位后向量入口也是通过烧录单片机的BOOTRST熔丝位来确定。熔丝位如表二:
表二
另外,单片机在执行IAP编程时需要用到Store Program Memory Contorl Register(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函数即可。程序如下:
……
ld
文档评论(0)