您的位置 首页 测评

AVR单片机的BOOT区

BOOT区的由来基于一个简单的道理,即单片机的程序是保存在FLASH中的,要运行程序就必须不停的访问FLASH存储器。对于一般的FLASH存储器,数…

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)策划正确而安全的通讯协议与上位机软件进行通讯;

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/263768.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部