IAP及其应用以LPC为例讲述IAP功能在实际使用过程(可编辑).doc
《IAP及其应用以LPC为例讲述IAP功能在实际使用过程(可编辑).doc》由会员分享,可在线阅读,更多相关《IAP及其应用以LPC为例讲述IAP功能在实际使用过程(可编辑).doc(28页珍藏版)》请在三一办公上搜索。
1、IAP及其应用以LPC为例讲述IAP功能在实际使用过程 产品应用笔记 AN070701IAP 及 其 应 用以LPC2300 为 例 , 讲 述IAP 功 能 在 实 际使 用 过 程 中 的 应 用 方 法 以 及 相 关 解 决 方 案概 述?Boot 简 介片 内Flash 存 储 系 统数 据 存 储 解 决 方 案在 线 升 级 解 决 方 案? 概 述?Boot 简 介片 内Flash 存 储 系 统数 据 存 储 解 决 方 案在 线 升 级 解 决 方 案概 述IAP(In Appplication Program),即在应用中编程。顾名思义,就是在系统运行的过程中动态编程,对
2、程序执行代码的动态修改。 IAP技术应用于嵌入式系统的数据存储和在线升级。例如在程序运行工程中产生4k字节数据表,为了避免占用SRAM空间,用户可以使用IAP技术将此表写入片内Flash。又如用户在开发完一个系统后要增加新的软件功能,可以使用IAP技术在线升级程序,避免重新拆装设备。? 概 述?Boot 简 介片 内Flash 存 储 系 统数 据 存 储 解 决 方 案在 线 升 级 解 决 方 案Boot 简 介LPC2300系列处理器在出厂时,由厂家在片内固化了一段Boot代码。Boot装载程序控制芯片复位后的初始化操作,并提供对Flash编程的方法。Boot程序可以对芯片进行擦除、编程
3、。?在系统编程(ISP)?在应用编程(IAP)? Boot 重 映 射Boot区位于地址0x0007 E0000x0007 FFFFBoot装载程序提供了ISP和IAP编程接口,可以处。不过,芯片上电以后,会首先对Boot区执行实现对片内Flash存储器的编程。一次重映射,映射到片内存储器空间的最高处,即接近2G(0x8000 0000)的地方。 2.0GB0x7FFF FFFF8 K B Boot Block 重映射0x7FFF E000地址重映射片内静态RAM1.0GB0x4000 00000x0007 FFFF8 K B Boot Block0x0007 E000片内Flash0x000
4、0 003F异常向量表0.0GB0x0000 0000? 在 系 统 编 程 (ISP )在系统编程是通过Boot装载程序和UART0对片内Flash存储器进行擦除/编程的方法。CPU运行控制器 RAMBoot代码A AR RM M7 7JTAG处 处理 理器 器核 核通过ISP对FLASH外设Flash编程BootU UA AR RT0 T0 Block串口? 在 应 用 编 程 (IAP )在应用编程是用户的应用代码对片内Flash存储器进行擦除/编程的方法。 通过各种途径CPU运行控制器获取用户代码Boot代码RAMA AR RM M7 7JTAG处 处理 理器 器核 核通过IAP对FL
5、ASH外设Flash编程BootUART0 Block? 在 应 用 编 程 (IAP )IAP程序是Thumb代码,位于地址0x7FFF FFF0。在ARM系统中实现状态转换的指令是“BXAddr”,目标地址Addr的最低位(bit0)仅来确定最终状态,实际的“目的地址 Addr & 0xFFFF FFFE”。在调用IAP函数时,不仅要实现跳转而且还要完成状态转换。注意:此为示意代码,Bit01使处实际编程中请用理器切换到LDR R0,0x7FFFFFF1ARM 代 码 Thumb 代 码Thumb状态BXR0ARM状代码替代。态字对齐0x7FFF FFF0IAP 程 序 入 口0x0000
6、 4000 0x7FFF FFF2BX 0x7FFF FFF10x0000 4004 Thumb状0x7FFF FFF1 & 0x7FFF FFFE态半字对齐? 在 应 用 编 程 (IAP )在调用IAP函数时,寄存器R0中的字指针指向存储器(RAM)中包含的命令代码和参数,它作为函数的入口参数,函数执行的返回值保存在寄存器R1中的字指针指向存储器(RAM)中,包含状态代码和结果。结果表最大数目为2ARM 寄 存 器命 令 参 数 表 命 令 结 果 表R0R0 命 令 代 码 状 态 代 码命 令 代 码 状 态 代 码R1R1 参 数1 结 果1参 数1 结 果1 参 数n 结 果n参
7、数n 结 果n参数表最大数目为5? 在 应 用 编 程 (IAP )#define IAP_LOCATION 0x7FFFFFF1 IAP 程 序 入 口#define IAP_LOCATION 0x7FFFFFF1typedef void *IAP unsigned int , unsigned int ;typedef void *IAP unsigned int , unsigned int ;定 义 函 数 类 型 指 针IAP iap_entry;IAP iap_entry; 定 义 函 数 指 针unsigned longcommand5; IAP 命 令 表unsigned lo
8、ngcommand5;unsigned longresult2;IAP 返 回 值unsigned longresult2;iap_entry IAP IAP_LOCATION;iap_entry IAP IAP_LOCATION;设 置 函 数 指 针iap_entry command , result;iap_entry command , result;调 用IAP执行跳转指令时,如果“目的地址”的bit0 1,表示处理器需要进行状态切换,由ARM状态切换到Thumb状态,Thumb代码是“半字”对齐格式,即地址 & 0xFFFF FFFE。因此,虽然此处跳转目的地址 0x7FFFFFF
9、1,实际上跳转到地址0x7FFFFFF0,同时进行切换到Thumb状态。在 应 用 编 程 (IAP )由于IAP是Thumb代码,因此,需要在ADS编译选项中,选中ARM/Thumb Interworking选型,这样ARM和Thumb指令就可以混合编译。在 应 用 编 程 (IAP )IAP程序会使用片内RAM空间的顶部32个字节,因此,在支持IAP的场合,用户程序应该避免使用这部分空间。 0x7FFF FFFF 0x7FFF FFFF8 K B Boot Block 重映射 8 K B Boot Block 重映射IAP代 IAP代0x7FFF E000 0x7FFF E000码使用 码
10、使用0x4000 1FFF 0x4000 7FFF顶部32 字节 顶部32 字节0x4000 1FE0 0x4000 7FE08 K B 片内静态RAM 3 2 K B 片内静态RAM0x4000 0000 0x4000 0000片内Flash 片内Flash0x0000 003F 0x0000 003F异常向量表 异常向量表0x0000 0000 0x0000 0000LPC2364LPC2366/68/78? 小 知 识 : 当 前 程 序 状 态 寄 存 器 ARM内核包含1个当前程序状态寄存器(CPSR)。CPSR反映当前处理器的状态,其包含:?4个条件代码标志负标志N、零标志Z、进位
11、标志C和溢出标志V ;?2个中断禁止位IRQ禁止与FIQ禁止;?5个对当前处理器模式进行编码的位M4:0;?1个用于指示当前执行指令的位ARM指令还是Thumb指令。? 程 序 状 态 寄 存 器 的 格 式条件代码标志 保留 控制位31 30 292827 26 87 6543210N N Z Z C C V V I I F F T T M M4 4 M M3 3 M M2 2 M M1 1 M M0 0? ? ?溢出标志进位或借位扩展 模式位状态位零FIQ禁止负或小于IRQ禁止? 条 件 代 码 标 志各标志位的含义如下:?负标志N:运算结果的第31位值,记录标志设置操作的结果;?零标志Z
12、:如果标志设置的操作为0,则置位;?进位标志C:记录无符号加法溢出,减法无借位,循环移位;?溢出标志V:记录标志设置操作的有符号溢出。? 控 制 位3、处理器模式位M0M4。2 1、处理器状态位 、中断禁止控制位 T; I和F;M 4 : 0 可 见 的 T h u m b 状 态 寄 存 器 可 见 的 A R M 状 态 寄 存 器模 式10000 用 户 R0 R7, SP, LR, PC, CPSR R0 R14, PC, CPSR当控制位I置位时,IRQ中断被禁止;R0 R7, SP_fiq, LR_fiq, PC, R0 R7, R8_fiq R14_fiq, PC,10001 快
13、 速 中 断?当控制位T置位时,处理器正在Thumb状态下运行;CPSR, SPSR_fiq CPSR, SPSR_fiq当控制位F置位时,FIQ中断被禁止。R0 R7, SP_irq, LR_irq, PC, R0 R12, R13_irq, R14_irq, PC,10010中 断CPSR, SPSR_fiq CPSR, SPSR_irq当控制位T清零时,处理器正在ARM状态下运行。R0 R7, SP_svc, LR_svc, PC, R0 R12, R13_svc, R14_svc, PC,10011 管 理CPSR, SPSR_svc CPSR, SPSR_svc警告:绝对不要强制改变
14、CPSR寄存器中的控制R0 R7, SP_abt, LR_abt, PC, R0 R12, R13_abt, R14_abt, PC,10111 中 止CPSR, SPSR_abt CPSR, SPSR_abt 位T。如果这样做,处理器将进入一个无法预测的 注意:不是所有模式位的组合都定义了有R0 R7, SP_und, LR_und, PC, R0 R12, R13_und, R14_und, PC,11011未 定 义状态。CPSR, SPSR_und CPSR, SPSR_und效的处理器模式,如果将非法值写入M4:0中,R0 R7, SP, LR, PC, R0 R14, PC, 11
15、111 系 统处理器将进入一个无法恢复的模式。CPSR CPSR保 留 位 CPSR中的保留位被保留将来使用。当改变CPSR标志和控制位时,请确认没有改变这些保留位。 另外,请确保您的程序不依赖于包含特定值的保留位,因为将来的处理器可能会将这些位设置为1或者0。? 在 应 用 编 程 (IAP ) 76 54 3 210用户可以在启动代码Startup.s文件中的1 1 0 1 1 1 1 11 1 0 1 1 1 1 1InitStack函数内调整各个模式的堆栈空间位置。系统模式 76 54 3 210ARM状态InitStack InitStack I F T M4 M3 M2 M1 M0
16、M4 I F T M3 M2 M1 M0IRQ禁止FIQ禁止; 设 置 系 统 模 式 堆 栈; 设 置 系 统 模 式 堆 栈MSR CPSR_c, #0xdfMSR CPSR_c, #0xdfLDR SP, StackUsr ? 32LDR SP, StackUsr ? 32 避 免 使 用 片 内RAMMOV PC, R0MOV PC, R0的 顶 部32 个 字 节? 在 应 用 编 程 (IAP )IAP的命令表I S P 命令 命令代码 准备编程扇区 50 将RAM 内容复制到Flash 51 擦除扇区 52 扇区查空 53读器件ID 54读boot 代码版本 55比较 56IAP
17、各命令返回代码及意义表返回代码 符号 描述 0 CMD_SUCCESS 命令被成功执行。 1 INVALID_COMMAND 无效命令。 2 SRC_ADDR_ERROR 源地址没有以字为边界。 3 DST_ADDR_ERROR 目标地址的边界错误。 4 SRC_ADDR_NOT_MAPPED 源地址没有位于存储器映射中。计数值必须考虑可用性。 5 DST_ADDR_NOT_MAPPED 目标地址没有位于到存储器映射中。计数值必须考虑到可用性。 6 COUNT_ERROR 字节计数值不是4 的倍数或是一个非法值。 7 INVALID_SECTOR 扇区号无效。 8 SECTOR_NOT_BLA
18、NK 扇区非空。 9 SECTOR_NOT_PREPARED为写操作准备扇区命令未执行。_FOR_WRITE_OPERATION 10 COMPARE_ERROR 源和目标数据不相等。 11 BUSY Flash 编程硬件接口忙。概 述?Boot 简 介片 内Flash 存 储 系 统数 据 存 储 解 决 方 案在 线 升 级 解 决 方 案片 内Flash 系 统在利用IAP代码来操作片内Flash时,必须熟悉片内Flash的扇区分布。片内Flash的操作是以“扇区”为单位进行的,每个“扇区”的大小不定。由于IAP代码位于Boot区内,所以IAP命令不片内256KB允许对Boot扇区执行写
19、/擦除操作。Flash0x0003 FFFF扇 区14 (32K )0x0003 8000存储器空间存储器空间 0x0001 FFFF扇 区10 (32K )片内512KB0x0007 FFFF 0x0007 FFFF0x0001 8000Boot Block8KB Boot Block8KBFlashBoot Block 0x0007 E000 0x0007 E000片内128KB扇 区8 (32K )不占用片内0x0000 8000FlashFlash扇 区7 (4K ) 用 户Flash0x0000 7000504KB用 用 户 户F Flla as sh h1 12 28 8/2 25
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IAP 及其 应用 LPC 讲述 功能 实际 使用 过程 编辑

链接地址:https://www.31ppt.com/p-2303421.html