• 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
         
  • 相关阅读:
    较全的ASCII码对照表
    关于.NET Framework 3.5 SP1 bootstrapper 包(安装和部署)的解决方案
    C#中DllImport用法和路径问题
    在Winform中给的button等控件添加快捷键的几种方法。
    DataGridView之为每行前面添加序号
    【软件设计过程PowerDesigner v12简介】
    死锁与活锁的区别,死锁与饥饿的区别
    性能优化之 — AS3.0对象池运用
    wc之“HelloWorld”
    php之memcache缓存技术
  • 原文地址:https://www.cnblogs.com/luckytimor/p/14963262.html
Copyright © 2020-2023  润新知