当前位置: 首页 > article >正文

AUTOSAR通信篇 - PDU和收发数据

点击订阅专栏不迷路

文章目录

  • 一、概述
  • 二、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通信示意图,以便大家形成宏观印象。

![[教培业务/CSDN博客/_resources/${picture}/562b85d785de1224c58d1dd5fe145240_MD5.png]]

二、OSI模型与AUTOSAR层级关系

OSI通信模型包括七层,分别是:物理层,数据链路层,网络层,传输层,会话层,表示层及应用层,各层对应的作用如下表:

OSI七层模型主要功能
应用层为应用程序提供网络服务,如文件传输、电子邮件等
表示层数据格式转换、加密解密、压缩解压等
会话层建立、管理和终止会话
传输层提供端到端的可靠数据传输,如TCP、UDP协议
网络层负责数据包的路由和转发,如IP协议
数据链路层数据帧的封装、传输和差错检测,如以太网协议
物理层定义物理介质的电气、机械等特性,传输比特流

Autosar的分层架构没有完全按照OSI的七层模型定义,可以将Autosar的模型大致分为:数据链路层、网络层、交互层,如下所示:

在这里插入图片描述
由上图,我们可以看出:每个层级都会包含PCI和data Structure,PDU = PCI + data Structure,SDU = data Structure。

PCI、SDU、PDU又都是啥呢?可以看下下边的解释:

缩写全称含义与其他的关系
SDUService Data Unit(服务数据单元)上层传递的数据,带有传输请求,下层接收后提取并传递给上层的数据,是PDU的一部分是PDU的数据部分,如果SDU中的数据超过 PDU数据域的大小,则会将PDU分成 首帧+连续帧的形式 发送数据
PCIProtocol Control Information(协议控制信息)将SDU在特定协议层实例间传递所必需的信息,包含源和目标等信息,发送端添加,接收端移除含有源地址和目的地址信息等控制信息,可以理解为CAN数据帧中的控制域。
PDUProtocol 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


http://www.kler.cn/a/508421.html

相关文章:

  • Docker 镜像加速的配置
  • 粒子群优化 (PSO, Particle Swarm Optimization) 算法详解及案例分析
  • HTML基础与实践
  • Vue2.0的安装
  • 深入了解卷积神经网络(CNN):图像处理与深度学习的革命性技术
  • RAG 切块Chunk技术总结与自定义分块实现思路
  • PMML和XML-标记语言异同
  • %.*s——C语言中printf 函数中的一种格式化输出方式
  • 介绍UDP协议
  • PCL 点云按时间进行渲染赋色【2025最新版】
  • 图像处理|闭运算
  • 2025.1.16——三、supersqli 绕过|堆叠注入|handler查询法|预编译绕过法|修改原查询法
  • 快慢指针:链表问题的利器
  • unity免费资源2025-1-17
  • Java合并多个List集合的方法
  • AUTOSAR从入门到精通专栏总目录
  • Linux手写FrameBuffer任意引脚驱动spi屏幕
  • Django多线程爬虫:突破数据抓取瓶颈
  • sparkRDD教程之必会的题目
  • Oracle graph 图数据库体验-安装篇
  • 一文简要了解为什么需要RAG、核心原理与应用场景
  • 陈萍的设计创新:Kevlin Nexus荣获伦敦设计奖,展示品牌设计的国际化与持续创新
  • 【12】Word:张老师学术论文❗
  • 专业130+总分410+西安交通大学815/869原909信号与系统考研电子信息与通信工程。真题,大纲,参考书。
  • 云IDE:开启软件开发的未来篇章
  • 用大白话讲明白JWT