230讲述IAP功能在实际使用过程中的应用方法以及相关解决方案

上传人:桔**** 文档编号:567498529 上传时间:2024-07-20 格式:PPT 页数:44 大小:961.50KB
返回 下载 相关 举报
230讲述IAP功能在实际使用过程中的应用方法以及相关解决方案_第1页
第1页 / 共44页
230讲述IAP功能在实际使用过程中的应用方法以及相关解决方案_第2页
第2页 / 共44页
230讲述IAP功能在实际使用过程中的应用方法以及相关解决方案_第3页
第3页 / 共44页
230讲述IAP功能在实际使用过程中的应用方法以及相关解决方案_第4页
第4页 / 共44页
230讲述IAP功能在实际使用过程中的应用方法以及相关解决方案_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《230讲述IAP功能在实际使用过程中的应用方法以及相关解决方案》由会员分享,可在线阅读,更多相关《230讲述IAP功能在实际使用过程中的应用方法以及相关解决方案(44页珍藏版)》请在金锄头文库上搜索。

1、IAP及其应用以LPC2300为例,讲述IAP功能在实际使用过程中的应用方法以及相关解决方案 产品应用笔记 AN070701孽美秦囊巢蔑欣刀羹绸拧寨悍湾邯酌嫁彩潦痉祝肖暂栋篙凋盗啃至擦议湖230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案概述Boot简介片内Flash存储系统数据存储解决方案在线升级解决方案横竞烈耻振割颁镰芬渣笑锭赁钙啃垃涪立拾偷刘烃什畔恰蓄炒砍呕央坚谷230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案概述Boot简介片内F

2、lash存储系统数据存储解决方案在线升级解决方案祥海锐试蜜银袍疆楷蔫航翼青谬烦荷吵撒诡危迎垂祖妓旱伸区俏邮柳库窘230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案 IAP(InAppplicationProgram),即在应用中编程。顾名思义,就是在系统运行的过程中动态编程,对程序执行代码的动态修改。 IAP技术应用于嵌入式系统的数据存储和在线升级。例如在程序运行工程中产生4k字节数据表,为了避免占用SRAM空间,用户可以使用IAP技术将此表写入片内Flash。又如用户在开发完一个系统后要增加新的软件功能,可以使用I

3、AP技术在线升级程序,避免重新拆装设备。概述莲叁呵茫厢碰蒋栏翠信套薄筛媚靳澡式耪钦覆砰逼宋颐又速羽舔迟荆元孙230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案概述Boot简介片内Flash存储系统数据存储解决方案在线升级解决方案旧蚜叭哉疚椰岗秧荆厅扑询拳瓣款纱戊栽正榴姬莲菜患熔锹啄亡氢舔拉队230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案 LPC2300系列处理器在出厂时,由厂家在片内固化了一段Boot代码。Boot装载程序控制芯片复位后

4、的初始化操作,并提供对Flash编程的方法。Boot程序可以对芯片进行擦除、编程。在系统编程(ISP)在应用编程(IAP)Boot简介菩汰诉伊畦袜稳龋赫萎们省除乔淳知耐险菊彪虏塔沧挟虚崇逝集雁扁乘狗230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案Boot重映射 Boot装载程序提供了ISP和IAP编程接口,可以实现对片内Flash存储器的编程。 Boot区位于地址0x0007 E0000x0007 FFFF处。不过,芯片上电以后,会首先对Boot区执行一次重映射,映射到片内存储器空间的最高处,即接近2G(0x800

5、0 0000)的地方。 0x0000 00002.0GB1.0GB0.0GB0x0000 003F0x0007 E0000x4000 00000x7FFF E0000x7FFF FFFF0x0007 FFFF8KB Boot Block异常向量表片内静态RAM片内Flash8KB Boot Block 重映射地址重映射癌枷吊奈龙核雹断杀悲赠宽雌娥三子猴谰拙延叹淤短董养布岁台滔垮瓦邮230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案ARM7处理器核外设控制器RAMBootBlockFLASHJTAGUART0串口在系统

6、编程(ISP) 在系统编程是通过Boot装载程序和UART0对片内Flash存储器进行擦除/编程的方法。UART0ARM7处理器核CPU运行Boot代码通过ISP对Flash编程螺蚊鼻魔塔呜引旅古佐瞳知湘仔钞及拜酗爹扁源枪邮柜从妙躺衣溯凭笼终230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案ARM7处理器核外设控制器RAMBootBlockFLASHJTAGUART0在应用编程(IAP) 在应用编程是用户的应用代码对片内Flash存储器进行擦除/编程的方法。 ARM7处理器核CPU运行Boot代码通过各种途径获取用户

7、代码通过IAP对Flash编程素堑盾菇净痹陪嘎默琳上林咸段惧壶梗墙尧送汲律澜腰链芯魄圆耽楞面哲230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案在应用编程(IAP) IAP程序是Thumb代码,位于地址0x7FFF FFF0。在ARM系统中实现状态转换的指令是“BX Addr”,目标地址Addr的最低位(bit0)仅来确定最终状态,实际的“目的地址= Addr & 0xFFFF FFFE”。在调用IAP函数时,不仅要实现跳转而且还要完成状态转换。0x7FFF FFF00x0000 40000x0000 40040x7

8、FFF FFF2ARM代码Thumb代码0x7FFF FFF1 & 0x7FFF FFFEBX 0x7FFF FFF1IAP程序入口Bit0=1使处理器切换到Thumb状态ARM状态字对齐Thumb状态半字对齐注意:此为示意代码,实际编程中请用LDR R0,=0x7FFFFFF1BX R0代码替代。釜虐会乡锐倚肤管仓内肢胡涸漏浚康晤杨础右夷够敏绩词换恨豹炎枣糕抠230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案在应用编程(IAP) 在调用IAP函数时,寄存器R0中的字指针指向存储器(RAM)中包含的命令代码和参数,它

9、作为函数的入口参数,函数执行的返回值保存在寄存器R1中的字指针指向存储器(RAM)中,包含状态代码和结果。命令参数表命令代码参数1参数n命令结果表状态代码结果1结果nARM寄存器R0R1参数表最大数目为5结果表最大数目为2轴凡瑞媒叫临碴兽梗总糟彝道认肢悉了赏蝴宁凌植姜傍唁娩蚀殴袖埠埂镜230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案#defineIAP_LOCATION0x7FFFFFF1typedefvoid (*IAP) (unsigned int , unsigned int );IAP iap_entry;

10、unsigned long command5;unsigned long result2;iap_entry = (IAP) IAP_LOCATION;iap_entry (command , result);在应用编程(IAP) 执行跳转指令时,如果“目的地址”的bit0 = 1,表示处理器需要进行状态切换,由ARM状态切换到Thumb状态,Thumb代码是“半字”对齐格式,即地址 & 0xFFFF FFFE。因此,虽然此处跳转目的地址 = 0x7FFFFFF1,实际上跳转到地址0x7FFFFFF0,同时进行切换到Thumb状态。 IAP程序入口调用IAP定义函数类型指针定义函数指针IAP命

11、令表IAP返回值设置函数指针宪都丧殊劈司踢盅妒壤付拉弟踢睦獭炙溉烙溺雌搞挞敛斡呸阳罢福怠浸烦230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案在应用编程(IAP) 由于IAP是Thumb代码,因此,需要在ADS编译选项中,选中ARM/Thumb Interworking选型,这样ARM和Thumb指令就可以混合编译。 糖顿挡炕宁汞袜担监识颧径阅烧愿稳犁螟杖限酱膏置寞疲种粳禽冰髓棚靖230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案在应用编程

12、(IAP) IAP程序会使用片内RAM空间的顶部32个字节,因此,在支持IAP的场合,用户程序应该避免使用这部分空间。 IAP代码使用0x0000 00000x0000 003F0x4000 1FE00x4000 00000x7FFF E0000x7FFF FFFF0x4000 1FFF异常向量表8KB 片内静态RAM片内Flash8KB Boot Block 重映射顶部32字节LPC23640x0000 00000x0000 003F0x4000 7FE00x4000 00000x7FFF E0000x7FFF FFFF0x4000 7FFF异常向量表32KB 片内静态RAM片内Flash8

13、KB Boot Block 重映射顶部32字节LPC2366/68/78IAP代码使用鬼威返初誉忧砚涸蚁罪徊郴讹誉廷聪腰廉纫致乍柿共侠谁豫蚁枝吞衙极扼230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案小知识:当前程序状态寄存器 ARM内核包含1个当前程序状态寄存器(CPSR)。CPSR反映当前处理器的状态,其包含:4个条件代码标志(负标志N、零标志Z、进位标志C和溢出标志V );2个中断禁止位(IRQ禁止与FIQ禁止);5个对当前处理器模式进行编码的位(M4:0);1个用于指示当前执行指令的位(ARM指令还是Thum

14、b指令)。描闸笑府氟石絮母赚委赞南验渠偿铀倍瓣私竭台甫铸凄臭摹旗祁故筏碌悲230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案程序状态寄存器的格式NZCVIM0M1M2M3M4TF. . .31 30 29 28 27 26 8 7 6 5 4 3 2 1 0条件代码标志保留控制位溢出标志进位或借位扩展零负或小于IRQ禁止FIQ禁止状态位模式位NZCVIM0M1M2M3M4TF泊醋愉青汐琉撂硼个源鹏佣什哦淳沸宝卒隐厦碱甘句筷岳颜拣炔减遭妨铺230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IA

15、P功能在实际使用过程中的应用方法以及相关解决方案条件代码标志各标志位的含义如下:负标志N:运算结果的第31位值,记录标志设置操作的结果;零标志Z:如果标志设置的操作为0,则置位;进位标志C:记录无符号加法溢出,减法无借位,循环移位;溢出标志V:记录标志设置操作的有符号溢出。曾信瞄状丛愉仕寅需茧密覆领聋畅伏鸿氖轧籍节羚瞩膨丙尤伴旨誊锗舰担230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案 警告:绝对不要强制改变CPSR寄存器中的控制位T。如果这样做,处理器将进入一个无法预测的状态。控制位1、中断禁止控制位I和F;2、处

16、理器状态位T;3、处理器模式位M0M4。当控制位I置位时,IRQ中断被禁止;当控制位F置位时,FIQ中断被禁止。当控制位T置位时,处理器正在Thumb状态下运行;当控制位T清零时,处理器正在ARM状态下运行。M4:0模式模式可见的可见的Thumb状态寄存器状态寄存器可见的可见的ARM状态寄存器状态寄存器10000用户R0R7, SP, LR, PC, CPSRR0R14, PC, CPSR 10001快速中断R0R7, SP_fiq, LR_fiq, PC,CPSR, SPSR_fiq R0R7, R8_fiqR14_fiq, PC,CPSR, SPSR_fiq 10010中断R0R7, SP

17、_irq, LR_irq, PC,CPSR, SPSR_fiq R0R12, R13_irq, R14_irq, PC,CPSR, SPSR_irq 10011管理R0R7, SP_svc, LR_svc, PC,CPSR, SPSR_svc R0R12, R13_svc, R14_svc, PC,CPSR, SPSR_svc 10111中止R0R7, SP_abt, LR_abt, PC,CPSR, SPSR_abt R0R12, R13_abt, R14_abt, PC,CPSR, SPSR_abt 11011未定义R0R7, SP_und, LR_und, PC,CPSR, SPSR_u

18、nd R0 R12, R13_und, R14_und, PC,CPSR, SPSR_und11111系统R0R7, SP, LR, PC,CPSR R0R14, PC, CPSR 注意:不是所有模式位的组合都定义了有效的处理器模式,如果将非法值写入M4:0中,处理器将进入一个无法恢复的模式。诀刘涨膘卤馏匪乖褐垣搁中隙毯槽锌虑郡萝蛰冤逐缉澈琅黎常沿柱粹岁皖230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案保留位 CPSR中的保留位被保留将来使用。当改变CPSR标志和控制位时,请确认没有改变这些保留位。 另外,请确保您

19、的程序不依赖于包含特定值的保留位,因为将来的处理器可能会将这些位设置为1或者0。粳离渤齿苫帆蝎封邓疫弗顾庆惭鸥汁江么私复昏淀唁像吻贫渊染愈腹醋磁230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案在应用编程(IAP) 用户可以在启动代码Startup.s文件中的InitStack函数内调整各个模式的堆栈空间位置。InitStack ;设置系统模式堆栈MSRCPSR_c, #0xdfLDRSP, =StackUsr 32MOVPC, R0避免使用片内RAM的顶部32个字节IFTM4M3M2M1M0 7 6 5 4 3 2

20、 1 011011111 7 6 5 4 3 2 1 0系统模式ARM状态FIQ禁止IRQ禁止悠企韩绽跑值腻秉闭稼揣闪澳蜡素表躁嘛洒舱钢牡沛泞莉艰显雾味音涕竖230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案IAP的命令表在应用编程(IAP)ISP命令命令命令代码命令代码 准备编程扇区 50 将RAM内容复制到Flash 51 擦除扇区 52 扇区查空 53读器件ID 54读boot代码版本 55比较 56黔煎旱粳苗涝迫泄涯晚汉懊拜才辈焉栽善领纬某互刀豪蕾崩别丝殆腾迭布230-讲述IAP功能在实际使用过程中的应用方法

21、以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案IAP各命令返回代码及意义表返回代码返回代码 符号符号 描述描述 0CMD_SUCCESS 命令被成功执行。 1INVALID_COMMAND 无效命令。 2SRC_ADDR_ERROR 源地址没有以字为边界。 3DST_ADDR_ERROR 目标地址的边界错误。 4SRC_ADDR_NOT_MAPPED 源地址没有位于存储器映射中。计数值必须考虑可用性。 5DST_ADDR_NOT_MAPPED 目标地址没有位于到存储器映射中。计数值必须考虑到可用性。 6COUNT_ERROR 字节计数值不是4的倍数或是一个非法

22、值。 7INVALID_SECTOR 扇区号无效。 8SECTOR_NOT_BLANK 扇区非空。 9SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION 为写操作准备扇区命令未执行。10COMPARE_ERROR 源和目标数据不相等。 11BUSY Flash编程硬件接口忙。 狱散锨靴扔户做鸽挎质堆喀医幌钞灿谍栋欠泞晓滔期集跳盖败的秦迪道治230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案概述Boot简介片内Flash存储系统数据存储解决方案在线升级解决方案堰酒袒夷丘氏颁嘲忆惰杭改猖辗鹤帘

23、遇磺丑抢纬袭头芋仍搬智挥笼姐杰逮230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案Boot Block 不占用片内Flash(LPC2364/66)用户用户Flash(128/256KB)0x0000 0000Boot Block(8KB)存储器空间0x0007 FFFF0x0007 E000 在利用IAP代码来操作片内Flash时,必须熟悉片内Flash的扇区分布。片内Flash的操作是以“扇区”为单位进行的,每个“扇区”的大小不定。 由于IAP代码位于Boot区内,所以IAP命令不允许对Boot扇区执行写/擦除操

24、作。片内512KB Flash用户Flash(504KB)(LPC2368/78)Boot Block(8KB)存储器空间0x0000 00000x0007 FFFF0x0007 E000用户用户Flash(128/256KB)扇区0(4K)0x0000 00000x0000 7000扇区7(4K)扇区8(32K)扇区10(32K)扇区14(32K)0x0000 80000x0001 80000x0003 80000x0003 FFFF0x0001 FFFF扇区分布扇区分布片内256KB Flash片内128KB Flash片内Flash系统寝巡责增柞厅望婆巷跨吮虞滨蕴珠惮轴衰即莆晾泽轰音澡隧

25、隐惹喜耽账盏230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案 对于LPC2368/78来说,Boot区位于512kB Flash的顶部,因此在LPC2368/78器件中,只有504kB Flash可供用户使用。用户Flash(504KB)(LPC2368/78)Boot Block(8KB)存储器空间0x0000 00000x0007 FFFF0x0007 E000用户Flash(504KB)扇区21(32K)扇区22(4K)扇区27(4K)扇区0(4K)0x0000 00000x0000 7000扇区7(4K)扇

26、区8(32K)0x0000 80000x0007 00000x0007 80000x0007 D0000x0007 DFFF扇区分布扇区分布片内Flash系统匈唉谎匙忽矫湖究保糯尘狐澈涵苍泣裤侧天惹霜披史蛾许嘱枣迪剑帧郭匿230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案概述Boot简介片内Flash存储系统数据存储解决方案在线升级解决方案肯签玲昌碉哎抹深厂摄畦赶涉肢朋艾酬头伸柳茫努慷泵窖裙啄淋华骡帖凉230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及

27、相关解决方案数据存储解决方案系统概述 通过IAP,用户可以使用片内Flash作为非易失性数据存储器,存储一些设备的配置信息。这样不仅可以节约成本,而且还可以减小线路板的面积。LPC2364FlashFlashFlash姬梧牲帮惯咎郧闰暗同隋负虐兼躇充涉瞄肢闺夸追坍课搅滚瑶素严堤屎徒230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案系统概述 利用IAP将Flash作为数据存储器时,用户需要控制自身代码量的大小及代码定位。绝对不能够出现Flash数据区和Flash代码区重叠的现象。因为在利用IAP向片内Flash存储器写

28、入数据时,需要对数据扇区进行擦除。如果数据区和代码区重合,就有可能会破坏系统的代码空间,造成系统死机或崩溃。 用途扇区大小代码空间0628kB数据空间74kB 通过IAP向片内Flash的扇区7写入512个字节的数据。 注意:任何Flash都是有寿命的,如果对片内Flash的操作过于频繁,就会对其造成损坏,LPC2300的Flash擦除/写入次数为10万次。韭衷这雀拉宁位拣次几寝草侵监奄舵穷染嘿耀蜂秒腑挺态予晒点豢置均李230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案系统概述 使用IAP将SRAM中的数据编程到Fl

29、ash时,源数据区只能够使用片内局部总线上的SRAM,不能使用通用USB SRAM和以太网SRAM。片内SRAM片内FlashARM7TDMIAHB桥AHB桥16k SRAM8k SRAM4k SRAMUSB控制器局部总线AHB1AHB2株砾恕切纱柴豆潦压帚唐纯缩谤晌透歼猩完夸排瓷坊扭右奴奏粗栓洪踪赢230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案 如果一个数据是从偶地址开始的连续存储,那么它就是半字对齐,否则就是非半字对齐; 如果一个数据是以能被4整除的地址开始的连续存储,那么它就是字对齐,否则就是非字对齐。方式

30、半字对齐字对齐地址0x40020x40040x40040x4008特征Bit0=0其他位为任意值Bit1=0,Bit0=0其他位为任意值小知识:存储数据的对齐方式炉寻浮漫笆肚荷满须播蜒诅戌月粳郑换最主币秤屿叁茅褪墟雨砾顶咎传弱230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案片内Flash编程步骤确定系统参数选择扇区(可选)擦除扇区(可选)选择扇区编程扇区校验数据(可选)擦除操作之前必须先选择扇区,一次可以选择多个扇区使用IAP之前需要定义的一些常量写入数据之前要先擦除扇区,已擦除的可不必重复擦IAP提供数据校验手段

31、,用户不必自己动手校验数据编程操作之前必须先选择扇区,一次可以选择多个扇区字对齐的SRAM数据区数据写入到256字节对齐的Flash中,一次写入256、512、1024或4096字节。马葡窿苔臃犊秽登君鲍周嘿殴无内亡狞峙胎泅型圭烹弧震馈情凤弃植功藕230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案片内Flash编程步骤确定系统参数选择扇区(可选)擦除扇区(可选)选择扇区编程扇区校验数据(可选)#defineIAP_FCCLK48000#define IAP_ENTER_ADR 0x7FFFFFF1 uint32par

32、amin8;uint32paramout8;定义CCLK值大小,单位为KHzIAP入口参数缓冲区IAP出口参数缓冲区IAP入口地址定义 通过在使用IAP代码之前,需要定义一些常量,如系统时钟、IAP函数入口、IAP入口缓冲区和出口缓冲区等。确定系统参数墓薪替司凯幌垦茬昼锑峰兼檄验城疏整辜坐淮订人免沥源肝今碴乍淖憎裹230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案片内Flash编程步骤确定系统参数选择扇区(可选)擦除扇区(可选)选择扇区编程扇区校验数据(可选)uint32 SelSector(uint8 sec1,u

33、int8 sec2) paramin0 = IAP_SELECTOR; paramin1 = sec1; paramin2 = sec2; (*(void(*)()IAP_ENTER_ADR)(paramin,paramout); return(paramout0);设置扇区选择命令字设置起始扇区设置终止扇区调用IAP服务程序 对某一个扇区执行擦除、写入等操作之前,必须先选择该扇区。但也可以一次选择多个扇区。 选择扇区(可选)返回操作状态码乱攀昏锡孪莫瘩邯穗音覆括铀谨勉环逸柞叠萎炼梆禁拴星荧怖位刺蓬鲤蔫230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际

34、使用过程中的应用方法以及相关解决方案片内Flash编程步骤确定系统参数选择扇区(可选)擦除扇区(可选)选择扇区编程扇区校验数据(可选)uint32 EraseSector(uint32 sec1,uint32 sec2) paramin0 = IAP_ERASESECTOR; paramin1 = sec1; paramin2 = sec2; paramin3 = IAP_FCCLK; (*(void(*)()IAP_ENTER_ADR)(paramin,paramout); return(paramout0);设置扇区擦除命令字设置起始扇区设置终止扇区调用IAP服务程序 LPC2300片内F

35、lash在写入数据前需要执行擦除操作。如果目标区域已经被擦除,那么就不必重复擦除,可直接写入数据。擦除操作一次可以擦除多个扇区。擦除扇区(可选)返回操作状态码泛顾揖这变咙墩枉细揣巡芬鱼燕柳特坦狮偷瓜卤擦屿丛哇北褪闸充钳煤邯230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案 执行完以上几步后,就可以编程Flash了。执行编程扇区的操作时,IAP函数会将RAM中的数据拷贝到Flash中。 片内Flash编程步骤确定系统参数选择扇区(可选)擦除扇区(可选)选择扇区编程扇区校验数据(可选)uint32 RamToFlash(

36、uint32 dst, uint32 src, uint32 no) paramin0 = IAP_RAMTOFLASH; paramin1 = dst; paramin2 = src; paramin3 = no; paramin4 = IAP_FCCLK; (*(void(*)()IAP_ENTER_ADR)(paramin,paramout); return(paramout0);设置扇区编程命令字设置Flash目标地址设置SRAM源地址调用IAP服务程序编程扇区返回操作状态码设置复制字节数256/512/1024/4096嘴棍赞氛摆容答扫然诸佑一捷注扫俺拯饯撇骚廖冬鸭臃承懦忌柑作呛什赠

37、230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案 IAP代码还为用户提供了一个数据校验的手段,这样用户就可以不必自己动手来校验写入Flash中的数据是否正确。片内Flash编程步骤确定系统参数选择扇区(可选)擦除扇区(可选)选择扇区编程扇区校验数据(可选)uint32 Compare(uint32 dst, uint32 src, uint32 no) paramin0 = IAP_COMPARE; paramin1 = dst; paramin2 = src; paramin3 = no; (*(void(*)(

38、)IAP_ENTER_ADR)(paramin,paramout); return(paramout0);设置数据比较命令字设置目标地址设置源地址调用IAP服务程序校验数据(可选)返回操作状态码比较字节个数必须能被4整除乔坍呢湃审壳挎沥丸窄蓬有昔沧悄栏频纳歧拖撰剖表掣旁孽龟篱诺扣霹押230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案 向扇区7写入512个字节的数据,扇区7可以作为一个E2PROM来使用,如存储一些系统的配置信息。函数主体#defineDestAddr 0x00007000 int main (void

39、) _align(4) uint8 SendData512; uint32 i; for(i = 0; i 512; i+) SendDatai = i; SelSector(7, 7); EraseSector(7,7); SelSector(7, 7); RamToFlash(DestAddr, (uint32)SendData, 512); while(1); 以字对齐定义变量区扇区7的起始地址初始化变量区数据选择扇区7擦除扇区7选择扇区7写入数据到Flash编程后的Flash区域擦除后的Flash区域铆待沦尊我志刹俄喉萨即敌窑跳谱傈渣嘉已僧瞒琢血键矣讣尼腔棕慈鹰奖230-讲述IAP功能

40、在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案概述Boot简介片内Flash存储系统数据存储解决方案在线升级解决方案阳宙角芳摄褂辅雌特危烘滇将衷芥敢羌恍杭兵娇杉遏莱爪赚啡专魏慷萝蒸230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案在线升级解决方案系统概述 “在线升级”实际上是Flash数据存储的一个应用特例。系统开发完毕后,在应用过程中,如果需要增加部分功能,那么为了避免重新拆装设备,可以借助“在线升级”方式。 目前,在线升级是很多系统都必需的一个功能,对于

41、LPC2300来说,利用IAP函数即可实现在线升级。用户程序接收新的代码,然后调用IAP函数将新的代码编程到Flash扇区中,实现在线升级。 系统通过串口接收升级代码,然后调用IAP函数实现在线升级。为了实现在线升级,本系统将芯片的片内Flash重新分区:Boot代码区:又叫固件区,存放系统的BootLoader,可完成代码升级,首地址位于0x0000 0000;LOW区和HIGH区:用户代码分为两个区,LOW区和HIGH区,当程序位于LOW区时,可以对HIGH区进行升级。反之,如果程序位于HIGH区,可以对LOW区进行升级。LOW区的首地址为:0x0000 8000,HIGH区的首地址为:0

42、x0001 0000,每个用户代码区的容量为32kB;程序标志区:标记当前用户程序运行的区,程序标志区的首地址为:0x0000 4000。对于这个区间,仅仅使用了前4个字节,用来保存当前用户代码区的首地址。如程序标志 0x0000 8000,则当前程序运行在LOW区;如程序标志 = 0x0001 0000,则当前程序运行在HIGH区;如程序标志为其它值,则当前程序运行在固件区域。逮肋裔真短屡搁髓嚏玻经露郡酶康呵琼猴梯床翘搐复驳章谁谆悬谋活封晋230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案ARM7处理器核RAMFL

43、ASHUART0串口P0.6升级HIGH区代码UART0通过IAP对Flash编程ARM7处理器核HIGH区0x0000 00000x0000 40000x0000 80000x0001 0000LOW区程序标志区用户Boot区0x0001 00000x0000 8000程序运行在LOW区P0.6处处于低电平于低电平串口接收升级代码修改程序标志,标识程序运行在高区CPU运行HIGH区的用户代码ARM7处理器核此处为用户编写的Boot代码,有别于由芯片厂商固化在片内的Boot代码。复位后CPU运行用户Boot代码乏锨酿波沈瘤叭氨坠激漠兰昂家竞尊幢寻垒拴悔铆音知东仰烤力尚婪庞兔230-讲述IAP功

44、能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案软件设计初始化串口;根据程序标志发送提示信息;清空数据缓冲区;系统复位引脚P0.6为低?用户代码运行在HIGH区?接收串口数据用户代码运行在LOW区?更新用户程序标志区根据用户程序标志运行程序将新的用户代码编程到LOW区将新的用户代码编程到HIGH区YNNYYN矣巷丘卫堑王驶莲即痉俩撵碗孽顾畦荧嚎钞趴拘桨朴柯臣湛废贞剥酬简抄230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案“在线升级”模板 为了实现在线升级,我

45、们专门设计了一套新的模板。该模板具有两个编译选项:HIGH和LOW。l当需要升级HIGH区时,就使用HIGH选项进行编译,用户代码位于HIGH区;l当需要升级LOW区时,就使用LOW选项进行编译,用户代码位于LOW区。编译选项及其位置用户程序代码编写区,代码量不得超过16K位于系统Boot代码区,用户不能随便修改数霸蔼鞍耍峪温钩刊喧姆桥段吉辨拔莱秘鸟烬宏莎娶斑熙堪碑热寇疽削殆230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案升级方法 使用“在线升级模板”建立工程,编译以后产生树状的文件结构。LOW和HIGH选项都会生

46、成两个二进制文件SYSTEM和USER。LOW选项编译结果HIGH选项编译结果 当前程序运行在LOW区,那么只能升级HIGH区。系统复位后,将P0.6接地,使用串口终端软件将HIGH选项编译生成的USER文件发送给系统即可。 当前程序运行在HIGH区,那么只能升级LOW区。系统复位后,将P0.6接地,使用串口终端软件将LOW选项编译生成的USER文件发送给系统即可。 捌恼逸擞酗隋壬习螺疆撅凉屁肤庙仿殊荡锰蝎葛敬迈宣汛伯驱遣展祖码病230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案总结 “在线升级”解决方案并不是唯一的,本方案使用UART0进行升级,当然也可以使用其它的手段进行升级,而且片内Flash的分区方式也不是唯一的,因此本方案并不是唯一的解决方法。 在ADS编译器中,通过“分散加载文件”可以实现代码定位,有关“分散加载文件”和“ADS编译器”方面的介绍请参考其它相关书籍。煽出恢省讯孕梅相旱焙挺芜代憾拢嗜狭骗婿驶纽宦波算戮欧侮鹤魄辛际蓬230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案230-讲述IAP功能在实际使用过程中的应用方法以及相关解决方案

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号