zoukankan      html  css  js  c++  java
  • IAP升级

    一、概述

      IAP是通过外设来实现程序升级的一个统称,可以通过的外设有串口、WIFI、蓝牙、网口、无线模块等,只要可以和芯片通讯的都能做为IAP的升级方式。

      IAP项目需要三种东西。BOOT、APP和上位机,单独介绍下这几个东西:

        BOOT:实现程序的擦除和APP跳转和APP升级。必须实现有两个,一个是和外部升级设备的通讯,另一个是Flash的读写。

           APP:运行的程序,必须实现的功能,一个是和外部升级设备的通讯,另一个是Flash的读写,还有一个是软件的重启。(每次在APP运行中进行数据

              升级时候,给标志后,重启到BOOT进行升级工作,这样子最省空间,失败就重新刷就好了,又不会变砖)。APP一把需要的是BIN文件。

        上位机:用来发送APP给需要升级的芯片的,最好理解的是通过电脑上位机进行串口通讯进行的数据升级。这个升级协议一般都是私有的,根据个人的

            习惯和上位机的习惯来定制。现有大家使用比较多的是ymodem的协议有比较多的人在使用。

      注意在使用BOOT和APP编程时候有几个东西是共用的,boot地址是0x08000000, IAP大小默认3K,BOOT大小,共用存储空间的大小。

    二、实战介绍

      使用STM32F1的芯片来实现串口IAP功能,在boot端实现了串口通讯和flash的读写,添加状态机和跳转APP程序,擦除APP区程序,写入APP程序程序;

    • 添加状态机在菜单、擦除,跳转和写入之间切换;
    • 跳转APP使用下面的函数
    int8_t IAP_RunApp(void)
    {
        if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)//判断栈定地址值是否在0x2000 0000 - 0x 2000 2000之间
        {   
            SerialPutString("
     Run to app.
    ");
            JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);//ApplicationAddress + 4  即为0x0800 3004 ,里面放的是中断向量表的第二项“复位地址”
            Jump_To_Application = (pFunction) JumpAddress;//Jump_To_Application指向了复位函数所在的地址
            __set_MSP(*(__IO uint32_t*) ApplicationAddress);//设置栈顶地址 用户代码的复位地址付给PC指针 
            Jump_To_Application();
            return 0;
        }
        else
        {
            SerialPutString("
     Run to app error.
    ");
            return -1;
        }
    }
    • 擦除APP

        识别需要擦除的大小

        按页擦除

    • 写入APP
         
  • 相关阅读:
    [转]ios 判断左右摆动方法与 摇一摇
    UIButton 使用大全
    疑问:xcode中为什么按钮被图片覆盖了,还能响应事件?
    iOS base64 加密解密 通用类
    new BMKMapPoint[index] 和 delete []points 报错
    Xcode 中 如果不自动设置字体大小,则系统默认为17号
    UILabel 详解
    BMKMapView 和 BMKSearch 初始化先后顺序问题
    使用ASIFormDataRequset类 获取webservice 接口数据
    实现 scrollview 默认显示指定的页码
  • 原文地址:https://www.cnblogs.com/luckytimor/p/14963262.html
Copyright © 2011-2022 走看看