iap如何初始化_IAP在线升级模块详细设计说明

目  录

1 编写目的5

2 术语、定义和缩略语5

2.1 术语、定义 5

2.2 缩略语 5

3 模块描述5

3.1 Flash的特性 5

3.2 Flash的资源划分 5

3.3 MCU中断的使用方式 5

3.3.1 Cortex-M3内核系列MCU中断向量表重定位6

3.4 MCU复位后的硬件外设初始化 6

4 标准模块6

5 模块设计6

5.1 Flash空间划分 6

5.2 异步事件处理机制 7

5.3 命令处理 7

5.3.1 BL和APP对命令的支持7

6 数据描述7

6.1 数据结构说明 7

6.1.1.1 宏定义 7

6.1.1.1.1 Flash资源 7

6.1.1.1.2 链路层协议 9

6.1.1.2 结构体/联合/枚举定义 9

6.1.1.2.1 Flash资源 9

6.1.1.2.2 异步事件 10

6.1.1.2.3 链路层协议 10

6.1.1.2.4 命令实现 11

6.2 全局变量说明 12

6.3 数据库说明 12

7 函数定义12

7.1 引用函数定义 12

7.2 内部函数定义 13

7.2.1 链路层协议13

7.2.1.1 Mid_Tul_CheckCrc16 13

7.2.1.2 Mid_Tul_CheckTulLengthField 13

7.2.1.3 Mid_Tul_GetCmdFunc 13

7.2.1.4 Mid_Tul_GetCmdFuncTableAddr 13

8 接口设计13

8.1 用户接口 13

8.1.1 Flash资源13

8.1.1.1 Drv_Flash_AppChecksum_GetChecksumInfo 13

8.1.1.2 Drv_Flash_AppChecksum_UpdataChecksumInfo 14

8.1.1.3 Drv_Flash_FlagOpt_GetFlagInfo 14

8.1.1.4 Drv_Flash_FlagOpt_SetFlagInfo 14

8.1.2 异步事件14

8.1.2.1 App_SysEvt_SetEventFlag 14

8.1.2.2 App_SysEvt_GetEventFlag 14

8.1.3 链路层协议15

8.1.3.1 Mdi_Tul_UpperLayerCmdAnalysis 15

8.1.4 命令实现15

8.1.4.1 App_TulIap_CheckRunSpace 15

8.1.4.2 App_TulIap_ModifyRunSpace 15

8.1.4.3 App_TulIap_CheckObligateVersionFileSize 15

8.1.4.4 App_TulIap_TransmitVersionFile 16

8.1.4.5 App_TulIap_TransmitVersionFilePara 16

8.2 硬件接口 16

8.2.1 Flash资源16

8.2.1.1 Drv_Flash_InitialPara 16

8.2.1.2 Drv_Flash_ErasePagesWrite 16

8.2.1.3 Drv_Flash_Read 16

8.2.1.4 Drv_Flash_EraseVersionFileSpace 17

8.2.1.5 Drv_Flash_UpdataVersionFileSpace 17

8.2.1.6 Drv_Flash_Test_ReadWrite(Test Condition) 17

8.3 软件接口 17

8.3.1 规范接口17

8.3.2 非规范接口17

9 其它说明17

10 参考资料17

1 编写目的

本文档的编写目的在于详细的说明IAP在线升级模块中的设计思路以及实现细节,以利于后续程序员参考实现。

2 术语、定义和缩略语

2.1 术语、定义

2.2 缩略语

IAP

In Application Program

MCU

Microprogrammed Control Unit

BL

Bootloader

APP

Application

IVT

Interrupt Vector Table

TUL

To Upper Layer

3 模块描述

实现IAP主要有以下几个要点:

1) Flash的特性,以及资源划分

2) MCU中断的使用方式

3) MCU复位后的硬件外设初始化

3.1 Flash的特性

IAP的全称是In Application Program,即在应用编程。在MCU的应用程序中,通过在线擦除指定Flash区域,编程Flash区域来实现待升级版本文件(通常是.bin文件)的保存,因此要求Flash必须是可持续擦除和编程的。

3.2 Flash的资源划分

在一般的IAP应用中,分为BL程序和APP程序,即在MCU的存储空间内,BL程序和APP程序是共存的,因此需要对Flash地址做合理的规划,方便对Flash地址空间做有效的管理。一般的IAP应用将Flash划分为以下几个区间:

BL程序区间(必须位于MCU的启动地址处)

APP程序区间

BL程序的全局参数存储区间

APP程序的全局参数存储区间

APP程序的检验区间

BL程序的备份区间(也叫2级BL,用于对1级BL程序做IAP升级)

3.3 MCU 中断的使用方式

在MCU应用中,通常会使用中断Interrupt和外设进行数据交换。如果不能使用中断的交互方式,需要在程序结构和数据处理过程上计算处理周期,以保证数据的完整性。MCU中存放中断的地方叫做IVT,当程序发生中断时,首先是在IVT里查找对应的中断源地址,从而执行中断程序的。

在IAP应用中,MCU的Flash中需要同时存储BL程序和APP程序,也就意味着这两块程序会共用IVT,不论BL还是APP如果不能使用中断处理链路通讯,对数据完完整性会产生影响。

因此,这里会涉及到IVT的重定位问题。

3.3.1 Cortex-M3内核系列MCU中断向量表重定位

在Cortex-M3内核MCU中,IVT可以支持重定位此操作:

#define NVIC_VectTab_FLASH           ((uint32_t)0x08000000)

#define mFlashAddr_Application_Start                0x0800C000

NVIC_SetVectorTable(NVIC_VectTab_FLASH, mFlashAddr_Application_Start);

3.4 MCU复位后的硬件外设初始化

当MCU的当前逻辑运行区间发生转换时,MCU都会复位,因此在BL和APP程序里需要对响应的硬件外设资源做正确的初始化配置。

4 标准模块

5 模块设计

5.1 Flash空间划分

/************************************************************************

STM32F103ZE flash total size is  256K

Single page size is              2K

Total pager number is            256

|-----------------------|  0x08000000

| Boot                  |

| 48K Bytes             |

|-----------------------|  0x0800C000

| App                   |

| 202K Bytes            |

|-----------------------|  0x0803E800

| Boot Para             |

| 2K Bytes              |

|-----------------------|  0x0803F000

| App Para              |

| 2K Bytes              |

|------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值