0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是IAP?

strongerHuang 来源:嵌入式大杂烩 作者:嵌入式大杂烩 2022-10-25 08:54 次阅读

什么是IAP?

IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。 在重新编程过程中可以使用任意类型的通信协议,如UART、I2S、SPI等。这篇笔记分享的是使用UART方式IAP。

串口IAP实验

先理一理流程(本实验是以STM32F103ZET6为例): 1、实验说明 做这个实验需要准备两个keil工程,一个工程用于编写IAP程序,另一个工程用于编写我们的应用程序(要实现某些功能的程序),这里我们以一个点灯程序为例。最终,两份工程编译出来的可执行文件都需要烧写到芯片的FLASH中。只不过需要烧写到不同的地址,简单的示意图如下: 7a9bdb50-53fd-11ed-a3b6-dac502259ad0.png   这里,使用的STM32的型号为STM32F103ZET6,其FLASH大小是512KB,0x08000000为其FLASH被映射的地址,程序被烧写到的就是这个地址。此处,我们的IAP程序烧写到这个地址,根据IAP程序的大小,我们在keil里可以设置合适的IAP结束地址。

注意:在没有IAP程序的情况下,0x08000000这个地址就是应用程序烧写的地址。

2、工程说明 本实验用到的两个工程可按照文末的方式获取,其中IAP工程移植至ST官方例程。下面对两个工程进行简单的说明 IAP工程: (1)需要在target选项卡里设置我们IAP程序的起始地址与大小,如: 7ac12360-53fd-11ed-a3b6-dac502259ad0.png   这里我们的IAP程序起始地址设为0x08000000,大小设为0x3000,即IAP所能用的FLASH空间为12KB。其中IAP所能占的占空间的大小可根据IAP的实际大小进行修改。 (2)需要修改程序中我们需要跳转到的应用程序的地址(即IAP程序的结束地址): 7ad82736-53fd-11ed-a3b6-dac502259ad0.png   LED工程: (1)需要在target选项卡里设置我们LED程序的起始地址与大小,如: 7ae3d176-53fd-11ed-a3b6-dac502259ad0.png   这里我们的LED程序起地址设为0x08003000,大小设为0x10000,即LED所能用的FLASH空间为64KB。其中结束地址可根据LED应用程序的实际大小进行修改。 (2)生成对应的.bin文件。这需要在User选项卡里添加如下命令(即编译后执行的命令): 7afbee14-53fd-11ed-a3b6-dac502259ad0.png   其中,fromelf.exe是我们keil安装目录下的一个可执行程序,可以把.axf文件转换成.bin文件。要在keil中直接调用fromelf命令,必须要把fromelf.exe所在目录添加到环境变量中。添加环境变量的方法如下(该方法来自于《【野火】零死角玩转STM32—F429挑战者V2.pdf》): 本文以 Win7 系统为例添加工具链的路径到 PATH 环境变量,其它系统是类似的。 (1) 右键电脑系统的计算机图标,在弹出的菜单中选择属性 ,如图: 7b004ae0-53fd-11ed-a3b6-dac502259ad0.jpg   (2) 在弹出的属性页面依次点击高级系统设置 ->环境变量,在用户变量一栏中找到名为PATH的变量,若没有该变量,则新建一个。编辑PATH变量,在它的变量值中输入工具链的路径,如本机的是;D:workkeil5ARMARMCCin,注意要使用分号;让它与其它路径分隔开,输入完毕后依次点确定,如图: 7b11c1f8-53fd-11ed-a3b6-dac502259ad0.jpg   (3) 打开 Windows 的命令行,点击系统的开始菜单,在搜索框输入cmd,在搜索结果中点击cmd.exe即可打开命令行, 如图: 7b19b4c6-53fd-11ed-a3b6-dac502259ad0.jpg   (4) 在弹出的命令行窗口中输入fromelf回车,若窗口打印出 formelf 的帮助说明,那么路径正常,就可以开始后面的工作了;若提示不是内部名外部命令,也不是可运行的程序…信息,说明路径不对,请重新配置环境变量,并确认该工作目录下有编译工具链。 这个过程本质就是让命令行通过“PATH”路径找到fromelf.exe程序运行 。 学会配置fromelf.exe,也就学会配置了MinGW。MinGW是一个工具集,包含编译C与C++的gcc、g++,使用它就可以在Windows命令行下编译C程序。相关笔记:使用Notepad++来开发C程序 3、IAP源码说明 (1)主函数

int main(void)
{
  FLASH_Unlock();/* FLASH解锁 */
  KEY_Init();/* 按键初始化 */
  IAP_Init();/* IAP初始化 */

  /* 按键按下则进入主菜单开始更新程序(注意:需要按下复位键的同时按下该按键触发程序更新) */
  if (GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)  == 0x00)
  {
    SerialPutString("
======================================================================");
    SerialPutString("
=              (C) COPYRIGHT 2010 STMicroelectronics                 =");
    SerialPutString("
=                                                                    =");
    SerialPutString("
=     In-Application Programming Application  (Version 3.3.0)        =");
    SerialPutString("
=                                                                    =");
    SerialPutString("
=                                   By MCD Application Team          =");
    SerialPutString("
======================================================================");
    SerialPutString("

");
    Main_Menu ();
  }
  /* 保持运行用户应用程序 */
  else
  {
    /* Test if user code is programmed starting from address "ApplicationAddress" */
    if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
    {
      /* Jump to user application */
      JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
      Jump_To_Application = (pFunction) JumpAddress;
      /* Initialize user application's Stack Pointer */
      __set_MSP(*(__IO uint32_t*) ApplicationAddress);
      Jump_To_Application();
    }
  }

  while (1){}

  return 0;
}
可见,我们按下复位的同时按下PE2对应的按键即可触发应用程序更新操作,否则跳转到应用程序的起始地址执行应用程序(断点重启也是默认执行应用程序),这里的ApplicationAddress就是我们上面设置的0x08003000。 (2)主菜单函数Main_Menu 这个函数里就是该IAP程序的功能,根据其中的打印信息7b4ed61a-53fd-11ed-a3b6-dac502259ad0.png 可以知道,该IAP有三个功能(分别输入键盘上的数字1、2、3进行选择):一是下载程序(电脑->STM32);二是上传程序(STM32->电脑);三是执行新程序(即刚下载完成的程序)。 (3)下载程序功能函数SerialDownload 首先,上位机使用Ymodem协议进行数据下发,STM32根据协议解析数据,拿到有用的数据,并把这些数据写入FLASH对应的地址中,即ApplicationAddress。关于Ymodem协议及SerialDownload函数这里不展开讨论。 4、下载验证 (1)下载IAP程序 可以使用J-link等调试器进行下载,也可用串口ISP进行下载,我们选用的是串口ISP进行下载,借用的工具是FlyMcu7b6b0178-53fd-11ed-a3b6-dac502259ad0.png   这里下载的是.hex文件,如果下载.bin文件,则会提示如下错误: 7b737f9c-53fd-11ed-a3b6-dac502259ad0.png

程序文件不是0x8000000和0x20000000区域的 使用ISP方式下载需要进行的硬件操作是:BOOT0引脚拉高,BOOT1引脚接地。即系统存储器被选为启动区域: 7ba3826e-53fd-11ed-a3b6-dac502259ad0.png 在点击开始编程按钮后,需要按下板子上的复位键,即可下载程序。 (2)通过IAP程序引导下载LED程序 上面提到下载程序使用的是Ymodem协议,所以得选用带有Ymodem协议传输方式的上位机软件来把应用程序下载到板子里。可以选用SecureCRT,也可以选用超级终端。这里选用的是超级终端: 7bb4bb9c-53fd-11ed-a3b6-dac502259ad0.png 首先按下数字键1触发下载程序操作,此时会不断打印CCCCC...。然后点传送->发送文件,选择要下载的.bin文件及Ymodem协议。下载完成后按下数字3即可执行新下载得应用程序: 7bcae6b0-53fd-11ed-a3b6-dac502259ad0.png   终于,LED闪烁起来了,点灯项目成功。断电重启之后默认执行的是这个点灯程序,要想下载新的程序,按下复位的同时按下PE2所对应的按键(需要一定的手速)即可触发更新程序操作。
审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 通信协议
    +关注

    关注

    28

    文章

    737

    浏览量

    39746
  • 程序
    +关注

    关注

    114

    文章

    3631

    浏览量

    79543
  • IAP
    IAP
    +关注

    关注

    2

    文章

    161

    浏览量

    23965

原文标题:单片机串口IAP原理

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    什么是IAP

    0.前言:IAP应该是我唯一想写的文章,从创建这个账号开始。但是不知不觉几年过去了,一直没去写这文章。就随便写写吧~1.什么是IAP?英文名:in-application programming
    发表于 07-22 08:03

    什么是IAP,为什么要IAP

    什么是IAP,为什么要IAP?STM32F103ZET6的启动方式有哪几种呢?如何进行对STM32的Flash进行擦除和写入操作呢?
    发表于 11-01 06:26

    为什么存在IAPIAP具体是怎么实现跳转的呢

    为什么存在IAPIAP是怎么工作的,它和APP有什么关联,共用的外设怎么分配?IAP具体是怎么实现跳转的呢?
    发表于 12-01 06:48

    什么是IAP,为什么要IAP

    什么是IAP,为什么要IAP?STM32F103ZET6的启动方式有哪几种?
    发表于 12-13 06:17

    IAP是什么?IAP升级流程是怎样的

    IAP是什么?IAP升级流程是怎样的?IAP应用编程有哪些实例啊?
    发表于 12-14 06:53

    IAP是怎么工作的

    IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信
    发表于 01-27 07:20

    什么是IAP

    STM32的IAP升级APP什么是IAP?In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了
    发表于 02-07 07:04

    TinyM0配套例程 IAP例程

    【TinyM0配套例程】IAP例程IAP例程
    发表于 11-15 16:52 0次下载

    ISP与IAP的区别

    ISP与IAP的区别       IAP: in applicatin progr
    发表于 12-28 11:28 1556次阅读

    STM32在应用编程(IAP)使用USART

    当发生重置时,程序计数器被设置为执行IAP驱动程序。应该是 检查特定条件的紧凑代码,例如键的组合是 按下。当满足此条件时,IAP驱动代码要么执行一个分支。 更新用户应用程序或直接(通常默认情况下
    发表于 09-12 16:19 8次下载

    什么是IAP?如何实现IAP

    IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信
    发表于 12-04 16:59 1195次阅读

    IAP编程的流程及IAP的应用场所

    IAP是什么 有时项目上需要远程升级单片机程序,此时需要接触到IAP编程。 IAP即为In Application Programming,解释为在应用中编程,用户自己的程序在运行过程中对User
    的头像 发表于 08-11 09:27 4175次阅读

    MCU之IAP升级

    IAP升级简介IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是在产品发布后可以方便地通过预留的通信口对产品中的固件程序进
    发表于 10-25 13:06 18次下载
    MCU之<b class='flag-5'>IAP</b>升级

    AN034 基于USBHost的IAP例程

    AN034 基于USBHost的IAP例程
    发表于 02-27 18:30 0次下载
    AN034 基于USBHost的<b class='flag-5'>IAP</b>例程

    什么ISP?什么是IAP

    做单片机开发的工程师经常会听到两个词:ISP和IAP,但新手往往对这两个概念不是很清楚,今天就来和大家聊聊什么是ISP,什么是IAP
    的头像 发表于 01-28 09:26 1464次阅读
    什么ISP?什么是<b class='flag-5'>IAP</b>?