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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/955630.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

.Net8 Avalonia跨平台UI框架——<vlc:VideoView>控件播放海康监控、摄像机视频(Windows / Linux)

一、UI效果 二、新建用户控件&#xff1a;VideoViewControl.axaml 需引用&#xff1a;VideoLAN.LibVLC.Windows包 Linux平台需安装&#xff1a;VLC 和 LibVLC &#xff08;sudo apt-get update、sudo apt-get install vlc libvlccore-dev libvlc-dev&#xff09; .axaml 代码 注…

哈尔滨有双线服务器租用吗?

哈尔滨有双线服务器租用吗&#xff1f;双线服务器是一种针对哈尔滨特有的网络环境优化的服务器解决方案&#xff0c;它能够同时支持中国电信和中国联通或移动其中两家主要ISP&#xff08;互联网服务提供商&#xff09;的连接。 由于中国南方地区多采用电信网络&#xff0c;而北…

58,【8】BUUCTF [PwnThyBytes 2019]Baby_SQL1

进入靶场 和2次注入的页面很像 不过养成查看源代码的好习惯 先访问source.zip 下载后解压&#xff0c;发现两个文件 第一个文件夹打开又有4个PHP文件 那还是先看index.php文件好了 有PHP和HTML两部分&#xff0c;下面是PHP部分代码&#xff08;HTML太长了&#xff0c;先放一…

在服务器上增加新网段IP的路由配置

在服务器上增加新网段IP的路由配置 前提条件步骤一:检查当前路由表步骤二:添加新路由步骤三:验证新路由步骤四:持久化路由配置脚本示例结论在网络管理中,路由配置是一项基本且重要的任务。它决定了数据包在网络中的传输路径。本文将详细介绍如何在服务器上增加新的路由配置…

图像处理|闭运算

闭运算&#xff08;Closing&#xff09;是形态学操作中的另一种基本操作&#xff0c;它与开运算&#xff08;Opening&#xff09;类似&#xff0c;但执行的步骤相反。闭运算结合了膨胀和腐蚀操作&#xff0c;顺序为 先膨胀后腐蚀。这种操作通常用于填补图像中的小空洞&#xff…

【Pytorch实用教程】TCN(Temporal Convolutional Network,时序卷积网络)简介

文章目录 TCN的基本特点TCN的优点TCN的应用场景典型的TCN架构总结TCN(Temporal Convolutional Network,时序卷积网络)是一种用于处理序列数据的深度学习模型,尤其适用于时间序列预测、语音识别、自然语言处理等任务。它利用卷积神经网络(CNN)来处理时序数据,相比于传统的…

Python调用go语言编译的库

要在 Python 中调用用 Go 语言编写的库&#xff0c;可以使用 Go 语言的 cgo 特性将 Go 代码编译成共享库&#xff08;如 .so 文件&#xff09;&#xff0c;然后在 Python 中通过 ctypes 或 cffi 模块加载和调用这个共享库。 新建main.go文件&#xff0c;使用go语言编写如下代码…

服务器一次性部署One API + ChatGPT-Next-Web

服务器一次性部署One API ChatGPT-Next-Web One API ChatGPT-Next-Web 介绍One APIChatGPT-Next-Web docker-compose 部署One API ChatGPT-Next-WebOpen API docker-compose 配置ChatGPT-Next-Web docker-compose 配置docker-compose 启动容器 后续配置 同步发布在个人笔记服…

深度学习项目--基于LSTM的火灾预测研究(pytorch实现)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 LSTM模型一直是一个很经典的模型&#xff0c;这个模型当然也很复杂&#xff0c;一般需要先学习RNN、GRU模型之后再学&#xff0c;GRU、LSTM的模型讲解将…

PCL K4PCS算法实现点云粗配准【2025最新版】

目录 一、算法原理1、算法概述2、算法流程3、参考文献二、 代码实现1、原始版本2、2024新版三、 结果展示本文由CSDN点云侠原创,原文链接,首发于:2020年4月27日。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的抄袭狗。 博客长期更新,本文最近一次更新时间为…

.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上)

系列文章目录 1、.Net Core微服务入门系列&#xff08;一&#xff09;——项目搭建 2、.Net Core微服务入门全纪录&#xff08;二&#xff09;——Consul-服务注册与发现&#xff08;上&#xff09; 3、.Net Core微服务入门全纪录&#xff08;三&#xff09;——Consul-服务注…

人参t2t基因组-文献精读100

Telomere-to-telomere reference genome for Panax ginseng highlights the evolution of saponin biosynthesis 人参的端粒到端粒参考基因组揭示皂苷生物合成的进化 摘要 人参&#xff08;Panax ginseng&#xff09;是中药的代表性植物之一&#xff0c;并在全球范围内广泛使…

一、1-2 5G-A通感融合基站产品及开通

1、通感融合定义和场景&#xff08;阅读&#xff09; 1.1通感融合定义 1.2通感融合应用场景 2、通感融合架构和原理&#xff08;较难&#xff0c;理解即可&#xff09; 2.1 感知方式 2.2 通感融合架构 SF&#xff08;Sensing Function&#xff09;&#xff1a;核心网感知控制…

机器学习之SVD奇异值分解实现图片降维

SVD奇异值分解实现图片降维 目录 SVD奇异值分解实现图片降维1 SVD奇异值分解1.1 概念1.2 基本步骤1.2.1 矩阵分解1.2.2 选择奇异值1.2.3 重建矩阵1.2.4 降维结果 1.3 优缺点1.3.1 优点1.3.2 缺点 2 函数2.1 函数导入2.2 函数参数2.3 返回值2.4 通过 k 个奇异值降维 3 实际测试3…

Linux《Linux简介与环境的搭建》

在学习了C或者是C语言的基础知识之后就可以开始Linux的学习了&#xff0c;现在Linux无论是在服务器领域还是在桌面领域都被广泛的使用&#xff0c;所以Linxu也是我们学习编程的重要环节&#xff0c;在此接下来我们将会花大量的时间在Linxu的学习上。在学习Linux初期你可以会像初…

二进制/源码编译安装mysql 8.0

二进制方式&#xff1a; 1.下载或上传安装包至设备&#xff1a; 2.创建组与用户&#xff1a; [rootopenEuler-1 ~]# groupadd mysql [rootopenEuler-1 ~]# useradd -r -g mysql -s /bin/false mysql 3.解压安装包&#xff1a; tar xf mysql-8.0.36-linux-glibc2.12-x86_64.ta…

boss直聘 __zp_stoken__ 逆向分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 有相关问题请第一时间头像私信联系我删…

pyspark连接clickhouse数据库的方式(其它数据库同样适用)

目录 一、背景简记二、pyspark连接clickhouse方式记录三、结语参考学习博文 一、背景简记 实际工作中&#xff0c;大部分所用的数据存储地址都是在数据库中&#xff0c;如我司现在常用的数据库是clickhouse&#xff0c;相关数据的统计分析都在此上操作。如果想用pyspark连接cl…

【JSqlParser】Java使用JSqlParser解析SQL语句总结

简述 Java解析SQL语句有很多工具都可以做到&#xff0c;比如Mybatis、Druid、目前用来用去最全面的仍然是Jsqlparser&#xff0c;它是一个Github上的开源项目&#xff0c;JSqlParser是一个用于解析SQL语句的Java库&#xff0c;它可以帮助开发者分析和操作SQL语句的结构。无论是…

Ubuntu本地部署网站

目录 1.介绍 2.安装apache 3.网页升级 1.介绍 网站其实就相当于一个文件夹&#xff0c;用域名访问一个网页&#xff0c;就相当于访问了一台电脑的某一个文件夹&#xff0c;在网页中看见的视频&#xff0c;视频和音乐其实就是文件夹里面的文件。为什么网页看起来不像电脑文件夹…