已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
IAP及其应用以LPC2300为例 讲述IAP功能在实际使用过程中的应用方法以及相关解决方案 产品应用笔记AN070701 概述Boot简介片内Flash存储系统数据存储解决方案在线升级解决方案 概述Boot简介片内Flash存储系统数据存储解决方案在线升级解决方案 IAP InAppplicationProgram 即在应用中编程 顾名思义 就是在系统运行的过程中动态编程 对程序执行代码的动态修改 IAP技术应用于嵌入式系统的数据存储和在线升级 例如在程序运行工程中产生4k字节数据表 为了避免占用SRAM空间 用户可以使用IAP技术将此表写入片内Flash 又如用户在开发完一个系统后要增加新的软件功能 可以使用IAP技术在线升级程序 避免重新拆装设备 概述 概述Boot简介片内Flash存储系统数据存储解决方案在线升级解决方案 LPC2300系列处理器在出厂时 由厂家在片内固化了一段Boot代码 Boot装载程序控制芯片复位后的初始化操作 并提供对Flash编程的方法 Boot程序可以对芯片进行擦除 编程 在系统编程 ISP 在应用编程 IAP Boot简介 Boot重映射 Boot装载程序提供了ISP和IAP编程接口 可以实现对片内Flash存储器的编程 Boot区位于地址0 x0007E000 0 x0007FFFF处 不过 芯片上电以后 会首先对Boot区执行一次重映射 映射到片内存储器空间的最高处 即接近2G 0 x80000000 的地方 8KBBootBlock重映射 地址重映射 在系统编程 ISP 在系统编程是通过Boot装载程序和UART0对片内Flash存储器进行擦除 编程的方法 UART0 ARM7处理器核 CPU运行Boot代码 通过ISP对Flash编程 在应用编程 IAP 在应用编程是用户的应用代码对片内Flash存储器进行擦除 编程的方法 ARM7处理器核 CPU运行Boot代码 通过各种途径获取用户代码 通过IAP对Flash编程 在应用编程 IAP IAP程序是Thumb代码 位于地址0 x7FFFFFF0 在ARM系统中实现状态转换的指令是 BXAddr 目标地址Addr的最低位 bit0 仅来确定最终状态 实际的 目的地址 Addr 0 xFFFFFFFE 在调用IAP函数时 不仅要实现跳转而且还要完成状态转换 0 x7FFFFFF0 ARM代码 Thumb代码 0 x7FFFFFF1 0 x7FFFFFFE BX0 x7FFFFFF1 IAP程序入口 Bit0 1使处理器切换到Thumb状态 ARM状态字对齐 Thumb状态半字对齐 注意 此为示意代码 实际编程中请用LDRR0 0 x7FFFFFF1BXR0代码替代 在应用编程 IAP 在调用IAP函数时 寄存器R0中的字指针指向存储器 RAM 中包含的命令代码和参数 它作为函数的入口参数 函数执行的返回值保存在寄存器R1中的字指针指向存储器 RAM 中 包含状态代码和结果 参数表最大数目为5 结果表最大数目为2 defineIAP LOCATION0 x7FFFFFF1typedefvoid IAP unsignedint unsignedint IAPiap entry unsignedlongcommand 5 unsignedlongresult 2 iap entry IAP IAP LOCATION iap entry command result 在应用编程 IAP 执行跳转指令时 如果 目的地址 的bit0 1 表示处理器需要进行状态切换 由ARM状态切换到Thumb状态 Thumb代码是 半字 对齐格式 即地址 0 xFFFFFFFE 因此 虽然此处跳转目的地址 0 x7FFFFFF1 实际上跳转到地址0 x7FFFFFF0 同时进行切换到Thumb状态 在应用编程 IAP 由于IAP是Thumb代码 因此 需要在ADS编译选项中 选中ARM ThumbInterworking选型 这样ARM和Thumb指令就可以混合编译 在应用编程 IAP IAP程序会使用片内RAM空间的顶部32个字节 因此 在支持IAP的场合 用户程序应该避免使用这部分空间 IAP代码使用 IAP代码使用 小知识 当前程序状态寄存器 ARM内核包含1个当前程序状态寄存器 CPSR CPSR反映当前处理器的状态 其包含 4个条件代码标志 负标志N 零标志Z 进位标志C和溢出标志V 2个中断禁止位 IRQ禁止与FIQ禁止 5个对当前处理器模式进行编码的位 M 4 0 1个用于指示当前执行指令的位 ARM指令还是Thumb指令 程序状态寄存器的格式 条件代码标志 保留 控制位 溢出标志 进位或借位扩展 零 负或小于 IRQ禁止 FIQ禁止 状态位 模式位 N Z C V I T F 条件代码标志 各标志位的含义如下 负标志N 运算结果的第31位值 记录标志设置操作的结果 零标志Z 如果标志设置的操作为0 则置位 进位标志C 记录无符号加法溢出 减法无借位 循环移位 溢出标志V 记录标志设置操作的有符号溢出 警告 绝对不要强制改变CPSR寄存器中的控制位T 如果这样做 处理器将进入一个无法预测的状态 控制位 1 中断禁止控制位I和F 2 处理器状态位T 3 处理器模式位M0 M4 注意 不是所有模式位的组合都定义了有效的处理器模式 如果将非法值写入M 4 0 中 处理器将进入一个无法恢复的模式 保留位 CPSR中的保留位被保留将来使用 当改变CPSR标志和控制位时 请确认没有改变这些保留位 另外 请确保您的程序不依赖于包含特定值的保留位 因为将来的处理器可能会将这些位设置为1或者0 在应用编程 IAP 用户可以在启动代码Startup s文件中的InitStack函数内调整各个模式的堆栈空间位置 InitStack 设置系统模式堆栈MSRCPSR c 0 xdfLDRSP StackUsr 32MOVPC R0 IAP的命令表 在应用编程 IAP IAP各命令返回代码及意义表 概述Boot简介片内Flash存储系统数据存储解决方案在线升级解决方案 BootBlock不占用片内Flash 在利用IAP代码来操作片内Flash时 必须熟悉片内Flash的扇区分布 片内Flash的操作是以 扇区 为单位进行的 每个 扇区 的大小不定 由于IAP代码位于Boot区内 所以IAP命令不允许对Boot扇区执行写 擦除操作 片内512KBFlash 用户Flash 128 256KB 片内256KBFlash 片内128KBFlash 片内Flash系统 对于LPC2368 78来说 Boot区位于512kBFlash的顶部 因此在LPC2368 78器件中 只有504kBFlash可供用户使用 用户Flash 504KB 片内Flash系统 概述Boot简介片内Flash存储系统数据存储解决方案在线升级解决方案 数据存储解决方案 系统概述 通过IAP 用户可以使用片内Flash作为非易失性数据存储器 存储一些设备的配置信息 这样不仅可以节约成本 而且还可以减小线路板的面积 LPC2364 Flash Flash Flash 系统概述 利用IAP将Flash作为数据存储器时 用户需要控制自身代码量的大小及代码定位 绝对不能够出现Flash数据区和Flash代码区重叠的现象 因为在利用IAP向片内Flash存储器写入数据时 需要对数据扇区进行擦除 如果数据区和代码区重合 就有可能会破坏系统的代码空间 造成系统死机或崩溃 通过IAP向片内Flash的扇区7写入512个字节的数据 注意 任何Flash都是有寿命的 如果对片内Flash的操作过于频繁 就会对其造成损坏 LPC2300的Flash擦除 写入次数为10万次 系统概述 使用IAP将SRAM中的数据编程到Flash时 源数据区只能够使用片内局部总线上的SRAM 不能使用通用USBSRAM和以太网SRAM 片内SRAM 如果一个数据是从偶地址开始的连续存储 那么它就是半字对齐 否则就是非半字对齐 如果一个数据是以能被4整除的地址开始的连续存储 那么它就是字对齐 否则就是非字对齐 小知识 存储数据的对齐方式 片内Flash编程步骤 擦除操作之前必须先选择扇区 一次可以选择多个扇区 使用IAP之前需要定义的一些常量 写入数据之前要先擦除扇区 已擦除的可不必重复擦 IAP提供数据校验手段 用户不必自己动手校验数据 编程操作之前必须先选择扇区 一次可以选择多个扇区 字对齐的SRAM数据区数据写入到256字节对齐的Flash中 一次写入256 512 1024或4096字节 片内Flash编程步骤 defineIAP FCCLK48000 defineIAP ENTER ADR0 x7FFFFFF1uint32paramin 8 uint32paramout 8 通过在使用IAP代码之前 需要定义一些常量 如系统时钟 IAP函数入口 IAP入口缓冲区和出口缓冲区等 确定系统参数 片内Flash编程步骤 uint32SelSector uint8sec1 uint8sec2 paramin 0 IAP SELECTOR paramin 1 sec1 paramin 2 sec2 void IAP ENTER ADR paramin paramout return paramout 0 对某一个扇区执行擦除 写入等操作之前 必须先选择该扇区 但也可以一次选择多个扇区 选择扇区 可选 片内Flash编程步骤 uint32EraseSector uint32sec1 uint32sec2 paramin 0 IAP ERASESECTOR paramin 1 sec1 paramin 2 sec2 paramin 3 IAP FCCLK void IAP ENTER ADR paramin paramout return paramout 0 LPC2300片内Flash在写入数据前需要执行擦除操作 如果目标区域已经被擦除 那么就不必重复擦除 可直接写入数据 擦除操作一次可以擦除多个扇区 擦除扇区 可选 执行完以上几步后 就可以编程Flash了 执行编程扇区的操作时 IAP函数会将RAM中的数据拷贝到Flash中 片内Flash编程步骤 uint32RamToFlash uint32dst uint32src uint32no paramin 0 IAP RAMTOFLASH paramin 1 dst paramin 2 src paramin 3 no paramin 4 IAP FCCLK void IAP ENTER ADR paramin paramout return paramout 0 编程扇区 IAP代码还为用户提供了一个数据校验的手段 这样用户就可以不必自己动手来校验写入Flash中的数据是否正确 片内Flash编程步骤 uint32Compare uint32dst uint32src uint32no paramin 0 IAP COMPARE paramin 1 dst paramin 2 src paramin 3 no void IAP ENTER ADR paramin paramout return paramout 0 校验数据 可选 向扇区7写入512个字节的数据 扇区7可以作为一个E2PROM来使用 如存储一些系统的配置信息 函数主体 defineDestAddr0 x00007000intmain void align 4 uint8SendData 512 uint32i for i 0 i 512 i SendData i i SelSector 7 7 EraseSector 7 7 SelSector 7 7 RamToFlash DestAddr uint32 SendData 512 while 1 编程后的Flash区域 擦除后的Flash区域 概述Boot简介片内Flash存储系统数据存储解决方案在线升级解决方案 在线升级解决方案 系统概述 在线升级 实际上是Flash数据存储的一个应用特例 系统开发完毕后 在应用过程中 如果需要增加部分功能 那么为了避免重新拆装设备 可以借助 在线升级 方式 目前 在线升级是很多系统都必需的一个功能 对于LPC2300来说 利用IAP函数即可实现在线升级 用户程序接收新的代码 然后调用IAP函数将新的代码编程到Flash扇区中 实现在线升级 系统通过串口接收升级代码 然后调用IAP函数实现在线升级 为了实现在线升级 本系统将芯片的片内Flash重新分区 Boot代码区 又叫固件区 存放系统的BootLoader 可完成代码升级 首地址位于0 x00000000 LOW区和HIGH区 用户代码分为两个区 LOW区和HIGH区 当程序位于LOW区时 可以对HIGH区进行升级 反之 如果程序位于HIGH区 可以对LOW区进行升级 LOW区的首地址为 0 x00008000 HIGH区的首地址为 0 x00010000 每个用户代码区的容量为32kB 程序标志区 标记当前用户程序运行的区 程序标志区的首地址为 0 x00004000 对于这个区间 仅仅使用了前4个字节 用来保存当前用户代码区的首地址 如程序标志 0 x00008000 则当前程序运行在LOW区 如程序标志 0 x00010000 则当前程序运行在HIGH区 如程序标志为其它值 则当前程序运行在固件区域 升级HIGH区代码 UART0 通过IAP对Flash编程 ARM7处理器核 0 x00010000 0 x00008000 程序运行在LOW区 P0 6处于低电平 串口接收升级代码 修改程序标志 标识程序运行在高区 CP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建国后民营经济演进历程
- 入党考试题目大题及答案
- 2024年内蒙古自治区赤峰市国家电网安全准入(变电专业)考试题库及答案解
- 2022年中国农业银行(上海分行)校园招聘试题及答案解析
- 智能反射面赋能的无线定位和环境感知关键技术研究
- 2025年江西省丰城市辅警招聘考试试题题库附参考答案详解【达标题】
- 痛风患者饮食禁忌指导
- 超声科泌尿系统超声检查技术培训
- 广西壮族自治区烟草专卖局(公司)2025年下半年度招聘116人易考易错模拟试题(共500题)试卷后附参考答案
- 广州市荔湾区招考十三行特色街区管委会办公室工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 自发性气胸的护理常规
- 2025年中国华能集团公司招聘笔试参考题库含答案解析
- 《车用动力电池液冷板技术条件》
- 高中化学《电解池》课件
- 科学计算语言Julia及MWORKS实践 课件 15-元编程
- 海南省海口市第十四中学联考2024-2025学年七年级上学期11月期中数学试题(含答案)
- 供暖合同协议2024年
- 内审检查表完整版本
- 3级人工智能训练师(高级)国家职业技能鉴定考试题及答案
- 光伏项目施工总进度计划表(含三级)
- DB32-T 4757-2024 连栋塑料薄膜温室建造技术规范
评论
0/150
提交评论