目  录

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              |

|-----------------------|  0x0803F800 -> |------------|-----------|---------------|

| Apps CheckSum         |                | App Size   | App CRC   | KeepBytes     |

| 2K Bytes              |                | 4 Bytes    | 4 Bytes   | 2K-8 Bytes    |

|-----------------------|  0x0803FFFF

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

如上所示:

1) MCU的起始地址是0x08000000

2) BL程序分配20Kbytes

3) APP程序分配102KBytes

4) BL Para区间分配2Kbytes

5) APP Para区间分配2KBytes

6) Apps CheckSum区间分配2KBytes

5.2 异步事件处理机制

本系统采用异步事件处理机制,即中断源处理作为前台事件,Main函数作为后台处理,在前台事件中标识事件源,在后台处理事件源。

5.3 命令处理

根据《绘画板系列接口协议_Ver X.xx》文档,整个IAP流程需要用到以下命令:

命令3001,获取下位机运行区间

命令3002,设置下位机运行区间

命令3003,获取下位机预留的Flash空间大小

命令3004,向下位机传输待升级版本文件

命令3005,向下位机传输版本文件参数信息

5.3.1 BL和APP对命令的支持

命令3001

命令3002

命令3003

命令3004

命令3005

BL程序

APP程序

6 数据描述

6.1 数据结构说明

6.1.0.1 宏定义

6.1.0.1.1 Flash资源

#if CVIEW("公用资源")

/* 定义Flash一页数据大小*/

#define mFlashPageSize                              2048

/* 获取所在页面地址*/

#define mFunc_Drv_FlashGetPageAddr(addr)            (addr&0xFFFFF800)

/* 获取所在页面偏移地址*/

#define mFunc_Drv_FlashGetPageOffset(addr)          (addr&0x000007ff)

/* 获取指定范围Flash的页面数量*/

#define mFunc_Drv_FlashSpecialRangePageNum(startAddr, endAddr) ((endAddr-startAddr)/mFlashPageSize)

#endif // #if CVIEW("公用资源")

#if CVIEW("地址规划")

#if CVIEW("Boot")

/* Boot区*/

#define mFlashAddr_Bootloader_Start                 0x08000000

#define mFlashSize_Bootloader                       (10*mFlashPageSize)

#define mFlashAddr_Bootloader_End                   (mFlashAddr_Bootloader_Start + mFlashSize_Bootloader - 1)

#endif // #if CVIEW("Boot")

#if CVIEW("App")

/* App区*/

#define mAppliacationAddress                        (uint32_t)0x08005000

#define mFlashAddr_Application_Start                0x08005000

#define mFlashSize_Application                      (51*mFlashPageSize)

#define mFlashAddr_Application_End                  (mFlashAddr_Application_Start + mFlashSize_Application - 1)

#endif // #if CVIEW("App")

#if CVIEW("Boot Para")

/* Boot参数区*/

#define mFlashAddr_BootPara_Start                   0x0801E800

#define mFlashSize_BootPara                         (1*mFlashPageSize)

#define mFlashAddr_BootPara_End                     (mFlashAddr_BootPara_Start + mFlashSize_BootPara - 1)

#endif // #if CVIEW("App Para")

#if CVIEW("App Para")

/* App参数区*/

#define mFlashAddr_AppPara_Start                    0x0801F000

#define mFlashSize_AppPara                          (1*mFlashPageSize)

#define mFlashAddr_AppPara_End                      (mFlashAddr_AppPara_Start + mFlashSize_AppPara - 1)

#endif // #if CVIEW("App Para")

#if CVIEW("App Checksum")

/* Apps校验区*/

#define mFlashAddr_AppChecksum_Start                0x0801F800

#define mFlashSize_AppChecksum                      (1*mFlashPageSize)

#define mFlashAddr_AppChecksum_End                  (mFlashAddr_AppChecksum_Start + mFlashSize_AppChecksum - 1)

#endif // #if CVIEW("Apps Checksum")

#endif // #if CVIEW("地址规划")

6.1.0.1.2 链路层协议

#define mTul_FrameBootCode_Dn                       0xCD

#define mTul_FrameBootCode_Up                       0xAC

#define mTul_CmdFrameStruct_BootCode_Size           (1)

#define mTul_CmdFrameStruct_SubsequentLength_Size(2)

#define mTul_CmdFrameStruct_CmdCode_Size            (2)

#define mTul_CmdFrameStruct_CrcBytes_Size           (2)

#define mTul_CmdFrameStruct_CmdPara_Size            \

(mTul_Cmd_Array_Size - mTul_CmdFrameStruct_BootCode_Size \

- mTul_CmdFrameStruct_SubsequentLength_Size \

- mTul_CmdFrameStruct_CmdCode_Size \

- mTul_CmdFrameStruct_CrcBytes_Size)

#define mTul_RspFrameStruct_BootCode_Size           (1)

#define mTul_RspFrameStruct_SubsequentLength_Size (2)

#define mTul_RspFrameStruct_CmdCode_Size            (2)

#define mTul_RspFrameStruct_StatusCode_Size         (1)

#define mTul_RspFrameStruct_CrcBytes_Size           (2)

#define mTul_RspFrameStruct_CmdPara_Size            \

(mTul_Rsp_Array_Size - mTul_RspFrameStruct_BootCode_Size \

- mTul_RspFrameStruct_SubsequentLength_Size \

- mTul_RspFrameStruct_CmdCode_Size \

- mTul_RspFrameStruct_StatusCode_Size \

- mTul_RspFrameStruct_CrcBytes_Size)

6.1.0.2 结构体/联合/枚举定义

6.1.0.2.1 Flash资源

typedef enum enumFlash_AppChecksum_Kind{   // App校验区枚举类型

eFlash_AppChecksum_Kind_Size,

eFlash_AppChecksum_Kind_Crc,

}E_Flash_AppChecksum_Kind;

typedef enum enumFlash_FlagKind{           // Flash操作相关枚举

eFlash_FlagKind_VersionFileTrans,

eFlash_FlagKind_VersionFileChecksumTrans,

}E_Flash_FlagKind;

typedef struct structFlash_AppChecksum{   // App校验区数据结构

UINT32 ulAppSize;

UINT32 ulAppCrc;

}T_Flash_AppChecksum;

typedef struct structFlashOptFlag{          // Flash操作相关数据结构

UINT8 bVersionFileTransDoneFlag              : 1;

UINT8 bVersionFileChecksumTransDoneFlag    : 1;

UINT8 bKeepBits                                 : 6;

}T_Flash_OptFlag;

6.1.0.2.2 异步事件

// 定义系统标志位结构体

typedef struct struct_SystemEventFlag{

UINT32 ulSysEventFlag_RevUsbFrame   : 1;             // 系统事件枚举,接收到UsbFrame

UINT32 ulSysEventFlag_KeyPressed    : 1;            // 系统事件枚举,按键

UINT32 ulSysEventFlag_SysReset      : 1;             // 系统事件枚举,系统复位

UINT32 ulSysEventFlag_KeepBits      : 29;// 系统时间标志位,保留位

}T_SystemEventFlag;

// 定义系统标志位枚举

typedef enum enum_SystemEventFlag{

E_SystemEventFlag_SystemReset,                       // 系统事件枚举,复位系统

E_SystemEventFlag_KeyPressed,                       // 系统事件枚举,按键

E_SystemEventFlag_RevUsbFrame,                       // 系统事件枚举,接收到UsbFrame

}E_SystemEventFlag;

6.1.0.2.3 链路层协议

// 定义TUL层命令应答结构体

typedef struct struct_SystemResourceTul{

UINT8 aucTulCmdFrame[TUL_CMD_ARRAY_SIZE];             // 定义Tul层命令缓存

UINT16 usCmdFrameCnt;                                       // 定义Tul层命令缓存指针计数器

UINT16 usCmdSubsequentLength;                               // 定义Tul层命令帧中长度字段后续数据长度

UINT16 usCmdTotalLen;                                       // 定义Tul层命令帧全长缓存

UINT8 aucTulRspFrame[TUL_RSP_ARRAY_SIZE];               // 定义Tul层应答缓存

UINT16 usRspTotalLen;                                       // 定义Tul层应答帧全长缓存

BOOL bReiceveCmdFrameStartFlag;                             // 定义命令接收标志位

BOOL bReiceveCmdFrameEndFlag;                               // 定义命令接收标志位

}T_SystemResource_Tul;

// 出错类别表

typedef enum {

E_TulErrorCode_Success                  = 0x00, // 正确

E_TulErrorCode_BootCodeError            = 0x01, // 引导码错误

E_TulErrorCode_CmdFrameParaLengthError= 0x02, // 命令参数长度错误

E_TulErrorCode_CmdCodeError             = 0x03, // 命令码错误

E_TulErrorCode_CrcCodeError             = 0x04, // CRC错误

E_TulErrorCode_CmdParaError             = 0x10, // 命令参数错误

}T_TulErr;

// 命令类型

typedef enum enum_TulCmdKind{

Tul_Cmd_Kind_Check              = 0x10,         // 查询类命令

Tul_Cmd_Kind_IapProtocol        = 0x30,         // IAP在线升级类命令

}T_TulCmdKind;

// 适用于链路层协议解析的通用函数指针

typedef T_TulErr (*PT_CmdFunc)(const UINT8 *paucUpperLayerCmdPara, UINT8 *paucRspPara, UINT16 *pusRetParaLen);

// 命令函数入口表数据结构

typedef struct tagTulCmdFuncTable{

UINT8 ucCmdSn;                                  // 命令流水号

PT_CmdFunc ptCmdFunc;                           // 命令函数指针

}T_TulCmdFuncTable;

// 命令类型索引表结构体

typedef struct tagTulCmdKindIndex{

T_TulCmdKind tCmdKind;                          // 命令类型

const T_TulCmdFuncTable *ptCmdFuncTable;        // 命令类型对应的命令入口函数码表

}T_TulCmdKindIndex;

// 解析帧所用参数结构体

typedef struct tagTulAnalysisPara{

T_TulErr tCmdFrameAnalysisRst;          // 命令帧解析结果

UINT8 ucCmdKind;                        // 上位机命令类型

UINT8 ucCmdSn;                          // 上位机命令在对应命令码表中的流水号

UINT8 *pucRspParaAddr;                  // 应答参数的缓存地址

UINT8 *pucUpperLayerCmdParaAddr;        // 上位机命令参数的缓存地址

}T_TulAnalysisPara;

6.1.0.2.4 命令实现

// 定义“查询下位机运行区间”命令

typedef struct struct_TulRspPara_Iap_CheckReaderRunSapce{

UINT8 ucRunSpace;                           // 运行区间

}T_TulRspPara_Iap_CheckReaderRunSpace;

// 定义“设置下位机运行区间”命令

typedef struct struct_TulCmdPara_Iap_SetReaderRunSapce{

UINT8 ucRunSpace;                           // 运行区间

}T_TulCmdPara_Iap_SetReaderRunSpace;

// 定义“查询下位机预留Flash空间大小”命令

typedef struct struct_TulRspPara_Iap_CheckObligateVersionFileSize{

UINT32 ulVersionFileSize;                   // 升级文件大小

}T_TulRspPara_Iap_CheckObligateVersionFileSize;

// 定义“向下位机传输版本文件”命令

typedef struct struct_TulCmdPara_Iap_TransmitVersionFile{

UINT8 bPackageEndFlag;                      // 包结束标识符

UINT16 usPackageSn;                         // 包序号

UINT16 usPackageLength;                     // 包长度

UINT8 aucPackageMessage[1];                 // 包信息

}T_TulCmdPara_Iap_TransmitVersionFile;

// 定义“向下位机传输版本文件参数信息”命令

typedef struct struct_TulCmdPara_Iap_TransmitVersionFilePara{

UINT32 ulVersionFileLength;                 // 升级文件长度

UINT32 ulVersionFileCrc;                    // 升级文件Crc

}T_TulCmdPara_Iap_TransimitVersionFilePara;

6.2 全局变量说明

static T_TulAnalysisPara tTulAnalysisPara;  // 解析用参数定义

static T_SystemEventFlag tSysEventFlag;               // 定义系统事件标志位

const T_TulCmdFuncTable atCmdFuncTable_IapProtocol[];// IAP命令码表

static T_Flash_AppChecksum tFlash_AppChecksum;          // AppsChecksum校验数据缓存

static T_Flash_OptFlag tFlash_OptFlag;                  // Flash操作标志位缓存

6.3 数据库说明

7 函数定义

7.1 引用函数定义

7.2 内部函数定义

7.2.1 链路层协议

7.2.1.1 Mid_Tul_CheckCrc16

// 函数名称:Mid_Tul_CheckCrc16

// 函数功能:检查CRC16

// 函数输入:UINT8* paucUpperLayerCmdMsg,接收到的上层命令数据

//          UINT16 usReceiveUpperLayerTotalLen,接收到上层数据的总长度

// 函数输出:无

// 函数返回:0表示CRC不一致,1表示CRC一致

7.2.1.2 Mid_Tul_CheckTulLengthField

// 函数名称:Mid_Tul_CheckTulLengthField

// 函数功能:检查长度字段

// 函数输入:UINT8* paucUpperLayerCmdMsg,接收到的上层命令数据

//          UINT16 usReceiveUpperLayerTotalLen,接收到上层数据的总长度

// 函数输出:无

// 函数返回:0表示不一致,1表示一致

7.2.1.3 Mid_Tul_GetCmdFunc

// 函数名称:GetCmdFuncWithCmdSn

// 函数功能:获取命令执行函数地址

// 函数输入:UINT8 ucCmdKind,命令类型

//          UINT8 ucCmdSn,命令序列号

// 函数输出:无

// 函数返回:PT_CmdFunc ptCmdFunc,命令执行函数

7.2.1.4 Mid_Tul_GetCmdFuncTableAddr

// 函数名称:Mid_Tul_GetCmdFuncTableAddr

// 函数功能:获取命令码类型对应的码表地址

// 函数输入:UINT8 ucCmdKind,命令类型

// 函数输出:无

// 函数返回:T_TulCmdFuncTable *ptCmdFuncTable,命令类型对应的码表

8 接口设计

8.1 用户接口

8.1.1 Flash资源

8.1.1.1 Drv_Flash_AppChecksum_GetChecksumInfo

// 函数名称:Drv_Flash_AppChecksum_GetChecksumInfo

// 函数功能:获取AppsChecksum校验区的校验信息,在正确读取后不需要对Size和Crc做大小端转换,这里由Updata操作确保写入时是小端写入

// 函数输入:E_Flash_AppChecksum_Kind eAppChecksumKind

// 函数输出:tFlash_AppsChecksum

// 函数返回:UINT32

8.1.1.2 Drv_Flash_AppChecksum_UpdataChecksumInfo

// 函数名称:Drv_Flash_AppChecksum_UpdataChecksumInfo

// 函数功能:更新AppsChecksum校验区的校验信息,确保函数输入数据为小端数据

// 函数输入:E_Flash_AppsChecksum_Kind eAppChecksumKind, UINT32 ulSizeOrCrcData

// 函数输出:tFlash_AppsChecksum

// 函数返回:无

8.1.1.3 Drv_Flash_FlagOpt_GetFlagInfo

// 函数名称:Drv_Flash_FlagOpt_GetFlagInfo

// 函数功能:查询Flash操作相关标志位

// 函数输入:E_Flash_FlagKind eFlashFlagKind

// 函数输出:tFlash_OptFlag

// 函数返回:BOOL

8.1.1.4 Drv_Flash_FlagOpt_SetFlagInfo

// 函数名称:Drv_Flash_FlagOpt_SetFlagInfo

// 函数功能:查询Flash操作相关标志位

// 函数输入:E_Flash_FlagKind eFlashFlagKind, BOOL bStatus

// 函数输出:tFlash_OptFlag

// 函数返回:无

8.1.2 异步事件

8.1.2.1 App_SysEvt_SetEventFlag

// 函数名称:App_SysEvt_SetEventFlag

// 函数功能:设置系统事件标志位

// 函数输入:E_SystemEventFlag eEventFlag,系统事件标志位

//          BOOL bStatus,待设置内容

// 函数输出:tSystemEventFlag

// 函数返回:无

8.1.2.2 App_SysEvt_GetEventFlag

// 函数名称:App_SysEvt_GetEventFlag

// 函数功能:获取系统事件标志位

// 函数输入:E_SystemEventFlag eEventFlag,系统事件标志位

// 函数输出:tSystemEventFlag

// 函数返回:BOOL

8.1.3 链路层协议

8.1.3.1 Mdi_Tul_UpperLayerCmdAnalysis

// 函数名称:Mid_Tul_UpperLayerCmdAnalysis

// 函数功能:上层命令解析

// 函数输入:UINT8* paucUpperLayerCmdMsg,接收到的上层命令数据

//          UINT8* paucReaderRspMsg,向上层返回的响应数据

//          UINT16 usReceiveUpperLayerTotalLen,接收到上层数据的总长度

// 函数输出:无

// 函数返回:UINT6 usRetLength,返回的数据长度

8.1.4 命令实现

8.1.4.1 App_TulIap_CheckRunSpace

// 函数名称:App_TulIap_CheckRunSpace

// 函数功能:IAP,查询读写器运行区间

// 函数输入:const UINT8* pucCmdParaMsg,接收到的上层命令参数数据

//          UINT8* pucRspRapaMsg,向上层返回的响应参数数据

//          UINT16 *pusRetParaLen,需要返回的参数长度

// 函数输出:UINT8* pucRspRapaMsg,向上层返回的响应参数数据

//          UINT16 *pusRetParaLen,需要返回的参数长度

// 函数返回:T_TulErr,函数执行状态

8.1.4.2 App_TulIap_ModifyRunSpace

// 函数名称:App_TulIap_ModifyRunSpace

// 函数功能:IAP,发送版本参数信息

// 函数输入:const UINT8* pucCmdParaMsg,接收到的上层命令参数数据

//          UINT8* pucRspRapaMsg,向上层返回的响应参数数据

//          UINT16 *pusRetParaLen,需要返回的参数长度

// 函数输出:UINT8* pucRspRapaMsg,向上层返回的响应参数数据

//          UINT16 *pusRetParaLen,需要返回的参数长度

// 函数返回:T_TulErr,函数执行状态

8.1.4.3 App_TulIap_CheckObligateVersionFileSize

// 函数名称:App_TulIap_CheckObligateVersionFileSize

// 函数功能:IAP,查询预留Flash大小

// 函数输入:const UINT8* pucCmdParaMsg,读写器接收到的上层命令参数数据

//          UINT8* pucRspRapaMsg,读写器向上层返回的响应参数数据

//          UINT16 *pusRetParaLen,需要返回的参数长度

// 函数输出:UINT8* pucRspRapaMsg,读写器向上层返回的响应参数数据

//          UINT16 *pusRetParaLen,需要返回的参数长度

// 函数返回:T_TulErr,函数执行状态

8.1.4.4 App_TulIap_TransmitVersionFile

// 函数名称:App_TulIap_TransmitVersionFile

// 函数功能:IAP,发送版本文件

// 函数输入:const UINT8* pucCmdParaMsg,读写器接收到的上层命令参数数据

//          UINT8* pucRspRapaMsg,读写器向上层返回的响应参数数据

//          UINT16 *pusRetParaLen,需要返回的参数长度

// 函数输出:UINT8* pucRspRapaMsg,读写器向上层返回的响应参数数据

//          UINT16 *pusRetParaLen,需要返回的参数长度

// 函数返回:T_TulErr,函数执行状态

8.1.4.5 App_TulIap_TransmitVersionFilePara

// 函数名称:App_TulIap_TransmitVersionFilePara

// 函数功能:IAP,发送版本参数信息

// 函数输入:const UINT8* pucCmdParaMsg,读写器接收到的上层命令参数数据

//          UINT8* pucRspRapaMsg,读写器向上层返回的响应参数数据

//          UINT16 *pusRetParaLen,需要返回的参数长度

// 函数输出:UINT8* pucRspRapaMsg,读写器向上层返回的响应参数数据

//          UINT16 *pusRetParaLen,需要返回的参数长度

// 函数返回:T_TulErr,函数执行状态

8.2 硬件接口

8.2.1 Flash资源

8.2.1.1 Drv_Flash_InitialPara

// 函数名称:Drv_Flash_InitialPara

// 函数功能:查询Flash操作相关标志位

// 函数输入:E_Flash_FlagKind eFlashFlagKind, BOOL bStatus

// 函数输出:tFlash_OptFlag

// 函数返回:无

8.2.1.2 Drv_Flash_ErasePagesWrite

// 函数名称:Drv_Flash_ErasePagesWrite

// 函数功能:Flash模块,擦除页信息并更新

// 函数输入:ULONG ulFlashAddr, UCHAR *pucSavebuf, ULONG ulLen

// 函数输出:无

// 函数返回:BOOL bStatus

8.2.1.3 Drv_Flash_Read

// 函数名称:Drv_Flash_Read

// 函数功能:Flash模块,读取数据信息

// 函数输入:ULONG ulFlashAddr, UCHAR *pucReadbuf, ULONG ulLen)

// 函数输出:无

// 函数返回:BOOL bStatus

8.2.1.4 Drv_Flash_EraseVersionFileSpace

// 函数名称:Drv_Flash_EraseVersionFileSpace

// 函数功能:IAP升级应用,擦除升级文件Flash空间

// 函数输入:无

// 函数输出:无

// 函数返回:无

8.2.1.5 Drv_Flash_UpdataVersionFileSpace

// 函数名称:Drv_Flash_UpdataVersionFileSpace

// 函数功能:IAP升级应用,更新升级文件预留Flash空间

// 函数输入:const UINT8 *pucPackageMessage, UINT16 usPackageLength, UINT16 usPackageSn

// 函数输出:无

// 函数返回:无

8.2.1.6 Drv_Flash_Test_ReadWrite(Test Condition)

// 函数名称:Drv_Flash_Test_ReadWrite

// 函数功能:Flash模块,测试读写

// 函数输入:无

// 函数输出:无

// 函数返回:无

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

  1. iap如何初始化_IAP超级详解

    在程序中添加Store功能 本章为添加购买功能的指导 详细流程: 准备工作当然是添加StoreKit.framework了. 然后是具体的步骤: 1. 决定在程序内出售的商品的类型. 之前提到过,程序 ...

  2. STM32 之八 在线升级(IAP)超详细图解 及 需要注意的问题解决

    IAP 是啥   IAP( In Application Programming)即在应用编程,也就是用户可以使用自己的程序对MCU的中的运行程序进行更新,而无需借助于外部烧写器.其实ST官网也给出了 ...

  3. Stm 32 IAP 在线 升级IAP 的 操作

    (扩展-IAP主要用于产品出厂后应用程序的更新作用,考虑到出厂时要先烧写IAP  再烧写APP应用程序要烧写2次增加工人劳动力基础上写了"STM32 IAP+APP ==>双剑合一&q ...

  4. STM32F429实现USB通过IAP在线升级

    1.目标 1.实现STM32对U盘文件的读取. 2.实现STM32拓展外部SDRAM. 3.实现STM32拓展外部Flash. 4.实现内存管理. 5.实现Fatfs文件系统,读写U盘和外部Flash ...

  5. STM32F4单片机bootloader及在线升级IAP基本原理

    STM32F407基础总结系列(三) STM32F4bootloader及在线升级IAP基本原理 一 .前言 二.背景知识补充 2.1 系统启动过程 2.2 内存映射分布 三.bootloader 3 ...

  6. iap升级问题 stm32f103r8_STM32在线升级OTA,看这一篇就够啦~

    EDA365欢迎您登录! 您需要 登录 才可以下载或查看,没有帐号?注册 x 本帖最后由 Ber_thaw99 于 2020-12-3 13:33 编辑 " \; [( t3 j4 {&qu ...

  7. STM32 IAP 在线升级详解

    (扩展-IAP主要用于产品出厂后应用程序的更新作用,考虑到出厂时要先烧写IAP  再烧写APP应用程序要烧写2次增加工人劳动力基础上写了"STM32 IAP+APP ==>双剑合一&q ...

  8. CRC校验原理及STM32 IAP在线升级程序

    CRC校验原理: 什么是CRC校验? CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数据传输检错功能,对数据 ...

  9. Cortex-M3单片机的IAP在线升级上位机和下位机

    最近有个项目要做在线升级功能,我也是第一次做,把学习的过程总结下,希望能够帮助到 其他人吧.本篇博客主要介绍两个部分,下位机和上位机. 首先说下要实现功能: 1.上位机能够把APP的bin文件烧写进下 ...

最新文章

  1. 懒加载--初步理解. by:王朋
  2. MATLAB应用实战系列(七十七)-基于长时间序列栅格数据的MK检验
  3. dw指向html的根路径,dreamweaver中绝对、文档相对和站点根目录相对路径区分
  4. soapui 证书_SoapUI入门之附件上传和配置Https请求
  5. PHP伪造来源HTTP,伪造来源采集http.php
  6. Java新特性之Nashorn的实例详解
  7. 一年代码功能点的创新性怎么写_技术创新管理--作业--答案
  8. 寻找中项和第k小元素c语言,分治法第k小元素poj2104.ppt
  9. 电脑软件上的按钮原来是这样来的:按钮组件
  10. Spring Data JPA 必须掌握的 20+ 个查询关键字
  11. 百度 AI Studio 车牌识别
  12. MySQL误删数据找回和恢复
  13. pytorch导出onnx格式模型时,不固定输入输出维度
  14. CSDN明星博主Leo新作——《程序员羊皮卷》即将隆重上市
  15. C++ 学生姓名学号 字符串
  16. 0x01位运算——a^b
  17. 精选收集50个计算机热门视频教程免费下载
  18. hack the box explore
  19. Python爬取图片2——爬取多个网页图片
  20. 认证、授权、鉴权和权限控制概念区别

热门文章

  1. opencv Hog Demo
  2. Python格式化函数format详解
  3. 【Python】PyCryptodome模块实现多种加密算法
  4. OpenGL, GLSL, DirectX, HLSL中的矩阵存储形式
  5. mvn 修改所有子项目pom版本
  6. insert sort
  7. jQuery中的渐变动画效果
  8. ASP.NET MVC3 学习心得------路由机制
  9. (转) PowerDesigner中Table视图同时显示Code和Name
  10. .net框架读书笔记---虚方法