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

图 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, R19-11

[4] AUTOSAR_SWS_DiagnosticEventManager.pdf, R19-11

[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的起始地址进行反馈,自定义断点则是根据刷写的实际位置进行检索,找到最匹配的自定义断点进行反馈。

源文件描述

表 FiM组件文件描述

文件

说明

CDD_FOTA_Cfg.h

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

CDD_FOTA_Cfg.c

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

CDD_FOTA_CallOut.c

定义FOTA模块callout函数。

CDD_FOTA_CallOut.h

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

CDD_FOTA.h

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

CDD_FOTA .c

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

CDD_FOTA _MemMap.h

包含FOTA模块的内存抽象。

CDD_FOTA _Types.h

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

image2

图 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_ModeType类型定义

名称

CDD_FOTA_ModeType

类型

typedef enum

{

CDD_FOTA_MODE_UNINIT,

CDD_FOTA_MODE_INIT

} CDD_FOTA_ModeType;

范围

描述

FOTA模块的状态类型

CDD_FOTA_ProgramInfoType类型定义

名称

CDD_FOTA_ProgramInfoType

类型

uint32 ProcessedAddress;

uint32 ProgramConter;

uint8 CurNeedProgramApp;

范围

描述

当前已安装的软件相关信息

CDD_FOTA_CancelInstallType类型定义

名称

CDD_FOTA_CancelInstallType

类型

typedef enum

{

CDD_FOTA_NO_ERASE,

CDD_FOTA_ERASE_A,

CDD_FOTA_ERASE_B

} CDD_FOTA_CancelInstallType;

范围

描述

FOTA模块取消安装的类型

输入函数描述

输入模块

API

NVM

NvM_GetErrorStatus

NvM_WriteBlock

DET

Det_ReportError

静态接口函数定义

CDD_FOTA_PreInit函数定义

函数名称:

CDD_FOTA_PreInit

函数原型:

void CDD_FOTA_PreInit(void)

服务编号:

0x00

同步/异步:

同步

是 否可重入:

输入参数:

值 域:

输入 输出参数:

输出参数:

返回值:

功能概述:

FOTA模块预初始化

CDD_FOTA_Init函数定义

函数名称:

CDD_FOTA_Init

函数原型:

Std_ReturnType C DD_FOTA_Init(CDD _FOTA_StatusType* FOTAStatus)

服务编号:

0x01

同步/异步:

同步

是 否可重入:

输入参数:

值域:

输入 输出参数:

输出参数:

FOTAStatus

返回值:

Std_ReturnType

功能概述:

初始化FOTA

CDD_FOTA_GetFOTAStatus函数定义

函数名称:

CDD_F OTA_GetFOTAStatus

函数原型:

Std_ReturnType CDD_FOTA_G etFOTAStatus(CDD _FOTA_StatusType* FOTAStatus)

服务编号:

0x02

同步/异步:

同步

是 否可重入:

输入参数:

值域:

输入 输出参数:

输出参数:

FOTAStatus

返回值:

Std_ReturnType

功能概述:

获取FOTA状态

CDD_FOTA_GetAppVersion函数定义

函数名称:

CDD_F OTA_GetAppVersion

函数原型:

Std_ReturnType CDD_FOTA_GetA ppVersion(uint8* AppVersion)

服务编号:

0x10

同步/异步:

同步

是 否可重入:

输入参数:

值域:

输入 输出参数:

输出参数:

AppVersion

返回值:

Std_ReturnType

功能概述:

获取APP版本信息

CDD_FOTA_SetAppVersion函数定义

函数名称:

CDD_F OTA_SetAppVersion

函数原型:

Std_ReturnType CDD_FOTA_Se tAppVersion(const uint8* AppVersion)

服务编号:

0x11

同步/异步:

同步

是 否可重入:

输入参数:

AppVersion

值域:

输入 输出参数:

输出参数:

返回值:

Std_ReturnType

功能概述:

设置APP版本信息

CDD_FOTA_GetFOTAProcessedInfo函数定义

函数名称:

CDD_FOTA_Get FOTAProcessedInfo

函数原型:

Std_ReturnType CDD _FOTA_GetFOTAProce ssedInfo(uint32* MemoryAddress)

服务编号:

0x03

同步/异步:

同步

是 否可重入:

输入参数:

值域:

输入 输出参数:

输出参数:

返回值:

Std_ReturnType

功能概述:

获取编程信息

CDD_FOTA_GetFOTAbreakpointInfo函数定义

函数名称:

CDD_FOTA_GetF OTAbreakpointInfo

函数原型:

Std_ReturnType CDD_F OTA_GetFOTAbreakp ointInfo(uint32* MemoryAddress)

服务编号:

0x0F

同步/异步:

同步

是 否可重入:

输入参数:

值域:

输入 输出参数:

输出参数:

MemoryAddress

返回值:

Std_ReturnType

功能概述:

获取断点地址信息

CDD_FOTA_Processdownload函数定义

函数名称:

CDD_FOT A_Processdownload

函数原型:

Std_ReturnType CDD_FOTA _Processdownload(

uint32 MemoryAddress,

uint32 MemorySize,

uint32* BlockLength,

Dcm_NegativeR esponseCodeType* ErrorCode)

服务编号:

0x0A

同步/异步:

同步

是 否可重入:

输入参数:

MemoryAddress

值域:

uint32

MemorySize

值域:

uint32

输入 输出参数:

输出参数:

ErrorCode

BlockLength

返回值:

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

功能概述:

处理数据请求下载

CDD_FOTA_StopProtocol函数定义

函数名称:

CDD _FOTA_StopProtocol

函数原型:

Std_ReturnType CDD _FOTA_StopProtocol (Dcm_ProtocolType ProtocolID)

服务编号:

0x0c

同步/异步:

同步

是 否可重入:

输入参数:

ProtocolID

值域:

Enum

输入 输出参数:

输出参数:

返回值:

Std_ReturnType

功能概述:

协议停止回调接口

CDD_FOTA_CancelInstall函数定义

函数名称:

CDD_F OTA_CancelInstall

函数原型:

Std_ReturnType CDD_FOTA_Ca ncelInstall(void)

服务编号:

0x0D

同步/异步:

同步

是 否可重入:

输入参数:

值域:

输入 输出参数:

输出参数:

返回值:

Std_ReturnType

功能概述:

请求取消下载安装

CDD_FOTA_ProcessTransferDataWrite函数定义

函数名称:

CDD_FOTA_Process TransferDataWrite

函数原型:

Dcm_Retu rnWriteMemoryType CDD_FOTA_ProcessT ransferDataWrite(

Dcm_OpStatusType OpStatus,

uint32 MemoryAddress,

uint32 MemorySize,

uint8* MemoryData,

Dcm_NegativeR esponseCodeType* ErrorCode)

服务编号:

0x04

同步/异步:

异步

是 否可重入:

输入参数:

OpStatus

值域:

Enum

输入 输出参数:

CD D_FOTA_MemoryInfo

输出参数:

ErrorCode

返回值:

Dcm_Retu rnWriteMemoryType

功能概述:

处理下载的数据

CDD_FOTA_Erase函数定义

函 数名称:

CDD_FOTA_Erase

函 数原型:

Std_ReturnType CDD_FOTA_Erase(const uint8* InBuffer, Dcm _NegativeResponseCodeType* ErrorCode)

服 务编号:

0x0E

同步 /异步:

异步

是否 可重入:

输 入参数:

InBuffer

值 域:

输入输 出参数:

输 出参数:

ErrorCode

返回值:

Std_ReturnType

功 能概述:

请求擦除

CDD_FOTA_ProcessExit函数定义

函 数名称:

CDD_FOTA_ProcessExit

函 数原型:

Std_ReturnType CDD_FOTA_ProcessExit(

const uint8* trans ferRequestParameterRecord,

uint32 transferR equestParameterRecordSize,

uint32* transferRe sponseParameterRecordSize,

Dcm _NegativeResponseCodeType* ErrorCode)

服 务编号:

0x0B

同步 /异步:

同步

是否 可重入:

输 入参数:

tran sferRequestParameterRecord

值 域:

uint8

transfer RequestParameterRecordSize

值 域:

uint32

输入输 出参数:

输 出参数:

transferR esponseParameterRecordSize

ErrorCode

返回值:

Std_ReturnType

功 能概述:

请求退出下载

CDD_FOTA_SetFOTAActivate函数定义

函数名称:

CDD_FOT A_SetFOTAActivate

函数原型:

Std_ReturnType CDD_FOTA_SetF OTAActivate(void)

服务编号:

0x05

同步/异步:

同步

是 否可重入:

输入参数:

值域:

输入 输出参数:

输出参数:

返回值:

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

功能概述:

设置 FOTA进入激活状态

CDD_FOTA_SetFOTARollback函数定义

函数名称:

CDD_FOT A_SetFOTARollback

函数原型:

Std_ReturnType CDD_FOTA_SetF OTARollback(void)

服务编号:

0x06

同步/异步:

同步

是 否可重入:

输入参数:

值域:

输入 输出参数:

输出参数:

返回值:

Std_ReturnType

功能概述:

设置 FOTA进入回滚状态

CDD_FOTA_Verification函数定义

函数名称:

CDD _FOTA_Verification

函数原型:

Std_ReturnType CDD_FOTA_Verif ication(boolean* Ve rificationStatus)

服务编号:

0x07

同步/异步:

同步

是 否可重入:

输入参数:

值域:

输入 输出参数:

输出参数:

V erificationStatus

返回值:

Std_ReturnType

功能概述:

请求FOTA进行校验

CDD_FOTA_MainFunction函数定义

函数名称:

CDD _FOTA_MainFunction

函数原型:

void CDD_FOTA_M ainFunction(void)

服务编号:

0x08

同步/异步:

同步

是 否可重入:

输入参数:

值域:

输入 输出参数:

输出参数:

返回值:

功能概述:

F OTA任务处理主函数

可配置函数定义

CDD_FOTA_UncompressCallout函数定义

函数名称:

CDD_FOTA _UncompressCallout

函数原型:

Std_ReturnType CDD_FOTA_Uncomp ressCallout(const uint8* InData, uint32 InSize, uint8* OutData, uint32* OutSize)

服务编号:

N/A

同步/异步:

同步

是 否可重入:

输入参数:

值域:

输入 输出参数:

输出参数:

返回值:

Std_ReturnType

功能概述:

FOTA模 块解压缩回调接口

CDD_FOTA_GetUncompressResCallout函数定义

函数名称:

CDD_FOTA_GetUnc ompressResCallout

函数原型:

Std_ReturnType CDD _FOTA_GetUncompres sResCallout(void)

服务编号:

N/A

同步/异步:

同步

是 否可重入:

输入参数:

值域:

输入 输出参数:

输出参数:

返回值:

功能概述:

FOT A模块获取解压缩的 任务结果回调接口

配置

FOTAGeneral

image3

图 FOTAGeneral容器配置图

表 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

FOTAUn compressSize

取值范围

0 .. 4,294,967,295

参数描述

解压缩大小

依赖关系

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的跳转地址

依赖关系

FOTAMainFu nctionPeriod

取值范围

0.. INF

参数描述

FOTA 模块的主函数周期

依赖关系

FOTAHeaderF ileInclusion

取值范围

默认取值

参数描述

头文件包含

依赖关系

FOTANvR amBlockIdRef

取值范围

默认取值

参数描述

存储NV块的关联

依赖关系

FO TAProtocolId

取值范围

默认取值

参数描述

DCM协议ID关联

依赖关系

FOTAConfigSet

FOTABreakpoint

image4

图 FOTABreakpoint容器配置图

表 FOTABreakpoint属性描述

UI名称

描述

FOTAWriteMe moryRangeRef

取值范围

0 .. 4,294,967,295

默认取值

0

参数描述

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

依赖关系

FOTAWriteMemoryAppA

image5

图 FOTAWriteMemoryAppA容器配置图

表 FOTAWriteMemoryAppA属性描述

UI名称

描述

FOTAWriteMe moryRangeRef

取值范围

默认取值

参数描述

DCM中 写地址范围的关联

依赖关系

F OTABlockUnco mpressEnable

取值范围

True/False

默认取值

False

参数描述

当前 块是否进行解压缩

依赖关系

FOTA UncompressEnable

FOTAWriteMemoryAppB

image6

图 FOTAWriteMemoryAppB容器配置图

表 FOTAWriteMemoryAppB属性描述

UI名称

描述

FOTAWriteMe moryRangeRef

取值范围

默认取值

参数描述

DCM中 写地址范围的关联

依赖关系

F OTABlockUnco mpressEnable

取值范围

True/False

默认取值

False

参数描述

当前 块是否进行解压缩

依赖关系

FOTA UncompressEnable

FOTAWriteMemorySBL

image7

图 FOTAWriteMemorySBL容器配置图

表 FOTAWriteMemorySBL属性描述

UI名称

描述

FOTAWriteMe moryRangeRef

取值范围

默认取值

参数描述

DCM中 写地址范围的关联

依赖关系

F OTABlockUnco mpressEnable

取值范围

True/False

默认取值

False

参数描述

当前 块是否进行解压缩

依赖关系

FOTA UncompressEnable