新闻中心

EEPW首页>嵌入式系统>设计应用> 设计基于LPC2000的次级启动加载程序用于代码升级

设计基于LPC2000的次级启动加载程序用于代码升级

作者: 时间:2012-08-21 来源:网络 收藏

  编程扇区:在这个阶段,数据将被从SRAM写入闪存中的指定地址。这里有几个要特别注意的地方:

  ● 只能将位于片内SRAM内的数据写入片内闪存;

  ● 位于片内闪存的写入地址必须是256字节对齐;

  ● 片内SRAM必须位于局部总线(Local Bus),这就意味着有两块SRAM区域(供USB和以太网使用)内的数据不能被直接写入闪存;

  ● 一次写入的字节数必须是256、512、1024或者4096。

  数据校验:用户不必自己写程序每次对写入的数据进行检查,而是可以直接调用一个数据校验的IAP命令。

  IAP过程中的中断

  在擦除和编程操作过程中,片内闪存是不可访问的,当用户程序启动执行时,用户闪存区域的中断向量有效。在调用擦除和编程的IAP命令前,用户应当关闭中断或者确保中断向量表在SRAM中有效并且中断处理函数也位于SM中。

  IAP使用的RAM

  IAP命令使用片内SM最顶端的32字节空间。最多使用128字节的栈空间(位于用户分配的栈内),且为向下生长方式。

加载程序和用户应用程序设计

加载程序

  每次上电或者复位后,加载程序将会被运行,通过串口打印出一些选项,用户可以选择继续执行应用程序或者更新程序。

  次级启动加载程序位于内部闪存中从扇区0开始的若干个扇区内,这些扇区不能和用户应用程序占用的扇区重叠。

  另外,由于主程序运行在ARM模式,而IAP运行在THUMB模式,因此必须做相应配置使得次级启动加载程序里支持ARM和THUMB模式并存。

用户应用程序

  存储器分布

  用户应用程序存放在和次级启动加载程序位置不同的的扇区中,并且占用了从0x4000 0000开始的一部分片内SM空间。

  在片内SRAM的最底部,存放了应用程序的中断向量表。要注意在配置系统RW区域时,把这部分空间预留出来,即用户应用程序的RW从0x4000 0040开始。

  中断向量表重映射

  对于ARM7处理器而言,中断向量位于从0x0000 0000到0x0000 001C的地址范围,因此在Boot ROM和SRAM内的一小部分空间必须被映射到这个地址内,使得可以在不同的模式(参考用户手册内存映射章节)下使用中断。

  这一小段空间包括32字节的中断向量以及额外的32字节跳转指令,总共64字节,范围为0x0000 0000到0x0000 003F。

  因为次级启动加载程序的中断向量表存在于闪存的0x0000 0000到0x0000 003F,因此用户应用程序的中断向量表只能被映射到片内SRAM(对于支持外部总线接口的器件,也可以映射到片外存储器)。在跳转到用户应用程序执行前,要将这64字节的数据复制到片内SRAM的底部(0x4000 0000 – 0x4000 003F),并且将系统的内存映射模式设置为“User RAM Mode”。这样当用户应用程序产生中断时,系统会自动到位于SRAM的中断向量表取中断向量入口,而不是错误地跳转到位于0x0地址处的、属于次级启动加载程序的中断向量表。

  运行用户应用程序

  更新完成后,修改PC指针,使其指向新的用户程序的起始地址,然后开始执行。

  注意:要保证用户应用程序能运行,必须还要做一些必要的初始化工作,包括RW区域的复制、ZI区域的清零等等,这些没有放在次级启动加载程序里完成,而是在用户应用程序开始运行时首先执行。

  程序(从串口利用XMODEM协议更新代码)上电运行时,串口将会打印出如图4的信息。

  用户可以测试一些IAP命令,或者选择PROG命令更新用户代码,更新完成后,选择RUN命令来执行。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭