文章目录
- 一、概述
- 二、OSI模型与AUTOSAR层级关系
- 三、I-PDU、N-PDU、L-PDU及其关系
- 3.1. L-PDU
- 3.2. N-PDU
- 3.3. I-PDU
- 四、数据流
- 4.1. 普通数据流
- 4.2. 诊断数据流
- 4.3. 动态PDU数据流
- 4.4. 安全通信数据流
- 4.5. XCP数据流
返回总目录
一、概述
在学习Autosar通信栈时,我们会遇到多种PDU相关的缩写,如L-PDU、N-PDU、I-PDU和SDU等。理解这些缩写及其相互关系对于掌握通信部分至关重要。L-PDU代表传输层的协议数据单元,N-PDU对应网络层,I-PDU则是交互层的协议数据单元,而SDU是各层之间传递的服务数据单元。它们之间的关系呈现出数据从上到下的封装过程,并与OSI七层模型相对应,帮助我们更清晰地理解数据在通信中的流动。接下来,我们将附上一张Autosar通信示意图,以便大家形成宏观印象。
二、OSI模型与AUTOSAR层级关系
OSI通信模型包括七层,分别是:物理层,数据链路层,网络层,传输层,会话层,表示层及应用层,各层对应的作用如下表:
OSI七层模型 | 主要功能 |
---|---|
应用层 | 为应用程序提供网络服务,如文件传输、电子邮件等 |
表示层 | 数据格式转换、加密解密、压缩解压等 |
会话层 | 建立、管理和终止会话 |
传输层 | 提供端到端的可靠数据传输,如TCP、UDP协议 |
网络层 | 负责数据包的路由和转发,如IP协议 |
数据链路层 | 数据帧的封装、传输和差错检测,如以太网协议 |
物理层 | 定义物理介质的电气、机械等特性,传输比特流 |
Autosar的分层架构没有完全按照OSI的七层模型定义,可以将Autosar的模型大致分为:数据链路层、网络层、交互层,如下所示:
由上图,我们可以看出:每个层级都会包含PCI和data Structure,PDU = PCI + data Structure,SDU = data Structure。
PCI、SDU、PDU又都是啥呢?可以看下下边的解释:
缩写 | 全称 | 含义 | 与其他的关系 |
---|---|---|---|
SDU | Service Data Unit(服务数据单元) | 上层传递的数据,带有传输请求,下层接收后提取并传递给上层的数据,是PDU的一部分 | 是PDU的数据部分,如果SDU中的数据超过 PDU数据域的大小,则会将PDU分成 首帧+连续帧的形式 发送数据 |
PCI | Protocol Control Information(协议控制信息) | 将SDU在特定协议层实例间传递所必需的信息,包含源和目标等信息,发送端添加,接收端移除 | 含有源地址和目的地址信息等控制信息,可以理解为CAN数据帧中的控制域。 |
PDU | Protocol Data Unit(协议数据单元) | 包含SDU和PCI,发送端从上层传递到下层,下层将其视为SDU | 包含SDU和PCI,每个PDU相当于CAN协议中的一帧 |
根据PDU对应的不同层级,PDU又可以分为以下几种:
Autosar层级 | OSI模型层级 |
---|---|
L-PDU | 传输层(Transport Layer) |
N-PDU | 网络层(Network Layer) |
I-PDU | 会话层(Session Layer) |
SDU | 应用层(Application Layer) |
三、I-PDU、N-PDU、L-PDU及其关系
L-PDU、N-PDU、I-PDU三者的关系如下所示:
3.1. L-PDU
是对应链路层的协议数据单元,通常将接口层(如 CanIf、FlexrayIf 等)视为链路层,更准确地说是由 Driver 和 Interface 共同构成链路层,其中 Driver 作为链路层可能更为合适,因为 Interface 是抽象模块,与硬件并非强绑定关系,例如以太网中 MAC 层为链路层且与芯片平台强相关。L-PDU 由 ID、数据长度及数据组成,以 CAN 通信为例,CAN Driver 在接收总线上传来的信号电平后生成 L-PDU,然后 L-PDU 传输至 CANIf。
data Structure即需要发送的信息,用一个结构体表示,结构体里包括数据存储起始位置(指针)及数据长度。
typedef P2VAR(uint8, TYPEDEF, COM) SduDataPtrType;
typedef uint16 PduLengthType; typedef struct
{SduDataPtrType SduDataPtr; // 指向SDU数据的指针PduLengthType SduLength; // SDU的长度
} PduInfoType;
PCI即协议控制信息,PCI由传输侧的协议层添加,并且在接收侧再次移除。对应到实际的开发,PCI可以理解为头部信息,比如:CanTp,在发送数据的时候,会添加SF、CF、FF、FC信息等;data Structure就是要发送的信息,用一个结构体表示,结构体里会有数据存储起始位置(指针),数据长度。
3.2. N-PDU
N-PDU是对应网络层的协议数据单元,通常将传输层(如CanTp、FlexrayTp等)视为网络层。N-PDU在TP层与If层之间传输,由N_AI、N_PCI和N_Data组成,并且根据N_PCI类型的不同,可分为单帧、首帧、连续帧和流控帧等。
N_AI
N_AI参数用于识别网络层的对等通信实体,主要确定信息发送者的源地址(N_SA)、接收者的目标地址(N_TA)、功能/物理寻址类型(N_TAtype)以及可选择的地址扩展(N_AE)。在接收到的N_SDU中,N_AI信息(包括N_SA、N_TA、N_TAtype和N_AE)应被复制并包含在N_PDU中。如果消息数据(<MessageData>
和<Length>
)过长,需进行分段传输,则N_AI需要在每个N_PDU中重复。
N_PCI
N_PCI (其实就是PCI,不同层的叫法)是协议控制信息,其中包含帧类型(PCItype),像单帧(SF)、首帧(FF)、连续帧(CF)和流控帧(FC)等都是典型的 PCI 信息。它由传输侧的协议层添加,在接收侧则会被移除。在大数据收发时,组包过程中会将其移除,而拆包过程中又会将其加上。
3.3. I-PDU
I-PDU是对应交互层(表示层)的协议数据单元。交互层涉及多个模块(可参照相关图示),XX_If以上模块间的信息交互依靠I-PDU来实现,而XX_If与XX_Tp模块的交互则依赖N-PDU。
在数据传输方面,小数据传输通常使用XX_If,大数据传输一般会用到XX_Tp。例如在诊断的多帧传输场景下,XX_Tp层会缓存多个N-PDU,直至完整接收一个I-PDU后,再通过PduR将其传送给DCM,存在I-PDU = n * N-PDU(n为大于1的正整数)的关系。
四、数据流
4.1. 普通数据流
CAN driver <–(LPDU)–> CanIf <–(IPDU)–> PDU Router <–(IPDU)–> COM <–(Signals)–> RTE
CAN driver:接收、发送函数;配置通道、波特率、port口等
CanIf:对驱动层的封装、给上层一些通知函数;DLC、ID到PDU的转换
PDU Router:传递数据到对应的上层模块;配置路由表
COM:IPDU分解成signals;提供接口(接收、发送信号/帧);
4.2. 诊断数据流
CAN driver <–(LPDU)–> CanIf <–(NPDU)–> CanTp <–(IPDU)–> PDU Router <–(IPDU)–> DCM
CanTp:根据ISO15765进行拆包、组包;配置时间参数、回调函数等
DCM:为上层提供UDS服务、OBD服务;
4.3. 动态PDU数据流
在普通数据流的基础上,在PudR和COM之间增加IpduM模块
PDU Router <–(IPDU)–> IPDU Multiplexer <–(IPDU)–> PDU Router
IpduM:发送/接收动态的IPDU;可以配置动态IPDU的DLC、静态段、动态段
4.4. 安全通信数据流
在普通数据流的基础上,在PudR和COM之间增加 SecOC模块
PDU Router <–(IPDU)–> SecOC <–(IPDU)–> PDU Router
SecOC(Security Onboard Communication):安全通信报文的加解密、验证、拆包组包
4.5. XCP数据流
CAN driver <–(LPDU)–> CanIf <----> XCP
XCP:标定、测量功能
參考文档:AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf