单片机成长之路(avr基础篇)- 003 AVR单片机的BOOT区

发布者:yunhui最新更新时间:2019-11-30 来源: eefocus关键字:avr  基础篇  BOOT区 手机看文章 扫描二维码
随时随地手机看文章

BOOT区的由来基于一个简单的道理,即单片机的程序是保存在FLASH中的,要运行程序就必须不停的访问FLASH存储器。对于一般的FLASH存储器,数据的写入需要一定的时间来完成,在数据写入完成之前,存储器中所有的数据都是不可读的,这就在运行旧程序和写入新程序之间造成了一个矛盾。


使用BOOT区是解决这个矛盾的方法之一,它将FLASH存储器从物理上分为两个独立的区域,对其中的一个区的数据写入不会影响到另一个区的数据读取操作。我们可以让单片机的程序在其中一个区(通常是BOOT区)运行,而运行着的程序代码写入另外一个区(通常为应用程序区)内。


AVR高档单片机ATmega系列中含有BOOT代码区,即程序引导区,也可称器件自身监控区,有了此BOOT区监控,该器件就可对自己器件的Flash程序存储器及EEPROM数据存储器进行读、写操作,即实现自编程功能,也可称IAP在系统应用中编程,这种自编程程序区我们称其用户管理程序,简称用户程序。


BOOT区大小可根据实际需要用寄存器设定,并可锁定加密,使外界无法读取其监控。如果BOOT区监控设计得好,可把该器件的主要、关键控制对象放在BOOT区监控内(如中断控制),其它工作让用户自己设计,可变成傻瓜式控制器、检测仪,可远程对嵌入式设备进行检测、维护、升级等操作。也可通过有线、无线网络监控设备。实现秀才不出门,也可管世界。这种带BOOT区监控的AVR器件,可应用于程序、数据需变动的场合;可用于自适应、自修正场合;可用于闭环控制,人工智能; 可用于统一计量、计价,又必须在同一时间内快速调正的设备中(例:IC卡计费电话机); 可用于……


有了BOOT区监控,用户程序可通过单片机通讯口与PC机RS232接口来写用户程序,可省去AVR串行或并行下载电缆,这对外出维护设备带来方便。双龙SL-MEGA8开发实验器出厂就提供BOOT区演示监控,用标准RS232通讯电缆就可做程序下载实验(对Flash程序存储器及EEPROM数据存储器实验擦、写、读取)。这样对有的AVR高档单片机编程方法有:编程器编程,ISP串行、并行下载编程,JTGA线编程,IAP在应用中编程(仅用串行通讯线)多种形式,给科研、生产带来方便。可以自己设计编程器件,对用户将提供BOOT区监控方案框架,你只需简单连接,就可组成自己的BOOT区监控。以上设计思想也适合所有AVR高档单片机ATmega系列中含带有BOOT代码区的器件。


AVR的BOOTLOAD功能同其它一些芯片不同,它的BOOTLOAD程序没有固化在芯片内部(出厂为空),而是需要由用户设计实现(实际上,你第一次下载BOOTLOAD程序还必须使用其它的方式编程,如ISP、JTAG等),因此对一般的用户掌握起来有一定的困难,不如一些其它芯片的BOOTLOAD使用方便。但对高手来讲,可以根据实际需要编写高级、高效、专用的BOOTLOAD程序,如从一个U盘读取数据,更新用户的应用程序;编写一个时间炸弹,或对用户的密码进行验证,10次不对则将系统程序销毁等等。简单意味着使用方便,但灵活和适应性差,而灵活性需要你具备更高的能力去驾驭它。可能会有一天,在单片机的系统上也出现了“病毒”程序,其原因就是使用了固化的BOOTLOAD程序。由于固化的程序必须有统一开放的接口,那么用一个带“病毒”的应用程序更新原来的应用程序也就轻而易举了。

 

相关问题的总结:

1.AVR自编程是如何实现的?
答:要想回答这个问题必须先了解AVR的FLASH的分区结构:AVR单片机FLASH分成RWW(READ-WHILE-WRITE)和NRWW(NO-READ-WHILE-WRITE)两个区;其中RWW区的含义是:如果Boot Loader 软件是对RWW 区内的某一页进行编程,则可以从Flash 中读取代码,但只限于NRWW 区内的代码。在Flash 编程期间,用户软件必须保证没有对RWW 区的读访问。如果用户软件在编程过程中试图读取位于RWW 区的代码( 如通过call/jmp/lpm指令或中断),软件可能会终止于一个未知状态。为了避免这种情况的发生,需要禁止中断或将其转移到Boot Loader 区。Boot Loader 总是位于NRWW 存储区。只要 RWW 区处于不能读访问的状态,存储程序存储器控制和状态寄存器(SPMCSR) 的RWW 区忙标志位RWWSB 置位。编程结束后,要在读取位于RWW 区的代码之前通过软件清除RWWSB。而NRWW区的含义是:在Boot Loader 软件更新RWW 区的某一页时,可以读取位于NRWW 区的代码。当 BootLoader 代码更新NRWW 区时,在整个页擦除或写操作过程中CPU 被挂起。而且AVR还自带读写程序区的指令(LPM读程序区指令,SPM写程序区指令),实现程序的更新操作。
================================================================================
2.能否在进行自编过程中,修改复位中断向量的位置(从APP区移至BOOTLOADER区或者相反)?
答:不能。我们一般通过编程Boot复位熔丝位使得复位向量指向Boot 区的起始地址。这样,复位后BOOT Loader 立即就启动了。加载了应用代码后,程序再开始执行应用代码。但,有一点必须指出的是,MCU 本身不能改变熔丝位的设置。也就是说,一旦Boot 复位熔丝位被编程,复位向量将一直指向Boot 区的起始地址。熔丝位只能通过串行或并行编程的方法来改变。故,在自编程过程中,无法实现修改复位中断向量的位置。
================================================================================
3.如何将一个函数定义在BOOT区呢?
答:首先对函数进行连接编译声明,再先修改MAKEFILE里连接编译的相关选项如M16里想将GETCHAR(VOID)定位在BOOT区里则:
(1)声明GETCHAR(VOID __attribute__ ((section (".bootloader")));
(2)在"LDFLAGS=-Wl,-Map=$(TRG).map,--cref"行加进",--section=.bootloader=0x3800"声明即可
================================================================================ 
4.如何将整个工程连接编译的起始地址定义在BOOT区首地址
答:只需修改MAKEFILE里的TEXT段的值即可
如:"LDFLAGS=-Wl,-Map=$(TRG).map,--section-start=.text=0x3800"
================================================================================
5.在编译BOOTLOADER时设置引导程序的起始,为什么与STUDIO显示的设置RWW区大小显示的不一样如设置M16时会显示(Boot Flash size = 1024 words Boot start address=$1c00;[BOOTSZ=00]:default而在MAKEFILE里则是.startsection.bootsection=0x3800呢?
答:在STUDIO里是用字描述地址,而在GCC却用字节描述。
================================================================================
6.实现AVR的BOOTLOADER工作需要注意那些事项?
答:

(1)了解AVR的FLASH的结构分区的含义及APPLICATION;
(2)理解AVR GCC的BOOT.H库文件的例子,并进行测试;
(3)懂得利用AVR GCC的MAKFILE连接编译选项,修改函数或者程序的编译时重定位操作;
(4)进行简单仿真的测试;
(5)策划正确而安全的通讯协议与上位机软件进行通讯;

关键字:avr  基础篇  BOOT区 引用地址:单片机成长之路(avr基础篇)- 003 AVR单片机的BOOT区

上一篇:AVR单片机入门+使用keil-MDK裸奔TQ2440
下一篇:单片机成长之路(avr基础篇)- 001 ISP与IAP的区别

推荐阅读最新更新时间:2024-11-12 14:28

AVR单片机UCSRC 和UBRRH 共用地址的问题
UCSRC寄存器结构: UBRRH寄存器结构: AVR单片机UART的UCSRC和UBRRH两个寄存器是共用地址的,通过最高位的URSEL来选择更新哪个数据。 比如写UCSRC=0x86,那么0x86的最高位Bit7=1,所以这组数据会更新UCSRC的值 写UBRRH=0x01,那么0x01的最高位Bit7=0,所以这组数据会更新UBRRH的值 无需专门更新URSEL的值。 如果写成了UBRRH=0x81,那么就会去更新UCSRC的值,是自动识别的。 在网上看到有朋友问:为什么在程序中写UBRRH的时候没有先将URSEL置0? 而是直接设置 UBRRH=BAUD_H; UBRRL=BAUD_L; 现在
[单片机]
<font color='red'>AVR</font>单片机UCSRC 和UBRRH 共用地址的问题
AVR控制TEA5767 C语言程序
#include iom32v.h #include macros.h #define uchar unsigned char #define uint unsigned int #define ulong unsigned long void delay() { uint i=0; for (i=0;i 2000;i++) ; } unsigned char radio_write_data ={0x69,0x28,0xa0,0x13,0x00}; //要写入TEA5767的数据 void inputbyte(uchar CD) //写入一字节数据 { uchar i,mid=0; for (
[单片机]
超声波测距-AVR程序代码
#include #include #define uchar unsigned char #define uint unsigned int uchar int_flag; uint qian,bai,shi,ge; uint i; float distance; // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x18 ;PORTB #endasm #include // External Interrupt 0 service routine interrupt void ext_int0_isr(void) {#asm( sei ) if
[单片机]
AVR单片机的主要特性介绍
  AVR单片机是ATMEL公司研发的增强型内置Flash的RISC精简指令集高速8位单片机,设计时吸取了8051及PIC单片机的优点,具备单时钟周期执行一条指令的能力,运行速度高达1Mips/MHz。AVR单片机可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。   AVR单片机硬件结构采取8位机与16位机的折中策略,即采用局部寄存器存堆(32个寄存器文件)和单体高速输入/输出的方案(即输入捕获寄存器、输出比较匹配寄存器及相应控制逻辑),提高了指令执行速度,克服了瓶颈现象,增强了功能;同时又减少了对外设管理的开销,相对简化了硬件结构,降低了成本。AVR单片机在软/硬件开销;速度、性能和成本诸多方
[单片机]
<font color='red'>AVR</font>单片机的主要特性介绍
ARM基础篇—ARM微处理器的应用选型
鉴于ARM微处理器的众多优点,随着国内外嵌入式应用领域的逐步发展,ARM微处理器必然会获得广泛的重视和应用。但是,由于ARM微处理器有多达十几种的内核结构,几十个芯片生产厂家,以及千变万化的内部功能配置组合,给开发人员在选择方案时带来一定的困难,所以,对ARM芯片做一些对比研究是十分必要的。 以下从应用的角度出发,对在选择ARM微处理器时所应考虑的主要问题做一些简要的探讨。 1、ARM微处理器内核的选择 从前面所介绍的内容可知,ARM微处理器包含一系列的内核结构,以适应不同的应用领域,用户如果希望使用WinCE或标准Linux等操作系统以减少软件开发时间,就需要选择ARM720T以上带有MMU(MemoryManage
[单片机]
12864液晶(AVR_Mega128)的头文件
大家使用时把这段代码保存成.h的头文件,在主程序中包含这个头文件就行 根据你们液晶电路更改下面的端口宏定义即可 //CPU:ATmega128; 时钟频率为16MHz //编译环境为ICCAVR //头文件 #include iom128v.h #include string.h #include avrdef.h //数据端口定义 #define Dat_Port_Write PORTA #define Dat_Port_Read PINA //控制端口及相应的位 #define RS_RW_EN_Control PORTG #define LCM_RS 0 #define LCM
[单片机]
ds1302的avr C程序
下面是DS1302的AVR单片机的C程序,这个程序结构很不错。但是站长没有调试这个AVR单片机的程序。 #define ds1302_rst PC0 #define ds1302_io PC1 #define ds1302_sclk PC2 #define set_ds1302_rst_ddr() DDRC|=1 ds1302_rst #define set_ds1302_rst() PORTC|=1 ds1302_rst #define clr_ds1302_rst() PORTC&=~(1 ds1302_rst) #define set_ds1302_io_ddr() DDRC|=1 ds1302_io #defi
[单片机]
基于AVR32的隧道环境监测系统
一、项目概述 1.1 引言 隧道内的环境对行车安全及旅客、养护作业人员的健康会带来一些特殊问题,这主要是因为隧道中的温度、湿度、光线、有害气体的成分含量和积累。因而,摸清隧道内的环境状况,并采取相应措施,将有助于保护人员的身体健康。 1.2 项目背景/选题动机 由于大多隧道是四周封闭的通道,无护栏。无自然光线,隧道中的照明基本上只能由照明设备提供。当人员白天进入隧道后,由于隧道内外光线强弱差别很大,人眼不能马上适应,会出现进洞时“黑洞效应”和出洞时“眩光效应”。温湿度和有害气体也会对人员身体健康造成伤害。 二、需求分析 2.1 功能要求 测量隧道环境实时信息:温度、湿度、光强、有害气体和视频信息。 2.2 性能要求
[单片机]
基于<font color='red'>AVR</font>32的隧道环境监测系统
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved