欢迎来到EDA中国!
当前位置:网站首页 >资源共享 > 嵌入式

nxp LPC1100 Second Bootloader方法与实例

  • 300k
  • zip
  •  
  •  
  • 下载
  • 2013-07-05
  • 软件简介

LPC1100系列的所有微控制器都内置了片上Flash存储器来存储应用代码和数据。有一些片上机制能使存储器的内容可以现场更新:

在系统编程(ISP, In-System Programming) —允许使用器件主bootloaderUART0片上Flash存储器重新进行编程。主bootloader是驻留在微控制器ROM存储区内的固件,在上电或器件复位时运行。

在应用编程(IAP, In-Application Programming) —ROM中包含的函数,允许在用户应用程序的控制下对片上Flash存储器进行编程或擦除。

串行线调试(SWD, Serial Wire Debug) —可以使用两针的调试接口对片上Flash存储器进行编程。

在这些机制之外还可以使用二级bootloader。这是一种驻留在片上Flash的软件,它允许程序通过ISPUART0SWD之外的其他接口下载新的用户代码。

本应用笔记描述了如何为LPC1100创建二级bootloader。并用一个例子展示了使用UART0XMODEM-1K 协议下载新的应用固件。注意,软件已经设计完成,它可以很容易得被修改成使用其它接口和协议。

2. 背景

这部分内容讲述了LPC1100和二级bootloader操作相关的背景知识。

2.1 启动顺序

 

在设计二级bootloader之前必须首先理解基于ARM Cortex - M0LPC1100器件的启动顺序。在上电和复位后,Cortex - M0处理器开始从地址映射中的0地址处开始执行。注意,LPC1100可以将地址0处存储空间进行重映射。这项功能是受SYSMEMREMAP寄存器控制的,见图1

 

最初,中断向量映射到BootROM,使得主bootloader被执行。一旦这项任务完成,主bootloader会将中断向量映射到片上flash并开始执行应用程序。

 

Cortex - M0内核希望位于起始地址的代码被组织成图2所示的形式。第一个位置包括了堆栈顶的地址;这个值将被处理器加载到堆栈指针寄存器SP。下一个位置包含了复位处理程序的地址,这是处理器开始执行代码的地址。注意,此地址的LSB必须设置为1,向处理器表明这是Thumb代码。

 

2.2 中断处理

 

LPC1100含有一个NVIC(嵌套向量中断控制器),用来处理全部的中断。当一个中断发生时,处理器使用向量表去定位向量中断处理函数的地址。向量表的组织结构见图2

2.3 在应用编程(IAP)

 

     Boot ROM包含了一些允许对片上Flash进行编程和擦除的函数例程。这些例程被称作IAP函数,被用户应用代码用来对片上Flash进行擦写。注意,在擦写操作时Flash存储器是不能够被访问的。因此,启动Flash读写操作的IAP命令,使用片上RAM的顶部32字节的空间运行。如果IAP在对Flash 编程,用户程序就不应该使用这个空间。关于IAP的进一步的细节可以参考LPC1100用户手册LPC111x User Manual UM10398, NXP Semiconductors

 

3. 设计二级bootloader

LPC1100的片上Flash存储器被划分为4 KB的扇区。这些扇区代表了可以被擦除的最小存储空间。二级bootloader占用了Flash存储器的第一个扇区,这个扇区开始于0地址。剩余的扇区可用来存储应用程序和数据。二级bootloader的存储位置意味着在复位和上电之后,它

将在应用程序之前被首先执行。二级bootloader的操作被概括如下,见图3

 

二级bootloader启动后紧接着检查是否有有效的应用程序存储在flash存储器中,如果有,那么该应用程序就被执行。扇区0包含对程序的完整性检查的细节。如果没有找到应用程序,二级bootloader将尝试通过UART0XMODEN-0下载应用程序。

 

3.1 中断处理

 

在开发应用程序时,中断向量表的内容在构建时期就被创建。随后,在程序被下载到Flash的时候,这个向量表被放置到存储器的固定位置(这是处理器所知道的)。

LPC1100上,中断向量表和二级bootloader位于同样的Flash存储空间。二级bootloader是被设计永久驻留在Flash存储器上,因此,不可能在每一次程序下载的时候都更新中断向量表的内容。

Cortex-M3内核支持向量表的重映射,但Cortex–M0内核不支持这项功能。正因为如此,二级bootloader被设计为将处理器重定向到一个位于Flash的应用程序区域向量表的处理函数,见图4

 

 

当一个中断发生时,CPU从扇区0的中断向量表中获取中断处理程序的地址(这是bootloader的向量表,见图2)。这个表中包含的地址指向一系列重定向函数。这些函数获得应用程序区域向量表的中断处理程序地址(应用程序向量表见图4)。图5是一个实现这些函数功能的实例。

 

当一个中断发生时,将执行应用程序向量表相对应的入口地址所指向的处理函数。

3.2 应用程序的完整性检查

 

复位后二级bootloader会检查在应用程序的Flash扇区是否有有效的镜像。它会产生应用程序Flash扇区的一个16CRC校验码,并将它和保存在Flash存储器最后两个字节的值相比较。如果这两个值相符,二级bootloader会执行应用程序,如果不相符,将开始下载新应用程序的过程。

3.3 XMODEM-1K

 

XMODEM-1K是一个建立在原XMODEM协议基础上的简单文件传输协议。两者之间的主要区别是1K变体支持1281024字节的数据包(原XMODEM协议只支持128字节的数据包)。

二级bootloader作为客户端,与它相连的设备(通常是PC机)作为服务器。客户端通过发送ASCII'C'到服务器初始化一次传输请求。一旦初始化完成,服务器以一次一个数据包的形式将文件数据传输过来。在接收之后,客户端将检查CRC数据包,并向服务器发送ACK(应答)或NACK(无应答)。整个过程将持续到整个文件传输完成。

4. 应用程序固件开发

如果想建立一个驻留在flash存储器中并位于二级bootloader旁的应用程序,那么就必须修改连接器设置以使其被放置到合适的位置。接下来的部分详细解释了如何实现上述功能。

4.1 LPCXpresso应用程序开发

 

当使用LPCXpresso开发应用程序时,修改连接器设置的最简单方法是用例程中的文件替换下面的两个文件:

LinkerFilesApplicationReleaseapplication_Release_mem.ld

LinkerFilesApplicationDebugapplication_Debug_mem.ld

接着需要修改工程设置,这样的的话这些连接文件就可以替换掉工具链自动生成的文件。用LPCXpresso打开应用工程,右击工程并选择属性。然后请确认―MCUSettings‖ ―ToolSettings‖符合图6和图7所示。

 

 

此外,应修改应用程序项目设置,确保生成二进制文件。要做到这一点只需简单的添加下面的命令到―post-buildsteps‖,见图8

arm-none-eabi-objcopy -O binary ${BuildArtifactFileName}${BuildArtifactFileBaseName}.bin;

 

5. LPCXpreso演示

和本应用笔记配套的软件包括了二级Bootloader和一个例程。下面的一系列步骤描述了如何使用这个软件去演示二级Bootloader的操作(注意,这个演示需要使用LPCXpresso的目标板和Embedded Artists的基板):

(1) 使用LPCXpresso工具链编译Bootloader和应用工程,这样会最终创建以下的二进制

 

关键字 : Bootloader LPC1100 NXP 实例 方法 
获取帮助