- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
AVR自引导IAP的应用设计
AVR 自引导IAP 的应用设计
ATmega128 具备引导加载支持的用户程序自编程功能(In-Sysytem Programming by
On-chip Boot Program),它提供了一个真正的由MCU 本身自动下载和更新(采用读/写同
时“Read-While-Write”进行的方式)程序代码的系统程序自编程更新的机制。利用AVR 的这
个功能,可以实现在应用编程(IAP)以及实现系统程序的远程自动更新的应用。
IAP 的本质就是,MCU 可以灵活地运行一个常驻Flash 的引导加载程序(Boot Loader
Program),实现对用户应用程序的在线自编程更新。引导加载程序的设计可以使用任何的
可用的数据接口和相关的协议读取代码,或者从程序存储器中读取代码,然后将代码写入(编
程)到Flash 存储器中。
引导加载程序有能力读写整个Flash 存储器,包括引导加载程序所在的引导加载区本身。引
导加载程序还可以对自身进行更新修改,甚至可以将自身删除,使系统的自编程能力消失。
引导加载程序区的大小可以由芯片的熔丝位设置,该段程序区还提供两组锁定位,以便用户
选择对该段程序区的不同级别的保护。
本节将给出一个实际的的Boot Loader 程序,它可以配合Windows 中的超级终端程序,采
用Xmodem 传输协议,通过RS232 接口下载更新用户的应用程序。
5.2.1 基本设计思想
1. Boot Loader 程序的设计要点
Boot Loader 程序的设计是实现IAP 的关键,它必须能过通过一个通信接口,采用某种协议
正确的接收数据,再将完整的数据写入到用户程序区中。本例Boot Loader 程序的设计要点
有:
l 采用ATmega128 的USART 口实现与PC 之间的简易RS232 三线通信;
l 采用Xmodem 通信协议完成与PC 机之间的数据交换;
l 用户程序更新完成后自动转入用户程序执行;
l Boot Loader 程序采用C 语言内嵌AVR 汇编方式编写,阅读理解方便,可移植性强,
代码小于1K 字。
2 . Xmodem 通信协议
Xmodem 协议是一种使用拨号调制解调器的个人计算机通信中广泛使用的异步文件运输协
议。这种协议以128 字节块的形式传输数据,并且每个块都使用一个校验和过程来进行错
误检测。如果接收方关于一个块的校验和与它在发送方的校验和相同时,接收方就向发送方
发送一个认可字节。为了便于读者阅读程序,下面简要说明该协议的主要特点,有关Xmoden
的完整的协议请参考其它相关的资料。
l Xmodem 的控制字符:soh 01H、eot 04H、ack 06H、nak 15H、can 18H、
eof 1AH。
l Xmodem 传输数据块格式:“soh packNO 255-packNO …128 个字节的数据
块… cksum”。其中soh为起始字节;packNO为数据块编号字节,每次加一;
255-packNO是前一字节的反码;接下来是长度为128 字节的数据块;最后的cksum
是128 字节数据的CRC 校验码,长度为2 个字节。
l 接收端收到一个数据块并校验正确时,回送ack;接收错误回送nak;而回送can
表示要发送端停止发送。
l 发送端收到ack后,可继续发送下一个数据块(packNO+1);而收到nak则可再次
重发上一个数据块。
l 发送端发送eot表示全部数据发送完成。如果最后需要发送的数据不足128 个字节,
用eof填满一个数据块。
l 控制字符“C”有特殊的作用,当发送端收到“C”控制字符时,它回重新开始以CRC 校验
方式发送数据块(packNO = 1)。
l 每发送一个新的数据块packNO加1,加到OxFF 后下一个数据块的packNO为零。
l 校验方式采用16 位CRC 校验(X^16 + X^12 + X^5 + 1)。
5.2.2 源程序代码
下面给出的源程序是在ICCAVR 中实现的。
/*****************************************************
采用串行接口实现Boot_load 应用的实例
华东师大电子系 马 潮 2004.07
Compiler: ICC-AVR 6.3 1
Target: Mega128
Crystal: 16Mhz
Used: T/C0,USART0
******************************************
文档评论(0)