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

SOME/IP--协议英文原文讲解2

前言
SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块:

1. SOME/IP协议讲解

2. SOME/IP-SD协议讲解

3. python/C++举例调试讲解


4.1 Specification of SOME/IP Message Format (Serialization)

SOME/IP消息格式规范--序列化

Serialization describes the way data is represented in protocol data units (PDUs) as payload of either UDP or TCP messages, transported over an IP-based automotive in-vehicle network.

序列化描述了基于UDP/TCP传输层的 的发送、接收的数据包的数据组织方式。简单的理解:我们用UDP/TCP发送、接收我们的自定义数据。不过现在是把这个自定义数据 替换成SOME/IP定义好的格式。用SOME/IP定义数据的方式 组织 数据的过程 就称为序列化。

4.1.1 Limitation

Reordering of out-of-order segments of a SOME/IP message is not supported. 

SOME/IP由于网络差或干扰数据乱序,这种乱序SOME/IP协议本身是不支持恢复的

也就是说SOME/IP协议本身不负责 传输数据的 稳定完整性。

简单理解:需要数据传输可靠则选择TCP传输协议,否则可选择UDP协议(具体怎么选择,后面章节有专门讲解)

4.1.2 Header -- 消息头的数据格式 -- 后面有详解
[PRS_SOMEIP_00030]
Upstream requirements: RS_SOMEIP_00027
[The structure of header layout shall consist of -- 消息头结构的布局(内存布局)组成
• Message ID (Service ID/Method ID) [32 Bits]
• Length [32 Bits]
• Request ID (Client ID/Session ID) [32 Bits]
• Protocol Version [8Bits]
• Interface Version [8 Bits]
• Message Type [8 Bits]
• Return Code [8 Bits]
]

[PRS_SOMEIP_00941]
Upstream requirements: RS_SOMEIP_00027
In case of E2E communication protection being applied, the E2E header is placed
after Return Code, depending on the chosen Offset value for the E2E header. The
default Offset value is 64 bit, which puts the E2E header exactly between Return Code
and Payload

E2E保护 是一种数据校验,E2E的header的大小 和 配置有关,具体参见AUTOSAR_FO_PRS_E2EProtocol.pdf 此专题不做讨论。

[PRS_SOMEIP_00031]
Upstream requirements: RS_SOMEIP_00027
For interoperability reasons the header layout shall be identical for all implementations
of SOME/IP. The fields are presented in transmission order i.e. the fields on the top left
are transmitted first

头部布局的互操作性要求

  • 互操作性原因

    • 为了实现互操作性,SOME/IP 的头部布局在所有实现中必须保持一致
  • 字段传输顺序

    • 字段按照 传输顺序 描述:
      • 位于左上角的字段 最先被传输。(网络字节序)
      • 依次向右下角的字段传输。

这确保了不同系统之间在使用 SOME/IP 协议时,能够正确解析和处理数据包头部。

4.1.2.1 Message ID [32 Bit]
[PRS_SOMEIP_00034]
Upstream requirements: RS_SOMEIP_00021, RS_SOMEIP_00022, RS_SOMEIP_00023, RS_-
SOMEIP_00027
The Message ID shall be a 32 Bit identifier that is used to identify
• the RPC call to a method of an application
• or to identify an event.
Note: The assignment of the Message ID is up to the user / system designer. However,
the Message ID is assumed be unique for the whole system (i.e. the vehicle).

消息 ID 的定义和用途
  • 消息 ID(Message ID) 是一个 32 位标识符,用于以下目的:
    1. 标识应用程序中 方法的 RPC 调用
    2. 标识一个 事件
注意事项
  • 消息 ID 的分配由用户或系统设计者决定。
  • 系统范围内唯一性
    • 消息 ID 应在整个系统中(如车辆范围内)保持唯一。

 4.1.2.2 Method ID [16 Bit]
[PRS_SOMEIP_00245]
Upstream requirements: RS_SOMEIP_00016, RS_SOMEIP_00027
The Message ID header field shall be structured into a 16 Bit Service ID header field
(to distinguish up to 2^16 services) and a 16 bit Method ID header field to distinguish
up to 2^16 service elements (namely methods and/or events). This structuring of the
Message ID header field is illustrated as shown in [PRS_SOMEIP_00755].
Note: It is common practise and recommended to split the ID space of the Method ID
between Methods and Events/Notifications. Methods would be in the range 0x0000-
0x7FFF (first bit of Method-ID is 0) and Events/Notifications would use the range
0x8000-0x8FFF (first bit of the Method-ID is 1).

Message ID 的结构
  • Message ID 的头部字段由以下两个部分组成:

    1. 16 位服务 ID(Service ID)
      • 用于区分多达 2162^{16}216 个服务。
    2. 16 位方法 ID(Method ID)
      • 用于区分多达 2162^{16}216 个服务元素(包括方法和/或事件)。
  • Message ID 的结构示例可以参考 [PRS_SOMEIP_00755]。

推荐的 Method ID 分配规则
  • 分配方法:(这个是建议的通用做法,如果有人自己定制规则区分方法和事件也是可以的)
    • 方法(Methods):使用范围 0x0000 - 0x7FFF(即 Method ID 的第一位为 0)。
    • 事件/通知(Events/Notifications):使用范围 0x8000 - 0x8FFF(即 Method ID 的第一位为 1)。
备注
  • 推荐做法:将 方法(Methods)事件/通知(Events/Notifications) 的 ID 空间分开管理。

[PRS_SOMEIP_00755] Message ID header field

Eventgroup is a logical grouping of events and notification events of fields inside a service in order to allow subscription.

Eventgroup 是服务内部的一种逻辑分组,用于将以下内容组织在一起:

  1. 事件(Events)
  2. 字段的通知事件(Notification Events of Fields)
目的
  • Eventgroup 的设计是为了便于 订阅(Subscription)

事件有 事件ID ,事件组有组ID(后面会讲)

简而言之,Eventgroup 是一种机制,用来将服务内相关的事件和通知逻辑地组织起来,以便客户端可以通过订阅 Eventgroup 来获取这些事件的更新或通知。(因此订阅是以组来订阅的)

下面截图 是订阅报文解析的截图:

[PRS_SOMEIP_00365]

A SOME/IP Eventgroup shall at least contain one event.

事件组不能为空,至少要包含一个事件。

[PRS_SOMEIP_00366]

Events as well as field notifiers shall be mapped to at least one SOME/IP Eventgroup

事件必须要绑定在一个 或 多个事件组上。

4.1.2.3 Length [32 Bit] -- 长度字段
[PRS_SOMEIP_00042]
Upstream requirements: RS_SOMEIP_00027, RS_SOMEIP_00040
Length field shall contain the length in Byte starting from Request ID/Client ID until
the end of the SOME/IP message

解释了length从哪里开始计算 -- 从后一个字段(Request ID/Client ID)到整条消息的最后。

4.1.2.4 Request ID [32 Bit]
The Request ID allows a server and client to differentiate multiple parallel uses of the
same method, getter or setter.

给同一个client标记请求的顺序的。
client给server发送的requestID 是多少,server就得回复多少。
client并发发送多个同样的请求,但是携带的参数不通,则需要通过这个requestID 来区分

仅用于method/getter/setter

[PRS_SOMEIP_00043]
Upstream requirements: RS_SOMEIP_00025, RS_SOMEIP_00027
[The Request ID shall be unique for a request-response pair to differentiate between
multiple calls of the same method.](证明了回复和请求的requestID 是相同的)

[PRS_SOMEIP_00704]
Upstream requirements: RS_SOMEIP_00027
When generating a response message, the provider shall copy the Request ID from
the request to the response message.(证明了请求和回复的requestID 相同)

服务端不需要关系RequestID的合理性 只需要拷贝回复就行,如果不合理则需要client端自己负责。
Note:
This allows the client to map a response to the issued request even with more than one
request outstanding.

规则说明
  • 在生成响应消息时,提供方(Provider) 应该将请求消息中的 Request ID 复制到响应消息中。
注意事项
  • 这种机制的意义在于:
    • 即使客户端同时发出了多个请求,也能通过 Request ID 将响应消息与对应的请求进行正确匹配。
总结

这种设计确保了在 并发请求 场景下,客户端能够可靠地识别和处理每个响应消息,避免数据混淆或误匹配问题。

[PRS_SOMEIP_00044]
Upstream requirements: RS_SOMEIP_00025
Request IDs must not be reused until the response has arrived or is not expected to
arrive anymore (timeout).

保证并发时的唯一性:
在未收到回复之前,或者认为回复超时之前,Request ID 不能重复。
收到回复了 可以重复 -- 由client 负责。


0voice · GitHub

相关文章:

SOME/IP--协议英文原文讲解2

前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 4.1 Speci…...

matlab中,fill命令用法

在 MATLAB 中,fill 命令用于创建填充多边形的图形对象。使用 fill 可以在二维坐标系中绘制填充的区域,通常用于绘制图形的背景或显示数据分布。 基本语法 fill(X, Y, C)X 和 Y 是同样长度的向量,定义了多边形的顶点坐标。C 是颜色&#xff0…...

【Linux】Linux C判断两个IPv6地址是否有包含关系

功能说明 要判断两个 IPv6 地址是否具有包含关系,包括前缀的比较,可以通过以下步骤实现: 解析 IPv6 地址和前缀:将两个 IPv6 地址和它们的前缀长度解析为二进制形式。生成掩码:根据前缀长度生成掩码。按位比较&#…...

【玩转全栈】----Django基本配置和介绍

目录 Django基本介绍: Django基本配置: 安装Django 创建项目 创建app 注册app Django配置路由URL Django创建视图 启动项目 Django基本介绍: Django是一个开源的、基于Python的高级Web框架,旨在以快速、简洁的方式构建高质量的Web…...

mysql 学习6 DML语句,对数据库中的表进行 增 删 改 操作

添加数据 我们对 testdatabase 数据中 的 qqemp 这张表进行 增加数据,在这张表 下 打开 命令行 query console 在 软件中就是打开命令行的意思 可以先执行 desc qqemp; 查看一下当前表的结构。 插入一条数据 到qqemp 表,插入时要每个字段都有值 insert…...

自动化运维在云环境中的完整实践指南

随着云计算的普及,越来越多的企业将业务迁移到云上。云环境的高动态性和复杂性使得传统的手动运维方式难以应对,自动化运维成为提升效率、降低成本、保障系统稳定性的关键。本文将详细介绍如何在云环境中实施自动化运维,涵盖工具选择、实施步骤和最佳实践。 © ivwdcwso…...

一分钟搭建promehteus+grafana+alertmanager监控平台

为什么要自己搭建一个监控平台 平时进行后端开发,特别是微服务的后端可开发,一定少不了对接监控平台,但是平时进行一些小功能的测试又没有必要每次都手动安装那么多软件进行一个小功能的测试,这里我使用docker-compose搭建了一个…...

【10.2】队列-设计循环队列

一、题目 设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普…...

设置jmeter界面图标字体大小

设置jmeter界面图标字体大小 方法:点击“选项” -> 点击放大、缩小。(可进行全局的菜单、左侧目录结构树、元件界面显示等字体图标的放大、缩小。)...

Xposed-Hook

配置 Xposed 模块的 AndroidManifest.xml&#xff1a; <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"your.package.name"><applicationandr…...

设计模式Python版 原型模式

文章目录 前言一、原型模式二、原型模式示例三、原型管理器 前言 GOF设计模式分三大类&#xff1a; 创建型模式&#xff1a;关注对象的创建过程&#xff0c;包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式&#xff1a;关注类和对…...

QT:图像上绘制图形

需求描述 1、展示一张图像 2、在图像上可以使用数据绘制图像&#xff1a;矩形、不规则图形、线条 3、有按键可以选择 概要设计 规划布局如下 1、左边是Qlabel 用于展示图片 2、右边是三个按钮 具体实现 1、 首先设计 UI 界面&#xff0c;对控件进行布局 在 mainwindow.u…...

GPU上没程序在跑但是显存被占用

原因&#xff1a;存在僵尸线程&#xff0c;运行完但是没有释放内存 查看僵尸线程 fuser -v /dev/nvidia*关闭僵尸线程 pkill -9 -u 用户名 程序名 举例&#xff1a;pkill -9 -u grs python参考&#xff1a;https://blog.csdn.net/qq_40206371/article/details/143798866...

wordpress代码结构解析

WordPress 是一个基于 PHP 和 MySQL 的开源内容管理系统&#xff08;CMS&#xff09;&#xff0c;广泛用于构建网站和博客。要解析 WordPress 代码&#xff0c;首先需要了解其核心结构、主要文件和常用的函数。以下是 WordPress 代码解析的基本指南&#xff1a; --- ### 1. *…...

【Unity3D】实现2D小地图效果

目录 一、玩家脚本Player 二、Canvas组件设置 三、小地图相关 四、GameLogicMap脚本修改 基于&#xff1a;【Unity3D】Tilemap俯视角像素游戏案例-CSDN博客 2D玩家添加Dotween移动DOPath效果&#xff0c;移动完成后进行刷新小地图&#xff08;小地图会顺便刷新大地图&…...

关联传播和 Python 和 Scikit-learn 实现

文章目录 一、说明二、什么是 Affinity Propagation。2.1 先说Affinity 传播的工作原理2.2 更多细节2.3 传播两种类型的消息2.4 计算责任和可用性的分数2.4.1 责任2.4.2 可用性分解2.4.3 更新分数&#xff1a;集群是如何形成的2.4.4 估计集群本身的数量。 三、亲和力传播的一些…...

https数字签名手动验签

以bing.com 为例 1. CA 层级的基本概念 CA 层级是一种树状结构&#xff0c;由多个层级的 CA 组成。每个 CA 负责为其下一层级的实体&#xff08;如子 CA 或终端实体&#xff09;颁发证书。层级结构的顶端是 根 CA&#xff08;Root CA&#xff09;&#xff0c;它是整个 PKI 体…...

LeetCode:62.不同路径

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;62.不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &…...

如果我想设计一款复古风格的壁纸,应该选什么颜色?

设计复古风格的壁纸时&#xff0c;选择合适的颜色是营造怀旧和经典氛围的关键。复古风格通常使用一些温暖、柔和且带有岁月痕迹的色调。以下是一些适合复古风格壁纸的颜色选择和搭配建议&#xff1a; 一、复古风格的主色调 棕色系&#xff1a; 特点&#xff1a;棕色是复古风格的…...

【数据结构】树的基本:结点、度、高度与计算

树是数据结构中一种重要的非线性结构&#xff0c;广泛应用于计算机科学的各个领域&#xff0c;例如文件系统、数据库索引、编译器等。理解树的各种性质&#xff0c;如结点数、度、高度等&#xff0c;对于解决实际问题至关重要。 本文将会探讨树的基本概念&#xff0c;以及给出几…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...