FOTA_handler产品参考手册

缩写词注解

** 缩写 词**

英文全名

** 解释/描述**

ECU

Electronic control unit

电控单元

DCM

Diagnostic Communication Manager (AUTOSAR BSW Module, Classic Platform) (Surprisingly not yet listed!)

诊断通 信管理模块

FOTA

Firmware Over-The-Air

固 件无线升级

NvM

Non-Volatile Memory, BSW Module, sometimes referred to as NV Memory (Surprisingly not yet listed!)

非 易失数据存 储管理模块

OTA

Over-The-Air technologies in general, regardless of AUTOSAR

空 中下载技术

SW

Soft ware

软件

CDD

Complex Driver

复杂驱动

FOTA Ma ster

Firmware Over-The-Air of Master

固件无线升 级的客户端

Nv

Non-Volatile Memory

非易失存储

简介

FOTA方法将引入一个通用的机制来在运行时更新ECU软件。当当前的ECU软件已经执行并且从功能角度(例如在驱动过程中)完全可用时,新的ECU软件应该在后台(安装阶段)进行编程。在安装时,可以中断和继续在几个驱动周期,新的SW的真实性和完整性应得到验证。如果验证结果为真,ECU将能够激活新的SW。SW的激活总是需要一个特殊的ECU模式(例如启动),因此新SW的激活不能在开车时启动,甚至不能在开车时执行。启动应在车辆安全状态下进行,如停止、关闭发动机和使用驻车制动。如果在新SW激活后或激活期间发现异常或错误,ECU应该能够实现ECU内部回滚到以前的SW。ECU内部回滚意味着,以前的SW仍然存在于ECU上,可以重新激活。

image1

图1-1 FOTA_handler架构布局

如上图所示,FOTA_handler是处于DCM模块和存储栈之间的一个CDD模块,FOTA Handler被DCM模块所调用,DCM模块将接收到的数据流传递给FOTA Handler,然后FOTA Handler经过相应的处理之后将数据传递给flash驱动,并写入到flash中。在写入的过程中会产生一些需要NvM模块存储的用户数据,FOTA Handler通过调用NvM模块的接口来存储和恢复相应的数据,这些数据也会被DCM模块所获取反馈给FOTA Master,FOTA Master通过数据发送相应的指令或数据给DCM模块。

参考资料

[1] AUTOSAR_EXP_FirmwareOverTheAir.pdf,R19-11

[2] AUTOSAR_RS_FirmwareOverTheAir.pdf,R19-11

[3] AUTOSAR_EXP_CDDDesignAndIntegrationGuideline.pdf,4.2.2

[4] AUTOSAR_SWS_DiagnosticEventManager.pdf,4.2.2

[5] AUTOSAR_SWS_NVRAMManager.pdf,R19-11

功能描述

信息存储与恢复功能

信息存储与恢复功能介绍

FOTA模块在完成一次数据安装后,会通过NvM模块将更新后的相关地址信息等存储到Nv数据块中。在ECU启动阶段,当NvM模块readall完成之后,通过调用FOTA模块的预初始化函数,将上一个电源周期存储的相关地址信息恢复到FOTA模块,以便FOTA Master继续进行相应的数据传输与安装。

信息存储与恢复功能实现

FOTA模块在NvM模块readall完成之后被调用预初始化函数。在NvM模块数据正确情况下恢复以前存储的地址信息,在NvM模块数据不正确情况下重新初始化相应的地址信息。在FOTA进行预初始化的时候,需要通过NVM的Nvm_GetErrorStatus接口获取相关block的状态信息,当读取成功时(状态为NVM_REQ_OK),恢复读取到的数据,读取不成功时(状态不为NVM_REQ_OK),使用默认值进行初始化。在FOTA状态进行更新时,需要及时更新存储的数据,通知NVM进行写操作。当FOTA需要进行存储的时候,调用Nvm_WriteBlock接口进行存储。

数据下载功能

数据下载功能介绍

数据下载是指新的ECU软件从FOTA主ECU转移到FOTA目标ECU。由于一次性将整个ECU软件完全转移到FOTA目标ECU是不方便的,所以这个过程是使用数据块来实现的。这意味着安装过程甚至可以在几个驱动周期内处于活动状态。当没有更多的数据块需要传输到FOTA目标ECU,并且所有数据块都被成功地写入到内存堆栈时,安装过程就完成了。此外,安装过程还包括由FOTA目标ECU中的程序flash驱动程序将软件实际写入到不活动的目标分区。

数据下载功能实现

FOTA在进行预初始化后,会进入到IDLE状态,然后通过FOTA Master的控制进行初始化后会进入到INIT状态,当FOTA Master进行下载请求后进入到WAIT状态。在WAIT状态下,FOTA Master进行数据下载是进入到PROCESSING状态,处理完成后回到WAIT状态,当FOTA Master请求退出下载时回到IDLE状态,当所有数据下载完成后会进入到READY状态。在READY状态下,可以选择进行校验(进入VERIFY状态,校验完成后会进入激活状态)或者进行激活,进入到ACTIVATE状态。此外FOTA还有一个ERROR状态,在任何时候都可能进入,进入ERROR状态后需要进行ROLLBACK。

断点续传功能

断点续传功能介绍

由于在整个下载过程中可能会存在多次中断,需要重新下载,并擦除一定的flash进行后续的写,所以提供断点的获取,包括默认断点和自定义配置断点两种。

功能实现

默认断点是将刷的的block的起始地址进行反馈,自定义断点则是根据刷写的实际位置进行检索,找到最匹配的自定义断点进行反馈。

源文件描述

表3-1 FiM组件文件描述

文件

说明

CDD_FOTA_Cfg.h

定义FOTA模块预编译时用到的配置参数。

CDD_FOTA_Cfg.c

定义FOTA模块配置相关的配置参数。

CDD_FOTA_CallOut.c

定义FOTA模块callout函数。

CDD_FOTA.h

FOTA模块头文件,包 含了API函数的扩展声明并定义了端口的数据结构。

CDD_FOTA .c

FOTA模块源文件,包含了API函数的实现。

CDD_FOTA _MemMap.h

包含FOTA模块的内存抽象。

CDD_FOTA _Types.h

包含FOTA模块需要使用的类型定义。

image2

图3-1 FOTA组件文件交互关系图

API接口

类型定义

CDD_FOTA_WriteMemoryRangeType类型定义

名称

CDD_FOTA_WriteMemoryRangeType

类型

uint32 WriteMemoryRangeLow;

uint32 WriteMemoryRangeHigh;

uint32 length;

boolean UncompressEnable;

范围

描述

数据下载地址范围

CDD_FOTA_StatusType类型定义

名称

CDD_FOTA_StatusType

类型

CDD_FOTA_IDLE /CDD_FOTA_INIT/CDD_FOTA_WAIT/CDD_FOTA_PROCESSING/CDD_FOT A_READY/CDD_FOTA_VERIFY/CDD_FOTA_ACTIVATE/CDD_FOTA_ERROR

范围

描述

FOTA状态

CDD_FOTA_MemoryInfoType类型定义

名称

CDD_FOTA_MemoryInfoType

类型

uint32 MemoryAddress;

uint32 MemorySize;

P2CONST(uint8, AUTOMATIC, CDD_FOTA_VAR) MemoryData;

范围

描述

与DCM交互的参数合集

输入函数描述

输入模块

API

NVM

NvM_GetErrorStatus

NvM_WriteBlock

DET

Det_ReportError

静态接口函数定义

CDD_FOTA_PreInit函数定义

函数名称:

CDD_FOTA_PreInit

函数原型:

FUNC(void, CDD_FOTA_CODE) CDD_FOTA_PreInit(void)

服务编号:

0x00

同步/异步:

同步

是 否可重入:

输入参数:

值 域:

输入 输出参数:

输出参数:

返回值:

功能概述:

FOTA模块预初始化

CDD_FOTA_Init函数定义

函数名称:

CDD_FOTA_Init

函数原型:

FUN C(Std_ReturnType, CDD_FOTA_CODE)

CDD_FO TA_Init(P2VAR(CDD _FOTA_StatusType, AUTOMATIC, CDD_FOTA_VAR) FOTAStatus)

服务编号:

0x01

同步/异步:

同步

是 否可重入:

输入参数:

值域:

输入 输出参数:

输出参数:

FOTAStatus

返回值:

Std_ReturnType

功能概述:

初始化FOTA

CDD_FOTA_GetFOTAStatus函数定义

函数名称:

CDD_F OTA_GetFOTAStatus

函数原型:

FUN C(Std_ReturnType, CDD_FOTA_CODE) CDD_FOTA_GetFOT AStatus(P2VAR(CDD _FOTA_StatusType, AUTOMATIC, CDD_FOTA_VAR) FOTAStatus)

服务编号:

0x02

同步/异步:

同步

是 否可重入:

输入参数:

值域:

输入 输出参数:

输出参数:

FOTAStatus

返回值:

Std_ReturnType

功能概述:

获取FOTA状态

CDD_FOTA_GetAppVersion函数定义

函数名称:

CDD_F OTA_GetAppVersion

函数原型:

FUN C(Std_ReturnType, CDD_FOTA_CODE) C DD_FOTA_GetAppVer sion(P2VAR(uint8, AUTOMATIC, CDD_FOTA_VAR) AppVersion)

服务编号:

0x10

同步/异步:

同步

是 否可重入:

输入参数:

值域:

输入 输出参数:

输出参数:

AppVersion

返回值:

Std_ReturnType

功能概述:

获取APP版本信息

CDD_FOTA_SetAppVersion函数定义

函数名称:

CDD_F OTA_SetAppVersion

函数原型:

FUN C(Std_ReturnType, CDD_FOTA_CODE) CDD _FOTA_SetAppVersi on(P2CONST(uint8, AUTOMATIC, CDD_FOTA_VAR) AppVersion)

服务编号:

0x11

同步/异步:

同步

是 否可重入:

输入参数:

AppVersion

值域:

输入 输出参数:

输出参数:

返回值:

Std_ReturnType

功能概述:

设置APP版本信息

CDD_FOTA_GetFOTAProcessedInfo函数定义

函数名称:

CDD_FOTA_Get FOTAProcessedInfo

函数原型:

FUN C(Std_ReturnType, CDD_FOTA_CODE) CDD_FOTA_ GetFOTAProcessedI nfo(P2VAR(uint32, AUTOMATIC, CDD_FOTA_VAR) MemoryAddress)

服务编号:

0x03

同步/异步:

同步

是 否可重入:

输入参数:

值域:

输入 输出参数:

输出参数:

返回值:

Std_ReturnType

功能概述:

获取编程信息

CDD_FOTA_GetFOTAbreakpointInfo函数定义

函数名称:

CDD_FOTA_GetF OTAbreakpointInfo

函数原型:

FUN C(Std_ReturnType, CDD_FOTA_CODE)

CDD_FOTA_G etFOTAbreakpointI nfo(P2VAR(uint32, AUTOMATIC, CDD_FOTA_VAR) MemoryAddress)

服务编号:

0x0F

同步/异步:

同步

是 否可重入:

输入参数:

值域:

输入 输出参数:

输出参数:

MemoryAddress

返回值:

Std_ReturnType

功能概述:

获取断点地址信息

CDD_FOTA_Processdownload函数定义

函数名称:

CDD_FOT A_Processdownload

函数原型:

FUN C(Std_ReturnType, CDD_FOTA_CODE) CDD_FOTA_Proce ssdownload(uint32 MemoryAddress,

uint32 MemorySize,

P2VAR(uint32, AUTOMATIC, CDD_FOTA_VAR) BlockLength,

P 2VAR(Dcm_Negative ResponseCodeType, AUTOMATIC, CDD_FOTA_VAR) ErrorCode)

服务编号:

0x0A

同步/异步:

同步

是 否可重入:

输入参数:

MemoryAddress

值域:

uint32

MemorySize

值域:

uint32

输入 输出参数:

输出参数:

ErrorCode

BlockLength

返回值:

Std_ReturnType: E_OK: 请求成功 E_NOT_OK: 请求失败

功能概述:

处理数据请求下载

CDD_FOTA_StopProtocol函数定义

函数名称:

CDD_ FOTA_StopProtocol

函数原型:

FUNC(Std_ReturnTy pe,CDD_FOTA_CODE) CDD_F OTA_StopProtocol(

Dcm_ProtocolType ProtocolID)

服务编号:

0x0c

同步/异步:

同步

是 否可重入:

输入参数:

ProtocolID

值域:

Enum

输入 输出参数:

输出参数:

返回值:

Std_ReturnType

功能概述:

协议停止回调接口

CDD_FOTA_CancelInstall函数定义

函数名称:

CDD_F OTA_CancelInstall

函数原型:

FUNC(Std_ReturnTy pe,CDD_FOTA_CODE) CDD_FOTA_Ca ncelInstall(void)

服务编号:

0x0D

同步/异步:

同步

是 否可重入:

输入参数:

值域:

输入 输出参数:

输出参数:

返回值:

Std_ReturnType

功能概述:

请求取消下载安装

CDD_FOTA_ProcessTransferDataWrite函数定义

函数名称:

CDD_FOTA_Process TransferDataWrite

函数原型:

FUNC(Dcm_Retur nWriteMemoryType, CDD_FOTA_CODE) CDD_FOTA_ProcessT ransferDataWrite(

Dcm_OpStatusType OpStatus,

CDD_FO TA_MemoryInfoType CDD _FOTA_MemoryInfo,

P 2VAR(Dcm_Negative ResponseCodeType, AUTOMATIC, CDD_FOTA_VAR) ErrorCode)

服务编号:

0x04

同步/异步:

异步

是 否可重入:

输入参数:

OpStatus

值域:

Enum

输入 输出参数:

CD D_FOTA_MemoryInfo

输出参数:

ErrorCode

返回值:

Dcm_Retu rnWriteMemoryType

功能概述:

处理下载的数据

CDD_FOTA_Erase函数定义

函 数名称:

CDD_FOTA_Erase

函 数原型:

FUNC(Std_ReturnType, CDD_FOTA_CODE) CDD_FOTA_Erase(

P2CONST(uint8, AUTOMATIC, DCM_VAR) InBuffer,

P2VAR(Dcm _NegativeResponseCodeType, AUTOMATIC, DCM_VAR) ErrorCode)

服 务编号:

0x0E

同步 /异步:

异步

是否 可重入:

输 入参数:

InBuffer

值 域:

输入输 出参数:

输 出参数:

ErrorCode

返回值:

Std_ReturnType

功 能概述:

请求擦除

CDD_FOTA_ProcessExit函数定义

函 数名称:

CDD_FOTA_ProcessExit

函 数原型:

FUNC(Std_ReturnType, CDD_FOTA_CODE) CDD_FOTA_ProcessExit(

P2CONST(uint8, AUTOMATIC, CDD_FOTA_VAR) trans ferRequestParameterRecord,

uint32 transferR equestParameterRecordSize,

P2VAR(uint32, AUTOMATIC, CDD_FOTA_VAR) transferRe sponseParameterRecordSize,

P2VAR(Dcm _NegativeResponseCodeType, AUTOMATIC, CDD_FOTA_VAR) ErrorCode)

服 务编号:

0x0B

同步 /异步:

同步

是否 可重入:

输 入参数:

tran sferRequestParameterRecord

值 域:

uint8

transfer RequestParameterRecordSize

值 域:

uint32

输入输 出参数:

输 出参数:

transferR esponseParameterRecordSize

ErrorCode

返回值:

Std_ReturnType

功 能概述:

请求退出下载

CDD_FOTA_SetFOTAActivate函数定义

函数名称:

CDD_FOT A_SetFOTAActivate

函数原型:

FUN C(Std_ReturnType, CDD_FOTA_CODE) CDD_FOTA_SetF OTAActivate(void)

服务编号:

0x05

同步/异步:

同步

是 否可重入:

输入参数:

值域:

输入 输出参数:

输出参数:

返回值:

Std_ReturnType: E_OK: 请求成功 E_NOT_OK: 请求失败

功能概述:

设置 FOTA进入激活状态

CDD_FOTA_SetFOTARollback函数定义

函数名称:

CDD_FOT A_SetFOTARollback

函数原型:

FUN C(Std_ReturnType, CDD_FOTA_CODE) CDD_FOTA_SetF OTARollback(void)

服务编号:

0x06

同步/异步:

同步

是 否可重入:

输入参数:

值域:

输入 输出参数:

输出参数:

返回值:

Std_ReturnType

功能概述:

设置 FOTA进入回滚状态

CDD_FOTA_Verification函数定义

函数名称:

CDD_ FOTA_Verification

函数原型:

FUN C(Std_ReturnType, CDD_FOTA_CODE) CDD_F OTA_Verification(

P2VAR(boolean, AUTOMATIC, DEM_VAR) V erificationStatus

)

服务编号:

0x07

同步/异步:

同步

是 否可重入:

输入参数:

值域:

输入 输出参数:

输出参数:

V erificationStatus

返回值:

Std_ReturnType

功能概述:

请求FOTA进行校验

CDD_FOTA_MainFunction函数定义

函数名称:

CDD_ FOTA_MainFunction

函数原型:

FUNC(void, DEM_CODE) CDD_FOTA_M ainFunction(void)

服务编号:

0x08

同步/异步:

同步

是 否可重入:

输入参数:

值域:

输入 输出参数:

输出参数:

返回值:

功能概述:

F OTA任务处理主函数

可配置函数定义

无。

配置

FOTAGeneral

image3

图5-1 FOTAGeneral容器配置图

表5-1 FOTAGeneral属性描述

UI名称

描述

FOTAVe rsionInfoApi

取值范围

True/False

默认取值

False

参数描述

版本信息 获取接口使能开关

依赖关系

FOTADe vErrorDetect

取值范围

True/False

默认取值

False

参数描述

DET检查使能开关

依赖关系

FOTAUnco mpressEnable

取值范围

True/False

默认取值

False

参数描述

解压缩使能开关

依赖关系

FOTAUncompre ssBufferSize

取值范围

0 .. 4,294,967,295

默认取值

0

参数描述

解压 缩缓存buffer大小

依赖关系

FOTAUncomp ressEnable为true

FOTACrc

取值范围

CDD_FOTA_CRC8/CD D_FOTA_CRC8H2F/C DD_FOTA_CRC16/CD D_FOTA_CRC16ARC/ CDD_FOTA_CRC32/C DD_FOTA_CRC32P4/ CDD_FOTA_CRC64/C DD_FOTA_NONE_CRC

默认取值

CDD _FOTA_CRC8

参数描述

CRC计算类型

依赖关系

FOTAC rcBy37Enable

取值范围

True/False

默认取值

False

参数描述

CRC计算是 否通过37服务传入

依赖关系

FOTAVirificC alloutEnable

取值范围

True/False

默认取值

False

参数描述

校验 回调接口使能开关

依赖关系

FOT AProgramSize

取值范围

0.. 4294836225

默认取值

0

参数描述

一次编程大小

依赖关系

F OTAEraseSize

取值范围

0.. 4294836225

默认取值

0

参数描述

一次擦除大小

依赖关系

FOTAProgr amSizeOneReq

取值范围

0.. 4294836225

默认取值

0

参数描述

一次36请求缓 存的下载数据大小

依赖关系

FOTAVe rificCallout

取值范围

默认取值

参数描述

校验 回调函数配置接口

依赖关系

FOTAVirificCal loutEnable为true

FOTA JumpAddressA

取值范围

0.. 4294836225

默认取值

0

参数描述

APP A的跳转地址

依赖关系

FOTA JumpAddressB

取值范围

0.. 4294836225

默认取值

0

参数描述

APP B的跳转地址

依赖关系

FOTAHeaderF ileInclusion

取值范围

默认取值

参数描述

头文件包含

依赖关系

FOTANvR amBlockIdRef

取值范围

默认取值

参数描述

存储NV块的关联

依赖关系

FO TAProtocolId

取值范围

默认取值

参数描述

DCM协议ID关联

依赖关系

FOTAConfigSet

FOTAWriteMemoryAppA

image4

图5-2 FOTAWriteMemoryAppA容器配置图

表5-2 FOTAWriteMemoryAppA属性描述

UI名称

描述

FOTAWriteMe moryRangeRef

取值范围

默认取值

参数描述

DCM中 写地址范围的关联

依赖关系

F OTABlockUnco mpressEnable

取值范围

True/False

默认取值

False

参数描述

当前 块是否进行解压缩

依赖关系

FOTA UncompressEnable

FOTAWriteMemoryAppB

image5

图5-3 FOTAWriteMemoryAppB容器配置图

表5-3 FOTAWriteMemoryAppB属性描述

UI名称

描述

FOTAWriteMe moryRangeRef

取值范围

默认取值

参数描述

DCM中 写地址范围的关联

依赖关系

F OTABlockUnco mpressEnable

取值范围

True/False

默认取值

False

参数描述

当前 块是否进行解压缩

依赖关系

FOTA UncompressEnable

FOTABreakpoint

image6

图5-4 FOTABreakpoint容器配置图

表5-4 FOTABreakpoint属性描述

UI名称

描述

FOTAWriteMe moryRangeRef

取值范围

0 .. 4,294,967,295

默认取值

0

参数描述

断点,不配 置的情况下使用块 起始地址作为断点

依赖关系

FOTAWriteMemorySBL

image7

图5-5 FOTAWriteMemorySBL容器配置图

表5-5 FOTAWriteMemorySBL属性描述

UI名称

描述

FOTAWriteMe moryRangeRef

取值范围

默认取值

参数描述

DCM中 写地址范围的关联

依赖关系

F OTABlockUnco mpressEnable

取值范围

True/False

默认取值

False

参数描述

当前 块是否进行解压缩

依赖关系

FOTA UncompressEnable