目 錄
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模塊,測試讀寫
// 函數輸入:無
// 函數輸出:無
// 函數返回:無