AUTOSAR进阶图解==>AUTOSAR_SWS_FlexRayARTransportLayer
AUTOSAR FlexRay AUTOSAR Transport Layer详解
目录
- 概述
- 功能简介
- 技术背景
- 架构设计
- AUTOSAR分层架构中的位置
- 内部组件结构
- 通信机制
- 分段传输流程
- 帧结构
- 配置模型
- 配置参数和容器
- 配置限制和依赖关系
- API接口
- API概览
- 使用示例
- 总结
1. 概述
1.1 功能简介
FlexRay AUTOSAR Transport Layer (FrArTp)是AUTOSAR经典平台中的一个基础软件模块,用于在FlexRay总线上实现大数据量的可靠传输。该模块位于PDU Router和FlexRay Interface之间,主要负责对不适合单个FlexRay L-SDU的消息进行分段和重组处理。
FrArTp的主要功能包括:
- 数据分段和重组:在发送方向将大型N-SDU分段为多个N-PDU,在接收方向将多个N-PDU重组为完整的N-SDU
- 流量控制:控制数据传输的流量,防止接收方缓冲区溢出
- 确认机制:可选配置的确认功能,支持带确认无重试和带确认有重试两种模式
- 错误检测:检测传输过程中的错误并采取相应措施
- 地址信息管理:支持1字节和2字节寻址方式,最多可支持65536个节点
- 连接管理:支持1:1(点对点)和1:n(点对多点)连接方式
- ISO 15765-2兼容:基于汽车领域广泛使用的ISO 15765-2(CAN诊断)标准设计,可配置为完全兼容
1.2 技术背景
AUTOSAR决定基于现有标准来设计基础软件模块,FrArTp基于国际标准ISO 15765-2(CAN诊断)进行设计。这种设计思路既保持了与成熟标准的兼容性,又通过静态配置增加了额外功能选项(如确认机制),从而使模块既能满足标准需求,又能支持更丰富的应用场景。
FrArTp不仅可用于车辆诊断系统,还可用于需要传输层协议的FlexRay基础系统间的通信。值得注意的是,从AUTOSAR 4.0开始,标准FlexRay传输层与ISO 10681-2兼容,而FrArTp仍保持与ISO 15765-2的兼容性,用户需要谨慎选择适合其应用场景的规范。
2. 架构设计
2.1 AUTOSAR分层架构中的位置
FlexRay AUTOSAR Transport Layer在AUTOSAR分层架构中位于通信服务层,它连接上层的PDU Router和下层的FlexRay Interface。
这个架构图展示了FrArTp在AUTOSAR层次结构中的位置和关系:
-
应用层:
- AUTOSAR COM:负责处理应用层的通信需求,提供I-PDU给下层
- DCM:诊断通信管理器,提供诊断服务的I-PDU
-
通信服务层:
- PDU Router:根据I-PDU标识符将数据路由到不同通信协议,决定是否使用传输协议
- FlexRay AUTOSAR Transport Layer:处理大数据的分段与重组,实现可靠传输
- Network Management:负责网络管理功能
- XCP:通用校准协议,用于ECU参数校准和测量
-
通信硬件抽象层:
- FlexRay Interface:提供访问FlexRay总线的机制,抽象FlexRay控制器位置,路由接收到的PDU到上层模块
-
硬件层:
- FlexRay Driver:直接与FlexRay控制器硬件交互的驱动程序
通信流程中的数据单元转换:
- 应用层生成I-PDUs传递给PDU Router
- PDU Router将I-PDUs转换为N-SDUs传递给FrArTp或直接传递给FlexRay Interface
- FrArTp将N-SDUs分段为N-PDUs/L-SDUs传递给FlexRay Interface
- FlexRay Interface通过FlexRay Driver将数据帧发送到物理总线
2.2 内部组件结构
FlexRay AUTOSAR Transport Layer内部由多个功能组件组成,每个组件负责特定功能。
FrArTp内部组件及其功能:
-
传输管理:
- N-SDU分段器:将大型N-SDU分段为多个N-PDU
- N-SDU发送缓冲区:存储等待发送的数据
- 发送控制:管理数据发送过程,处理发送确认和取消
-
接收管理:
- N-SDU重组器:将接收到的多个N-PDU重组为完整N-SDU
- N-SDU接收缓冲区:存储接收到的数据片段
- 接收控制:管理接收过程,支持接收取消
-
协议控制:
- 流量控制管理:实现ISO 15765-2协议中的流量控制机制
- 确认和重试管理:处理确认帧和重试逻辑
- 错误处理:检测和处理传输错误
- 定时器管理:管理各种超时监控
-
连接管理:
- Channel管理:管理通道配置和属性
- 地址管理:处理1字节或2字节寻址信息
-
配置管理:管理模块的各项配置参数
这种模块化设计使FrArTp能够灵活应对不同的通信需求,同时保持良好的可维护性和可扩展性。
3. 通信机制
3.1 分段传输流程
当消息太大无法放入单个帧时,FrArTp会执行分段传输。下图展示了带确认无重试模式下的分段传输流程。
分段传输流程详解:
-
传输初始化:
- PDU Router调用
FrArTp_Transmit
请求传输N-SDU - FrArTp发送端分析数据大小,确定需要分段传输
- 发送First Frame(FF),包含消息总长度和首批数据
- PDU Router调用
-
流量控制:
- 接收端收到FF后,准备接收缓冲区
- 发送Flow Control(FC)帧,包含流状态(FS)、块大小(BS)和最小帧间隔(STmin)
- 发送端根据FC帧中的参数控制后续传输
-
数据块传输:
- 发送端按照块大小发送多个Consecutive Frame(CF)帧,每帧包含序列号(SN)和部分数据
- 块发送完成后,接收端发送新的FC帧请求下一个块
-
传输确认:
- 最后一个块传输完成后,接收端发送Acknowledgement Frame(AF)帧,表示正面或负面确认
- 发送端根据确认结果通知上层传输结果
这种分段传输机制确保了大型消息能够可靠地通过FlexRay网络传输,流量控制机制防止了接收方缓冲区溢出,确认机制提高了传输的可靠性。
3.2 帧结构
FrArTp定义了多种帧类型,用于实现不同的传输功能。所有帧都遵循一定的结构规则。
FrArTp帧结构包括以下关键元素:
-
通用结构:
- 所有帧都包含地址信息、协议控制信息(PCI)和数据部分
- 帧中未使用的空间填充为0
-
地址信息:
- 1字节寻址:1字节目标地址(TA)和1字节源地址(SA),最多支持256个接收者
- 2字节寻址:2字节TA和2字节SA,最多支持65536个接收者,采用大端模式传输
-
主要帧类型:
- 单帧(SF):用于传输适合单帧的小型消息
- ISO 15765-2单帧(SF-I):帧类型(FT)=0x0,数据长度(DL)=1-7字节
- 扩展单帧(SF-E):帧类型(FT)=0x4,数据长度(DL)=0-254字节
- 首帧(FF):用于启动分段传输,包含消息总长度
- ISO 15765-2首帧(FF-I):帧类型(FT)=0x1,数据长度(DL)=0-4095字节
- 扩展首帧(FF-E):帧类型(FT)=0x5,数据长度(DL)=0-2^32-1字节
- 连续帧(CF):用于传输分段数据,包含序列号
- 普通连续帧:帧类型(FT)=0x2,序列号(SN)=0-15
- 重试连续帧(CF2):帧类型(FT)=0x6,用于区分不同数据块的重试
- 流控帧(FC):用于控制数据流,包含流状态、块大小和最小帧间隔
- 确认帧(AF):用于确认接收状态,包含确认值(正面/负面)和序列号
- 单帧(SF):用于传输适合单帧的小型消息
-
流状态(FS)值:
- CTS(0):可继续发送
- WT(1):等待
- OVFLW(2):缓冲区溢出
这种精心设计的帧结构使FrArTp能够高效处理不同类型的数据传输需求,同时保持与ISO 15765-2标准的兼容性和对更大数据量的支持。
4. 配置模型
4.1 配置参数和容器
FrArTp模块提供了丰富的配置选项,可通过AUTOSAR配置工具进行设置。
FrArTp配置模型的主要部分包括:
-
FrArTpGeneral:全局配置
- FrArTpDevErrorDetect:是否启用开发错误检测
- FrArTpVersionInfoApi:是否启用版本信息API
- FrArTpMainFuncCycle:主函数调用周期
- FrArTpHaveAckRt:是否支持确认和重试功能
- FrArTpHaveGrpSeg:是否支持分组分段
- FrArTpHaveTc:是否支持传输取消
- FrArTpHaveLm:是否支持长度模式功能
-
FrArTpChannel:通道配置
- 超时参数:各种超时阈值,如FrArTpTimeoutAs(发送者确认超时)
- FrArTpAckType:确认类型(无/带确认无重试/带确认有重试)
- FrArTpLm:长度模式(ISO/ISO6/L4G)
- FrArTpAdrType:寻址类型(1字节/2字节)
- FrArTpStMin:最小帧间隔时间
- FrArTpMaxBs:最大块大小
- FrArTpMaxRn:最大重试次数
-
FrArTpConnection:连接配置
- FrArTpSduTxId:发送SDU ID
- FrArTpSduRxId:接收SDU ID
- FrArTpTxSduRef:对PDU Router发送SDU的引用
- FrArTpRxSduRef:对PDU Router接收SDU的引用
通过这种灵活的配置模型,开发者可以根据具体应用需求优化FrArTp的行为,选择是否启用确认和重试机制,设置适当的超时参数,以及配置连接关系等。
4.2 配置限制和依赖关系
在配置FrArTp时,需要注意以下限制和依赖关系:
-
ISO 15765-2兼容性要求:
- 要实现ISO 15765-2兼容,需将FrArTpLm设置为FRARTP_ISO或FRARTP_ISO6
- 必须禁用确认机制(FrArTpAckType = FRARTP_NO)
- 单帧只能使用SF-I类型,不能使用SF-E
-
确认与重试配置:
- 若启用重试,必须同时启用确认(FrArTpAckType = FRARTP_ACK_WITH_RT)
- 启用重试时,FrArTpMaxRn参数必须合理设置,防止无限重试
-
数据大小限制:
- 在ISO 15765-2模式下,单帧数据长度最大为7字节(FRARTP_ISO)或6字节(FRARTP_ISO6)
- 在非ISO模式(FRARTP_L4G)下,单帧数据长度最大为254字节
-
块大小限制:
- 启用确认时,块大小(FrArTpMaxBs)必须在1到16范围内
- 不使用确认时,块大小可以是0到255范围内的任意值
-
STmin限制:
- STmin可配置的有效值范围为0x00到0x7F(毫秒)和0xF1到0xF9(微秒)
- 实际STmin受FlexRay周期和槽位安排的影响存在抖动
正确理解和应用这些配置限制和依赖关系,对于确保FrArTp模块按预期工作至关重要。
5. API接口
5.1 API概览
FrArTp提供了一组标准化的API接口,用于与其他模块交互。
FrArTp的API接口分为以下几类:
-
标准函数:
FrArTp_GetVersionInfo
:获取模块版本信息(可选功能)
-
初始化和关闭:
FrArTp_Init
:使用指定配置初始化模块FrArTp_Shutdown
:关闭模块,停止所有活动
-
正常操作:
FrArTp_Transmit
:请求传输N-SDUFrArTp_CancelTransmit
:取消正在进行的传输FrArTp_CancelReceive
:取消正在进行的接收FrArTp_ChangeParameter
:更改传输协议参数(如块大小)
-
回调通知:
FrArTp_TriggerTransmit
:由FlexRay Interface调用,触发数据传输FrArTp_RxIndication
:接收指示,通知收到N-PDUFrArTp_TxConfirmation
:传输确认,通知N-PDU传输结果
-
调度函数:
FrArTp_MainFunction
:主函数,由基本软件调度器周期性调用
FrArTp还依赖其他模块提供的接口:
-
必需接口:
- FrIf:
FrIf_Transmit
用于请求PDU传输 - PduR:
PduR_FrArTpCopyRxData
、PduR_FrArTpCopyTxData
等用于数据交换
- FrIf:
-
可选接口:
- Det:
Det_ReportError
用于报告开发错误(仅在启用错误检测时使用)
- Det:
大多数FrArTp函数对不同的PduId可重入,但对同一PduId不可重入,这需要在集成时注意避免并发调用问题。
5.2 使用示例
以下是FrArTp模块主要API使用的示例代码:
/* FrArTp模块初始化示例 */
void Init_FrArTp(void)
{/* 使用配置结构初始化FlexRay AUTOSAR Transport Layer */FrArTp_Init(FrArTp_Config);
}/* 请求传输N-SDU示例 */
Std_ReturnType SendMessage(PduIdType id, uint8* data, uint16 length)
{Std_ReturnType result;PduInfoType pduInfo;/* 准备PDU信息 */pduInfo.SduDataPtr = data;pduInfo.SduLength = length;/* 请求传输 */result = FrArTp_Transmit(id, &pduInfo);return result;
}/* 主函数调用示例 */
void MainFunction_10ms(void)
{/* 由调度器每10ms调用一次 */FrArTp_MainFunction();
}/* 接收回调处理示例 */
void HandleTransmissionComplete(PduIdType id, Std_ReturnType result)
{if (result == E_OK) {/* 传输成功处理 */Application_ProcessTransmitSuccess(id);} else {/* 传输失败处理 */Application_ProcessTransmitError(id);}
}/* 更改传输参数示例 */
void UpdateBlockSize(PduIdType id, uint16 newBlockSize)
{/* 更改指定连接的块大小参数 */FrArTp_ChangeParameter(id, TP_BS, newBlockSize);
}
这些示例展示了如何正确初始化FrArTp模块、请求数据传输、定期调用主函数以及处理传输结果。在实际应用中,需要根据具体项目需求进行适当调整。
6. 总结
FlexRay AUTOSAR Transport Layer (FrArTp)作为AUTOSAR经典平台的重要组件,为FlexRay网络上大数据量传输提供了可靠解决方案。通过对本文的学习,我们了解了FrArTp的以下关键方面:
-
架构特点:
- FrArTp位于PDU Router和FlexRay Interface之间
- 采用模块化设计,内部组件分工明确
- 基于ISO 15765-2标准设计,可选配置兼容性
-
核心功能:
- 数据分段与重组
- 流量控制
- 可选的确认和重试机制
- 灵活的寻址选项(1字节或2字节)
-
配置灵活性:
- 丰富的配置选项适应不同应用场景
- 可按通道配置传输特性
- 支持多种连接类型(1:1和1:n)
-
标准化接口:
- 符合AUTOSAR规范的API设计
- 清晰的函数分组和职责划分
- 与相关模块的接口定义明确
FrArTp模块在汽车电子系统中具有广泛应用,从车辆诊断到各ECU间大数据交换都可能用到。理解其工作原理和配置方法,对于开发可靠的FlexRay通信系统至关重要。
采用模块化设计,内部组件分工明确
- 基于ISO 15765-2标准设计,可选配置兼容性
-
核心功能:
- 数据分段与重组
- 流量控制
- 可选的确认和重试机制
- 灵活的寻址选项(1字节或2字节)
-
配置灵活性:
- 丰富的配置选项适应不同应用场景
- 可按通道配置传输特性
- 支持多种连接类型(1:1和1:n)
-
标准化接口:
- 符合AUTOSAR规范的API设计
- 清晰的函数分组和职责划分
- 与相关模块的接口定义明确
FrArTp模块在汽车电子系统中具有广泛应用,从车辆诊断到各ECU间大数据交换都可能用到。理解其工作原理和配置方法,对于开发可靠的FlexRay通信系统至关重要。
值得注意的是,从AUTOSAR 4.0开始,用户在选择FlexRay传输层协议时,需要在基于ISO 15765-2的FrArTp和基于ISO 10681-2的FlexRay ISO Transport Layer之间作出选择,应根据具体项目需求和兼容性要求进行判断。