日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iap如何初始化_IAP在线升级模块详细设计说明 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目 ?錄

1 編寫目的5

2 術(shù)語、定義和縮略語5

2.1 術(shù)語、定義 5

2.2 縮略語 5

3 模塊描述5

3.1 Flash的特性 5

3.2 Flash的資源劃分 5

3.3 MCU中斷的使用方式 5

3.3.1 Cortex-M3內(nèi)核系列MCU中斷向量表重定位6

3.4 MCU復(fù)位后的硬件外設(shè)初始化 6

4 標(biāo)準(zhǔn)模塊6

5 模塊設(shè)計(jì)6

5.1 Flash空間劃分 6

5.2 異步事件處理機(jī)制 7

5.3 命令處理 7

5.3.1 BL和APP對(duì)命令的支持7

6 數(shù)據(jù)描述7

6.1 數(shù)據(jù)結(jié)構(gòu)說明 7

6.1.1.1 宏定義 7

6.1.1.1.1 Flash資源 7

6.1.1.1.2 鏈路層協(xié)議 9

6.1.1.2 結(jié)構(gòu)體/聯(lián)合/枚舉定義 9

6.1.1.2.1 Flash資源 9

6.1.1.2.2 異步事件 10

6.1.1.2.3 鏈路層協(xié)議 10

6.1.1.2.4 命令實(shí)現(xiàn) 11

6.2 全局變量說明 12

6.3 數(shù)據(jù)庫(kù)說明 12

7 函數(shù)定義12

7.1 引用函數(shù)定義 12

7.2 內(nèi)部函數(shù)定義 13

7.2.1 鏈路層協(xié)議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 接口設(shè)計(jì)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 鏈路層協(xié)議15

8.1.3.1 Mdi_Tul_UpperLayerCmdAnalysis 15

8.1.4 命令實(shí)現(xiàn)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 規(guī)范接口17

8.3.2 非規(guī)范接口17

9 其它說明17

10 參考資料17

1?編寫目的

本文檔的編寫目的在于詳細(xì)的說明IAP在線升級(jí)模塊中的設(shè)計(jì)思路以及實(shí)現(xiàn)細(xì)節(jié),以利于后續(xù)程序員參考實(shí)現(xiàn)。

2?術(shù)語、定義和縮略語

2.1?術(shù)語、定義

2.2?縮略語

IAP

In Application Program

MCU

Microprogrammed Control Unit

BL

Bootloader

APP

Application

IVT

Interrupt Vector Table

TUL

To Upper Layer

3?模塊描述

實(shí)現(xiàn)IAP主要有以下幾個(gè)要點(diǎn):

1)?Flash的特性,以及資源劃分

2)?MCU中斷的使用方式

3)?MCU復(fù)位后的硬件外設(shè)初始化

3.1?Flash的特性

IAP的全稱是In Application Program,即在應(yīng)用編程。在MCU的應(yīng)用程序中,通過在線擦除指定Flash區(qū)域,編程Flash區(qū)域來實(shí)現(xiàn)待升級(jí)版本文件(通常是.bin文件)的保存,因此要求Flash必須是可持續(xù)擦除和編程的。

3.2?Flash的資源劃分

在一般的IAP應(yīng)用中,分為BL程序和APP程序,即在MCU的存儲(chǔ)空間內(nèi),BL程序和APP程序是共存的,因此需要對(duì)Flash地址做合理的規(guī)劃,方便對(duì)Flash地址空間做有效的管理。一般的IAP應(yīng)用將Flash劃分為以下幾個(gè)區(qū)間:

BL程序區(qū)間(必須位于MCU的啟動(dòng)地址處)

APP程序區(qū)間

BL程序的全局參數(shù)存儲(chǔ)區(qū)間

APP程序的全局參數(shù)存儲(chǔ)區(qū)間

APP程序的檢驗(yàn)區(qū)間

BL程序的備份區(qū)間(也叫2級(jí)BL,用于對(duì)1級(jí)BL程序做IAP升級(jí))

3.3?MCU 中斷的使用方式

在MCU應(yīng)用中,通常會(huì)使用中斷Interrupt和外設(shè)進(jìn)行數(shù)據(jù)交換。如果不能使用中斷的交互方式,需要在程序結(jié)構(gòu)和數(shù)據(jù)處理過程上計(jì)算處理周期,以保證數(shù)據(jù)的完整性。MCU中存放中斷的地方叫做IVT,當(dāng)程序發(fā)生中斷時(shí),首先是在IVT里查找對(duì)應(yīng)的中斷源地址,從而執(zhí)行中斷程序的。

在IAP應(yīng)用中,MCU的Flash中需要同時(shí)存儲(chǔ)BL程序和APP程序,也就意味著這兩塊程序會(huì)共用IVT,不論BL還是APP如果不能使用中斷處理鏈路通訊,對(duì)數(shù)據(jù)完完整性會(huì)產(chǎn)生影響。

因此,這里會(huì)涉及到IVT的重定位問題。

3.3.1?Cortex-M3內(nèi)核系列MCU中斷向量表重定位

在Cortex-M3內(nèi)核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復(fù)位后的硬件外設(shè)初始化

當(dāng)MCU的當(dāng)前邏輯運(yùn)行區(qū)間發(fā)生轉(zhuǎn)換時(shí),MCU都會(huì)復(fù)位,因此在BL和APP程序里需要對(duì)響應(yīng)的硬件外設(shè)資源做正確的初始化配置。

4?標(biāo)準(zhǔn)模塊

5?模塊設(shè)計(jì)

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區(qū)間分配2Kbytes

5)?APP Para區(qū)間分配2KBytes

6)?Apps CheckSum區(qū)間分配2KBytes

5.2?異步事件處理機(jī)制

本系統(tǒng)采用異步事件處理機(jī)制,即中斷源處理作為前臺(tái)事件,Main函數(shù)作為后臺(tái)處理,在前臺(tái)事件中標(biāo)識(shí)事件源,在后臺(tái)處理事件源。

5.3?命令處理

根據(jù)《繪畫板系列接口協(xié)議_Ver X.xx》文檔,整個(gè)IAP流程需要用到以下命令:

命令3001,獲取下位機(jī)運(yùn)行區(qū)間

命令3002,設(shè)置下位機(jī)運(yùn)行區(qū)間

命令3003,獲取下位機(jī)預(yù)留的Flash空間大小

命令3004,向下位機(jī)傳輸待升級(jí)版本文件

命令3005,向下位機(jī)傳輸版本文件參數(shù)信息

5.3.1?BL和APP對(duì)命令的支持

命令3001

命令3002

命令3003

命令3004

命令3005

BL程序

APP程序

6?數(shù)據(jù)描述

6.1?數(shù)據(jù)結(jié)構(gòu)說明

6.1.0.1?宏定義

6.1.0.1.1?Flash資源

#if?CVIEW("公用資源")

/* 定義Flash一頁數(shù)據(jù)大小*/

#define?mFlashPageSize??????????????????????????????2048

/* 獲取所在頁面地址*/

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

/* 獲取所在頁面偏移地址*/

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

/* 獲取指定范圍Flash的頁面數(shù)量*/

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

#endif?// #if CVIEW("公用資源")

#if?CVIEW("地址規(guī)劃")

#if?CVIEW("Boot")

/* Boot區(qū)*/

#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區(qū)*/

#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參數(shù)區(qū)*/

#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參數(shù)區(qū)*/

#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校驗(yàn)區(qū)*/

#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("地址規(guī)劃")

6.1.0.1.2?鏈路層協(xié)議

#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?結(jié)構(gòu)體/聯(lián)合/枚舉定義

6.1.0.2.1?Flash資源

typedef?enum?enumFlash_AppChecksum_Kind{ ??// App校驗(yàn)區(qū)枚舉類型

eFlash_AppChecksum_Kind_Size,

eFlash_AppChecksum_Kind_Crc,

}E_Flash_AppChecksum_Kind;

typedef?enum?enumFlash_FlagKind{ ??????????// Flash操作相關(guān)枚舉

eFlash_FlagKind_VersionFileTrans,

eFlash_FlagKind_VersionFileChecksumTrans,

}E_Flash_FlagKind;

typedef?struct?structFlash_AppChecksum{ ??// App校驗(yàn)區(qū)數(shù)據(jù)結(jié)構(gòu)

UINT32?ulAppSize;

UINT32?ulAppCrc;

}T_Flash_AppChecksum;

typedef?struct?structFlashOptFlag{ ?????????// Flash操作相關(guān)數(shù)據(jù)結(jié)構(gòu)

UINT8?bVersionFileTransDoneFlag??????????????: 1;

UINT8?bVersionFileChecksumTransDoneFlag????: 1;

UINT8?bKeepBits?????????????????????????????????: 6;

}T_Flash_OptFlag;

6.1.0.2.2?異步事件

// 定義系統(tǒng)標(biāo)志位結(jié)構(gòu)體

typedef?struct?struct_SystemEventFlag{

UINT32?ulSysEventFlag_RevUsbFrame???: 1; ????????????// 系統(tǒng)事件枚舉,接收到UsbFrame

UINT32?ulSysEventFlag_KeyPressed????: 1; ???????????// 系統(tǒng)事件枚舉,按鍵

UINT32?ulSysEventFlag_SysReset??????: 1; ????????????// 系統(tǒng)事件枚舉,系統(tǒng)復(fù)位

UINT32?ulSysEventFlag_KeepBits??????: 29;// 系統(tǒng)時(shí)間標(biāo)志位,保留位

}T_SystemEventFlag;

// 定義系統(tǒng)標(biāo)志位枚舉

typedef?enum?enum_SystemEventFlag{

E_SystemEventFlag_SystemReset, ??????????????????????// 系統(tǒng)事件枚舉,復(fù)位系統(tǒng)

E_SystemEventFlag_KeyPressed, ??????????????????????// 系統(tǒng)事件枚舉,按鍵

E_SystemEventFlag_RevUsbFrame, ??????????????????????// 系統(tǒng)事件枚舉,接收到UsbFrame

}E_SystemEventFlag;

6.1.0.2.3?鏈路層協(xié)議

// 定義TUL層命令應(yīng)答結(jié)構(gòu)體

typedef?struct?struct_SystemResourceTul{

UINT8?aucTulCmdFrame[TUL_CMD_ARRAY_SIZE]; ????????????// 定義Tul層命令緩存

UINT16?usCmdFrameCnt; ??????????????????????????????????????// 定義Tul層命令緩存指針計(jì)數(shù)器

UINT16?usCmdSubsequentLength; ??????????????????????????????// 定義Tul層命令幀中長(zhǎng)度字段后續(xù)數(shù)據(jù)長(zhǎng)度

UINT16?usCmdTotalLen; ??????????????????????????????????????// 定義Tul層命令幀全長(zhǎng)緩存

UINT8?aucTulRspFrame[TUL_RSP_ARRAY_SIZE]; ??????????????// 定義Tul層應(yīng)答緩存

UINT16?usRspTotalLen; ??????????????????????????????????????// 定義Tul層應(yīng)答幀全長(zhǎng)緩存

BOOL?bReiceveCmdFrameStartFlag; ????????????????????????????// 定義命令接收標(biāo)志位

BOOL?bReiceveCmdFrameEndFlag; ??????????????????????????????// 定義命令接收標(biāo)志位

}T_SystemResource_Tul;

// 出錯(cuò)類別表

typedef?enum?{

E_TulErrorCode_Success??????????????????= 0x00, // 正確

E_TulErrorCode_BootCodeError????????????= 0x01, // 引導(dǎo)碼錯(cuò)誤

E_TulErrorCode_CmdFrameParaLengthError= 0x02, // 命令參數(shù)長(zhǎng)度錯(cuò)誤

E_TulErrorCode_CmdCodeError?????????????= 0x03, // 命令碼錯(cuò)誤

E_TulErrorCode_CrcCodeError?????????????= 0x04, // CRC錯(cuò)誤

E_TulErrorCode_CmdParaError?????????????= 0x10, // 命令參數(shù)錯(cuò)誤

}T_TulErr;

// 命令類型

typedef?enum?enum_TulCmdKind{

Tul_Cmd_Kind_Check??????????????= 0x10, ????????// 查詢類命令

Tul_Cmd_Kind_IapProtocol????????= 0x30, ????????// IAP在線升級(jí)類命令

}T_TulCmdKind;

// 適用于鏈路層協(xié)議解析的通用函數(shù)指針

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

// 命令函數(shù)入口表數(shù)據(jù)結(jié)構(gòu)

typedef?struct?tagTulCmdFuncTable{

UINT8?ucCmdSn; ?????????????????????????????????// 命令流水號(hào)

PT_CmdFunc?ptCmdFunc; ??????????????????????????// 命令函數(shù)指針

}T_TulCmdFuncTable;

// 命令類型索引表結(jié)構(gòu)體

typedef?struct?tagTulCmdKindIndex{

T_TulCmdKind?tCmdKind; ?????????????????????????// 命令類型

const?T_TulCmdFuncTable?*ptCmdFuncTable; ???????// 命令類型對(duì)應(yīng)的命令入口函數(shù)碼表

}T_TulCmdKindIndex;

// 解析幀所用參數(shù)結(jié)構(gòu)體

typedef?struct?tagTulAnalysisPara{

T_TulErr?tCmdFrameAnalysisRst; ?????????// 命令幀解析結(jié)果

UINT8?ucCmdKind; ???????????????????????// 上位機(jī)命令類型

UINT8?ucCmdSn; ?????????????????????????// 上位機(jī)命令在對(duì)應(yīng)命令碼表中的流水號(hào)

UINT8?*pucRspParaAddr; ?????????????????// 應(yīng)答參數(shù)的緩存地址

UINT8?*pucUpperLayerCmdParaAddr; ???????// 上位機(jī)命令參數(shù)的緩存地址

}T_TulAnalysisPara;

6.1.0.2.4?命令實(shí)現(xiàn)

// 定義“查詢下位機(jī)運(yùn)行區(qū)間”命令

typedef?struct?struct_TulRspPara_Iap_CheckReaderRunSapce{

UINT8?ucRunSpace; ??????????????????????????// 運(yùn)行區(qū)間

}T_TulRspPara_Iap_CheckReaderRunSpace;

// 定義“設(shè)置下位機(jī)運(yùn)行區(qū)間”命令

typedef?struct?struct_TulCmdPara_Iap_SetReaderRunSapce{

UINT8?ucRunSpace; ??????????????????????????// 運(yùn)行區(qū)間

}T_TulCmdPara_Iap_SetReaderRunSpace;

// 定義“查詢下位機(jī)預(yù)留Flash空間大小”命令

typedef?struct?struct_TulRspPara_Iap_CheckObligateVersionFileSize{

UINT32?ulVersionFileSize; ??????????????????// 升級(jí)文件大小

}T_TulRspPara_Iap_CheckObligateVersionFileSize;

// 定義“向下位機(jī)傳輸版本文件”命令

typedef?struct?struct_TulCmdPara_Iap_TransmitVersionFile{

UINT8?bPackageEndFlag; ?????????????????????// 包結(jié)束標(biāo)識(shí)符

UINT16?usPackageSn; ????????????????????????// 包序號(hào)

UINT16?usPackageLength; ????????????????????// 包長(zhǎng)度

UINT8?aucPackageMessage[1]; ????????????????// 包信息

}T_TulCmdPara_Iap_TransmitVersionFile;

// 定義“向下位機(jī)傳輸版本文件參數(shù)信息”命令

typedef?struct?struct_TulCmdPara_Iap_TransmitVersionFilePara{

UINT32?ulVersionFileLength; ????????????????// 升級(jí)文件長(zhǎng)度

UINT32?ulVersionFileCrc; ???????????????????// 升級(jí)文件Crc

}T_TulCmdPara_Iap_TransimitVersionFilePara;

6.2?全局變量說明

static?T_TulAnalysisPara?tTulAnalysisPara; ?// 解析用參數(shù)定義

static?T_SystemEventFlag?tSysEventFlag; ??????????????// 定義系統(tǒng)事件標(biāo)志位

const?T_TulCmdFuncTable?atCmdFuncTable_IapProtocol[];// IAP命令碼表

static?T_Flash_AppChecksum?tFlash_AppChecksum; ?????????// AppsChecksum校驗(yàn)數(shù)據(jù)緩存

static?T_Flash_OptFlag?tFlash_OptFlag; ?????????????????// Flash操作標(biāo)志位緩存

6.3?數(shù)據(jù)庫(kù)說明

7?函數(shù)定義

7.1?引用函數(shù)定義

7.2?內(nèi)部函數(shù)定義

7.2.1?鏈路層協(xié)議

7.2.1.1?Mid_Tul_CheckCrc16

// 函數(shù)名稱:Mid_Tul_CheckCrc16

// 函數(shù)功能:檢查CRC16

// 函數(shù)輸入:UINT8* paucUpperLayerCmdMsg,接收到的上層命令數(shù)據(jù)

// ?????????UINT16 usReceiveUpperLayerTotalLen,接收到上層數(shù)據(jù)的總長(zhǎng)度

// 函數(shù)輸出:無

// 函數(shù)返回:0表示CRC不一致,1表示CRC一致

7.2.1.2?Mid_Tul_CheckTulLengthField

// 函數(shù)名稱:Mid_Tul_CheckTulLengthField

// 函數(shù)功能:檢查長(zhǎng)度字段

// 函數(shù)輸入:UINT8* paucUpperLayerCmdMsg,接收到的上層命令數(shù)據(jù)

// ?????????UINT16 usReceiveUpperLayerTotalLen,接收到上層數(shù)據(jù)的總長(zhǎng)度

// 函數(shù)輸出:無

// 函數(shù)返回:0表示不一致,1表示一致

7.2.1.3?Mid_Tul_GetCmdFunc

// 函數(shù)名稱:GetCmdFuncWithCmdSn

// 函數(shù)功能:獲取命令執(zhí)行函數(shù)地址

// 函數(shù)輸入:UINT8 ucCmdKind,命令類型

// ?????????UINT8 ucCmdSn,命令序列號(hào)

// 函數(shù)輸出:無

// 函數(shù)返回:PT_CmdFunc ptCmdFunc,命令執(zhí)行函數(shù)

7.2.1.4?Mid_Tul_GetCmdFuncTableAddr

// 函數(shù)名稱:Mid_Tul_GetCmdFuncTableAddr

// 函數(shù)功能:獲取命令碼類型對(duì)應(yīng)的碼表地址

// 函數(shù)輸入:UINT8 ucCmdKind,命令類型

// 函數(shù)輸出:無

// 函數(shù)返回:T_TulCmdFuncTable *ptCmdFuncTable,命令類型對(duì)應(yīng)的碼表

8?接口設(shè)計(jì)

8.1?用戶接口

8.1.1?Flash資源

8.1.1.1?Drv_Flash_AppChecksum_GetChecksumInfo

// 函數(shù)名稱:Drv_Flash_AppChecksum_GetChecksumInfo

// 函數(shù)功能:獲取AppsChecksum校驗(yàn)區(qū)的校驗(yàn)信息,在正確讀取后不需要對(duì)Size和Crc做大小端轉(zhuǎn)換,這里由Updata操作確保寫入時(shí)是小端寫入

// 函數(shù)輸入:E_Flash_AppChecksum_Kind eAppChecksumKind

// 函數(shù)輸出:tFlash_AppsChecksum

// 函數(shù)返回:UINT32

8.1.1.2?Drv_Flash_AppChecksum_UpdataChecksumInfo

// 函數(shù)名稱:Drv_Flash_AppChecksum_UpdataChecksumInfo

// 函數(shù)功能:更新AppsChecksum校驗(yàn)區(qū)的校驗(yàn)信息,確保函數(shù)輸入數(shù)據(jù)為小端數(shù)據(jù)

// 函數(shù)輸入:E_Flash_AppsChecksum_Kind eAppChecksumKind, UINT32 ulSizeOrCrcData

// 函數(shù)輸出:tFlash_AppsChecksum

// 函數(shù)返回:無

8.1.1.3?Drv_Flash_FlagOpt_GetFlagInfo

// 函數(shù)名稱:Drv_Flash_FlagOpt_GetFlagInfo

// 函數(shù)功能:查詢Flash操作相關(guān)標(biāo)志位

// 函數(shù)輸入:E_Flash_FlagKind eFlashFlagKind

// 函數(shù)輸出:tFlash_OptFlag

// 函數(shù)返回:BOOL

8.1.1.4?Drv_Flash_FlagOpt_SetFlagInfo

// 函數(shù)名稱:Drv_Flash_FlagOpt_SetFlagInfo

// 函數(shù)功能:查詢Flash操作相關(guān)標(biāo)志位

// 函數(shù)輸入:E_Flash_FlagKind eFlashFlagKind, BOOL bStatus

// 函數(shù)輸出:tFlash_OptFlag

// 函數(shù)返回:無

8.1.2?異步事件

8.1.2.1?App_SysEvt_SetEventFlag

// 函數(shù)名稱:App_SysEvt_SetEventFlag

// 函數(shù)功能:設(shè)置系統(tǒng)事件標(biāo)志位

// 函數(shù)輸入:E_SystemEventFlag eEventFlag,系統(tǒng)事件標(biāo)志位

// ?????????BOOL bStatus,待設(shè)置內(nèi)容

// 函數(shù)輸出:tSystemEventFlag

// 函數(shù)返回:無

8.1.2.2?App_SysEvt_GetEventFlag

// 函數(shù)名稱:App_SysEvt_GetEventFlag

// 函數(shù)功能:獲取系統(tǒng)事件標(biāo)志位

// 函數(shù)輸入:E_SystemEventFlag eEventFlag,系統(tǒng)事件標(biāo)志位

// 函數(shù)輸出:tSystemEventFlag

// 函數(shù)返回:BOOL

8.1.3?鏈路層協(xié)議

8.1.3.1?Mdi_Tul_UpperLayerCmdAnalysis

// 函數(shù)名稱:Mid_Tul_UpperLayerCmdAnalysis

// 函數(shù)功能:上層命令解析

// 函數(shù)輸入:UINT8* paucUpperLayerCmdMsg,接收到的上層命令數(shù)據(jù)

// ?????????UINT8* paucReaderRspMsg,向上層返回的響應(yīng)數(shù)據(jù)

// ?????????UINT16 usReceiveUpperLayerTotalLen,接收到上層數(shù)據(jù)的總長(zhǎng)度

// 函數(shù)輸出:無

// 函數(shù)返回:UINT6 usRetLength,返回的數(shù)據(jù)長(zhǎng)度

8.1.4?命令實(shí)現(xiàn)

8.1.4.1?App_TulIap_CheckRunSpace

// 函數(shù)名稱:App_TulIap_CheckRunSpace

// 函數(shù)功能:IAP,查詢讀寫器運(yùn)行區(qū)間

// 函數(shù)輸入:const UINT8* pucCmdParaMsg,接收到的上層命令參數(shù)數(shù)據(jù)

// ?????????UINT8* pucRspRapaMsg,向上層返回的響應(yīng)參數(shù)數(shù)據(jù)

// ?????????UINT16 *pusRetParaLen,需要返回的參數(shù)長(zhǎng)度

// 函數(shù)輸出:UINT8* pucRspRapaMsg,向上層返回的響應(yīng)參數(shù)數(shù)據(jù)

// ?????????UINT16 *pusRetParaLen,需要返回的參數(shù)長(zhǎng)度

// 函數(shù)返回:T_TulErr,函數(shù)執(zhí)行狀態(tài)

8.1.4.2?App_TulIap_ModifyRunSpace

// 函數(shù)名稱:App_TulIap_ModifyRunSpace

// 函數(shù)功能:IAP,發(fā)送版本參數(shù)信息

// 函數(shù)輸入:const UINT8* pucCmdParaMsg,接收到的上層命令參數(shù)數(shù)據(jù)

// ?????????UINT8* pucRspRapaMsg,向上層返回的響應(yīng)參數(shù)數(shù)據(jù)

// ?????????UINT16 *pusRetParaLen,需要返回的參數(shù)長(zhǎng)度

// 函數(shù)輸出:UINT8* pucRspRapaMsg,向上層返回的響應(yīng)參數(shù)數(shù)據(jù)

// ?????????UINT16 *pusRetParaLen,需要返回的參數(shù)長(zhǎng)度

// 函數(shù)返回:T_TulErr,函數(shù)執(zhí)行狀態(tài)

8.1.4.3?App_TulIap_CheckObligateVersionFileSize

// 函數(shù)名稱:App_TulIap_CheckObligateVersionFileSize

// 函數(shù)功能:IAP,查詢預(yù)留Flash大小

// 函數(shù)輸入:const UINT8* pucCmdParaMsg,讀寫器接收到的上層命令參數(shù)數(shù)據(jù)

// ?????????UINT8* pucRspRapaMsg,讀寫器向上層返回的響應(yīng)參數(shù)數(shù)據(jù)

// ?????????UINT16 *pusRetParaLen,需要返回的參數(shù)長(zhǎng)度

// 函數(shù)輸出:UINT8* pucRspRapaMsg,讀寫器向上層返回的響應(yīng)參數(shù)數(shù)據(jù)

// ?????????UINT16 *pusRetParaLen,需要返回的參數(shù)長(zhǎng)度

// 函數(shù)返回:T_TulErr,函數(shù)執(zhí)行狀態(tài)

8.1.4.4?App_TulIap_TransmitVersionFile

// 函數(shù)名稱:App_TulIap_TransmitVersionFile

// 函數(shù)功能:IAP,發(fā)送版本文件

// 函數(shù)輸入:const UINT8* pucCmdParaMsg,讀寫器接收到的上層命令參數(shù)數(shù)據(jù)

// ?????????UINT8* pucRspRapaMsg,讀寫器向上層返回的響應(yīng)參數(shù)數(shù)據(jù)

// ?????????UINT16 *pusRetParaLen,需要返回的參數(shù)長(zhǎng)度

// 函數(shù)輸出:UINT8* pucRspRapaMsg,讀寫器向上層返回的響應(yīng)參數(shù)數(shù)據(jù)

// ?????????UINT16 *pusRetParaLen,需要返回的參數(shù)長(zhǎng)度

// 函數(shù)返回:T_TulErr,函數(shù)執(zhí)行狀態(tài)

8.1.4.5?App_TulIap_TransmitVersionFilePara

// 函數(shù)名稱:App_TulIap_TransmitVersionFilePara

// 函數(shù)功能:IAP,發(fā)送版本參數(shù)信息

// 函數(shù)輸入:const UINT8* pucCmdParaMsg,讀寫器接收到的上層命令參數(shù)數(shù)據(jù)

// ?????????UINT8* pucRspRapaMsg,讀寫器向上層返回的響應(yīng)參數(shù)數(shù)據(jù)

// ?????????UINT16 *pusRetParaLen,需要返回的參數(shù)長(zhǎng)度

// 函數(shù)輸出:UINT8* pucRspRapaMsg,讀寫器向上層返回的響應(yīng)參數(shù)數(shù)據(jù)

// ?????????UINT16 *pusRetParaLen,需要返回的參數(shù)長(zhǎng)度

// 函數(shù)返回:T_TulErr,函數(shù)執(zhí)行狀態(tài)

8.2?硬件接口

8.2.1?Flash資源

8.2.1.1?Drv_Flash_InitialPara

// 函數(shù)名稱:Drv_Flash_InitialPara

// 函數(shù)功能:查詢Flash操作相關(guān)標(biāo)志位

// 函數(shù)輸入:E_Flash_FlagKind eFlashFlagKind, BOOL bStatus

// 函數(shù)輸出:tFlash_OptFlag

// 函數(shù)返回:無

8.2.1.2?Drv_Flash_ErasePagesWrite

// 函數(shù)名稱:Drv_Flash_ErasePagesWrite

// 函數(shù)功能:Flash模塊,擦除頁信息并更新

// 函數(shù)輸入:ULONG ulFlashAddr, UCHAR *pucSavebuf, ULONG ulLen

// 函數(shù)輸出:無

// 函數(shù)返回:BOOL bStatus

8.2.1.3?Drv_Flash_Read

// 函數(shù)名稱:Drv_Flash_Read

// 函數(shù)功能:Flash模塊,讀取數(shù)據(jù)信息

// 函數(shù)輸入:ULONG ulFlashAddr, UCHAR *pucReadbuf, ULONG ulLen)

// 函數(shù)輸出:無

// 函數(shù)返回:BOOL bStatus

8.2.1.4?Drv_Flash_EraseVersionFileSpace

// 函數(shù)名稱:Drv_Flash_EraseVersionFileSpace

// 函數(shù)功能:IAP升級(jí)應(yīng)用,擦除升級(jí)文件Flash空間

// 函數(shù)輸入:無

// 函數(shù)輸出:無

// 函數(shù)返回:無

8.2.1.5?Drv_Flash_UpdataVersionFileSpace

// 函數(shù)名稱:Drv_Flash_UpdataVersionFileSpace

// 函數(shù)功能:IAP升級(jí)應(yīng)用,更新升級(jí)文件預(yù)留Flash空間

// 函數(shù)輸入:const UINT8 *pucPackageMessage, UINT16 usPackageLength, UINT16 usPackageSn

// 函數(shù)輸出:無

// 函數(shù)返回:無

8.2.1.6?Drv_Flash_Test_ReadWrite(Test Condition)

// 函數(shù)名稱:Drv_Flash_Test_ReadWrite

// 函數(shù)功能:Flash模塊,測(cè)試讀寫

// 函數(shù)輸入:無

// 函數(shù)輸出:無

// 函數(shù)返回:無

總結(jié)

以上是生活随笔為你收集整理的iap如何初始化_IAP在线升级模块详细设计说明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。