AVR Bootloader编程

来源:互联网 发布:mac air 增加内存 编辑:程序博客网 时间:2024/05/20 20:48

AVR之Bootloader

    AVR系列单片机有一个很强大的功能,那就是Bootloader,这里的bootloader和嵌入式的不同,嵌入式中的bootloader是MCU引导操作系统的,AVR所谓的Bootloader是进行整个flash(包括Bootloader本身)的擦写操作,可以进行MCU程序的升级,这对于需要连接到PC机的设备来说,其中的重大意义不言而喻。

   这里以ATmega168为例。

   1.首先,理解168的Flash存储结构:

      整个flash有两种区分方法:

          1>应用程序区和Bootloader区:两个区的空间大小由BOOTSZ熔丝位来配置,具体设置可参考168的Datasheet;

          2>RWW区与NRWW区: 所谓RWW,即同时读写(Read-While-Write)。具体区域大小参见Datasheet.

                在对RWW区和NRWW区进行操作需要明白:

                  对RWW区内的页进行擦除和写操作时,可以读NRWW区;

                  对NRWW区内的页进行擦除和写操作时,CPU停止。

   2.理解如何进行SPM指令的操作:

       这就涉及到 程序存储控制器和状态寄存器---SPMCSR 和 Z指针,其中Z指针就是用于SPM指令的寻址。

       一开始看到SPM指令的时候,容易和其它的汇编指令联系在以前,以为会带个参数什么的,其实spm指令不带任何参数,但是它可

   以进行4种操作:

          1>RWW区读使能操作;

          2>Boot区锁定位设置;

          3>页写入;

          4>页擦除;

      但是一个spm指令如何进行区分,到底该执行哪种操作呢?这就需要结合SPMCSR寄存器了,在这个寄存器里,以上几种操作都有

   相应的使能位,如果相应的使能位和SPMEN位置位了,那接下来的四个指令周期,就会执行相应的操作。操作所需要的地址就是Z指

   针的事了。

  3.相应的步骤: