AVR BootLoader应用范例
//退出Bootloader程序,从0x0000处执行应用程序
put_s("退出Bootloader升级程序!");
delay_ms(500); //很奇怪,见顶部的说明
loop_until_bit_is_set(UCSRA,UDRE); //等待结束提示信息回送完成
GICR = (1
boot_rww_enable (); //RWW区读允许,否则无法马上执行用户的应用程序
asm volatile("jmp 0x0000": : ); //跳转到Flash的0x0000处,执行用户的应用程序
}
/*
FLASH程序存储器的编程方法常见的有以下几种:
(1)传统的并行编程方法;
(2)通过串行口进行在线编程ISP(In System Programmability) 对器件或电路甚至整个系统进行现场升级或功能重构;
(3)在运行中,应用程序控制下的应用在线编程IAP (In Applocation Programing) 简单地说就是在某一个section中运行程序,同时对另一个section进行擦除、读取、写入等操作。
ISP方式相对于传统方式有了极大的进步,它不需要将芯片从电路板上卸下就可对芯片进行编程,减少了开发时间,简化了产品制造流程,并大大降低了现场升级的困难。
而IAP方式是对芯片的编程处于应用程序控制之下,对芯片的编程融入在通信系统当中,通过各种接口(UART/SPI/IIC 等)来升级指定目标芯片的软件。
BootLoader 功能介绍
BootLoader 提供我们通常所说的IAP(In Applicaion Program)功能。
多数Mega系列单片机具有片内引导程序自编程功能(BootLoader)。
MCU 通过运行一个常驻FLASH 的BootLoader 程序,利用任何可用的数据接口读取代码后写入自身FLASH存储器中 ,实现自编程目的
基本设计思想(参考了马潮老师的文章)
1. Boot Loader程序的设计要点
Boot Loader程序的设计是实现IAP的关键,它必须能过通过一个通信接口,采用某种协议正确的接收数据,再将完整的数据写入到用户程序区中。本例Boot Loader程序的设计要点有:
1 采用ATmega16的USART口实现与PC之间的简易RS232三线通信;
2 采用Xmodem通信协议完成与PC机之间的数据交换;
3 用户程序更新完成后自动转入用户程序执行;
2. Xmodem通信协议
Xmodem协议是一种使用拨号调制解调器的个人计算机通信中广泛使用的异步文件运输协议。
这种协议以128字节块的形式传输数据,并且每个块都使用一个校验和过程来进行错误检测。
如果接收方关于一个块的校验和与它在发送方的校验和相同时,接收方就向发送方发送一个认可字节。
为了便于读者阅读程序,下面简要说明该协议的主要特点,有关Xmoden的完整的协议请参考其它相关的资料。
1 Xmodem的控制字符:
2 XMODEM有两种校验模式:
一种是一字节的checksum校验模式,不常用。
另一种是2字节的CRC16校验模式(X^16 + X^12 + X^5 + 1),纠错率高达99.9984%。
两种模式的选择由接收端发送的启动控制符来决定,启动发送后不能切换。
当发送端收到“NAK”控制字符时,它将会开始以checksum校验方式发送数据块。
当发送端收到“C”控制字符时,它将会开始以CRC校验方式发送数据块。
3 Xmodem-CRC传输数据块格式:“
其中
<255-BlockNO>是前一字节的反码;
接下来是长度为128字节的数据块;
最后的
5 接收端收到一个数据块并校验正确时,回送;接收错误回送
6 BlockNO的初值为0x01,每发送一个新的数据块
7 发送端收到后,可继续发送下一个数据块(BlockNO+1);而收到
8 发送端发送
*/
makefile中的程序基地址偏移
LDFLAGS += -Wl,--section-start=.text=0x3800 //0x3800字节=0x1C00字
即增加下图中的27行
然后在options 中勾择Use External Makefile 选中刚才改的Makefile
这是,编译完成的hex文件大约15k?? 好像是5k
升级的程序,不能是HEX文件,因为HEX文件是内含格式且每行信息可以不等长的(下图)。对于这个BOOTLOADER升级程序,只能接
收原始的二进制文件信息并覆写到相应的flash区内,因此只能使用BIN格式。将HEX转为BIN有一个小软件
而BIN文件是连续且等长的
AVRBootloade 相关文章:
- AVR Bootloader应用介绍(11-27)
- CRC校验---之avrbootloader(11-13)
- AVR之BOOTLOADER技术详解(11-13)
- AVR_M8 BootLoader应用范例(11-13)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)