SOME/IP TP
此文标准来源于AUTOSAR_SWS_SOMEIPTransportProtocol.pdf(R21-11)
1. 前言
SOME/IP – Scalable service-Oriented MiddlewarE over IP,基于IP的可扩展面向服务中间件;
SWS – Software specification,软件规范;
2. 简介
SOME/IP TP规范包含功能、API、配置。其主要任务是对SOME/IP数据包进行分段/分包/分片,在接收端的数据重组。
SOME/IP TP的限制:没有实现重试机制,不能对接收到的SOME/IP段进行重新排序。主要是为了节约接收方运行时间和内存资源。
SOME/IP TP与其他模块的依赖关系:
- AUTOSAR PDU Router: 将PduR用于两个方向,即传输路径和接收路径。
- AUTOSAR 默认错误跟踪程序: 为了能够报告开发错误,SOME/IP TP模块必须能够访问默认错误跟踪程序的错误挂钩。
3. 功能规范
SOME/IP TP模块与PDU路由器进行双向交互,如下图所示:
3.1 SOME/IP报文分段
3.1.1 字段定义
注:当TP Flag为1时,才会有offset、RES、其他标志;
SOME/IP报文格式,如下图所示:
TP Flag位置,如下图所示:
offset: 28bit,根据之前发送/接收的SOME/IP段的有效载荷长度,在每个发送/接收段之后,包含的值增加;该字段以16进制为单位。
示例:若offset = 92, 表示当前已传输1472个有效负载字节数。
保留字段: 3bit,应该置为0。
More Segments: 1bit,表示是否还有分段数据。
3.1.2 分段示例
5571字节的有效负载,将被分割为5个连续的SOME/IP段,原始数据如下所示:
分段后的头设置,如下图所示:
3.2 SOME/IP分段发送
3.2.1 分段大小
- 每个分段的SOME/IP消息的大小应由SOME/IP报头的12个字节和有效负载字节本身组成;
- 分段SOME/IP消息的每个有效负载(最后一个除外)必须是16字节的倍数(最后一段可能由奇数有效载荷或不可以被16分割的有效载荷组成);
3.2.2 SOME/IP头
上层需要接收字段值,如下所示:
- Request ID [32 bit]
- Protocol Version [8 bit]
- Interface Version [8 bit]
- Message Type [8 bit]
- Return Code [8 bit]
什么叫做计算值、衍生值、导出值?
SOME/IP TP模块添加字段值,如下所示:
- Offset [28 bit]
- Reserved bits [3 bit]
- More Segment Flag [1 bit]
若SOME/IP报文不需要分段,则直接使用SOME/IP原始报文的头部;
第一个分段的offset = 0;
保留位应静态设置为 000;
除最后一个段的More Segments标志为0,其余分段的More Segments都为1;
3.2.3 SOME/IP段发送
发送数据前,应该检测数据是否已经分段结束;
发送数据前,应该进行数据长度检测,保证数据长度符合传输要求,否则应该进行分段处理;
发送数据前,应该检测是否按照最大可能大小进行分段;
发送多个数据段时,应以相同的时间间隔,去除发送数据包时的乱序与抖动;
3.2.4 分段终止
若PDU ID被占用,不应该继续进行当前段的分解,并抛出相应的错误码;
若是可用缓冲区不满足如下条件,分段将被终止:
- 大于或等于16字节;
- 大于分段大小空间使用要求;
若发送第一个分段数据失败,则应该停止当前分段行为,并抛出响应错误码;
3.3 SOME/IP分段组装
收到最后一个分段后,应该做接收完成的应答;
接收到分段信息后,应提取下列信息:
- 请求ID[32位]
- 协议版本[8位]
- 接口版本[8位]
- 消息类型[8位]
- 返回码[8位]
- 偏移量[28位]
- 保留位[3位]
- 更多段标志[1位]
接收到未分段的消息后,应提取下列信息: - 请求ID[32位]
- 协议版本[8位]
- 接口版本[8位]
- 消息类型[8位]
- 返回码[8位]
应该对分段报文、未分段报文做合理的管理
3.3.1 offset = 0
接收到首段数据后,应将重组相关的字段数据做管理;
接收到首段数据后,应该设置端接收超时时钟;
接收到首段数据后,应该为后续数据的接收分配合理的空间;
数组组装完成后,应该先将SOME/IP报头信息传给SOME/IP TP上层,后将组装的SOME/IP消息的有效载荷传给SOME/IP TP上层,第一包数据内容如下:
- 请求ID[32位]
- 协议版本[8位]
- 接口版本[8位]
- 消息类型[8位]-参见[SWS_SomeIpTp_00028]
- 返回码[8位]
在将组装好的SOME/IP报头传递给用户之前,SOME/IP TP模块应将消息类型中包含的TP标志设置回“0”;
SOME/IP TP模块应分别存储已传递到上层的每个PDU ID的有效负载字节数;
3.3.2 offset > 0
如果在偏移量字段大于0的情况下成功接收到某个/IP段,则某个/IP TP模块应将接收到的某个/IP头字段与第一个段接收到的存储的某个/IP头字段的值进行比较(即偏移量设置为0):
- 请求ID[32位]
- 协议版本[8位]
- 接口版本[8位]
- 消息类型[8位]
- 返回码[8位]
若是接收报文信息吻合,应重启接收的超时计时器,继续后续数据的接收;
每接收一个分段,都应该将有效负载长度与报文头的长度字段做比较;
如果Offset Field value>0,则只向上层提供有效负载字节(也就是说第一个段接收后要传递SOME/IP头信息,后续段只传有效数据);
接收到尾段后,应关闭接收超时计时器,并将有效负载数据传递到上层;
3.3.3 组装终止
当接收超时时,应终止当前的数据重组,并抛出相应错误信息;
当在没有重组任务时,接收到非首段的分段数据,该数据应该被忽略,并抛出相应错误信息;
当模块检测到错误时,应返回接收错误信息,并重置接收超时计时器;
常见的中断原因,列举如下:
- 开启数据接收后,且会话一直保持活动状态,如接收数据的TP Flag为1;
- 同一个分段数据的报头信息不一致;
- 若非首段数据的有效负载长度值不可以被16整除;
- 长度字段与有效负载长度值不一致;
- 接收字段的顺序不正确;
- 报文存储空间申请失败;
- 建立会话连接失败;
3.4 错误分类
开发错误,如下图所示:
运行错误,如下图所示:
4. API规范
这是AUTOSAR自己的代码实现,若不需要可以不看。
4.1 导入类型
4.2 类型定义
4.3 函数定义
1.版本信息获取(SomeIpTp_GetVersionInfo)
2.初始化(SomeIpTp_Init)
3.数据传输(SomeIpTp_Transmit)
此接口,必须在初始化接口之后调用;
4.4 回调函数
1.触发回调(SomeIpTp_TriggerTransmit)
如果给定的PduInfoPtr->SDULENGHT小于SOME/IP-TP段的计算大小(考虑报头和有效载荷)。
2.消息到来(SomeIpTp_RxIndication)
3.接收确认(SomeIpTp_TxConfirmation)
4.5 预定功能
1.发送函数(SomeIpTp_MainFunctionTx)
2.接收函数(SomeIpTp_MainFunctionRx)
4.6 外部接口
1.强制接口
2.选项接口
3.配置接口
5. 时序图
1.接收时序图
2.发送时序图
6.配置规范
略
参考文章
AUTOSAR官网
如有错误,欢迎指正,也欢迎相互交流学习,本人属于菜鸡。
SOME/IP TP相关推荐
- tp打印服务器修改ip,tp打印服务器和网络打印机安装方法.docx
TP-LINK打印服务器 网络打印机安装指南 .打印服务器 TP-LINKTL-PS1101的默认IP为:192.168.0.10.将需要使用此打 印机的电脑的IP与打印服务器设置为同一网段,即192 ...
- 车载以太网第二弹-实锤|SOME/IP概述及TC8 SOME/IP 测试实践
什么是中间件(Middleware) 在了解SOME/IP之前,我们先要了解"中间件(Middleware)"技术.简单来说,中间件是存在于操作系统和用户软件之间的一些中间层软件. ...
- SOME/IP与SOME/IP SD规范介绍
此文标准来源于AUTOSAR_PRS_SOMEIPProtocol.pdf(R21-11)和AUTOSAR_PRS_SOMEIPServiceDiscoveryProtocol.pdf(R21-11) ...
- [线性代数]Note4--A的LU分解转置-置换-向量空间
继续是线性代数的学习笔记,这次的笔记包含第四.五.六节三节课的内容. 第四节课是介绍A的LU分解.A的LU分解是指将矩阵A分解成一个下三角矩阵和一个上三角矩阵的乘积.其主要应用在数值分析中,用来解线性 ...
- p10单元板c语言程序,[原创]P10单元板驱动程序
包含画点.画直线.画矩形.画圆函数等,非常实用. #include #include #include "ASCII.h" #include"math.h" # ...
- java学习---搭建文件管理服务器
搭建文件管理服务器 1 准备 在日常的项目管理中提供主要逻辑服务的服务器上总会保存着许多其他的静态资源,例如文件图片等占用大量的磁盘空间,因此可以将这些和业务处理不相关的资源进行拆开存放,因此需要准 ...
- 阅读Hierarchical Graph Representation Learning with Differentiable Pooling(NeurIPS 2018)
最近关注graph pooling,Hierarchical Graph Representation Learning with Differentiable Pooling(NeurIPS 2 ...
- MIT公开课18.06 Gilbert Strang 线性代数 笔记1 - Ax=b和四个子空间
文章目录 相关链接 课程链接 参考笔记链接 问题 第1讲:方程组的集合解释 1. 从方程组到矩阵 2. Ax=bAx = bAx=b解法1:row picture 行图像 3. Ax=bAx = bA ...
- 一次lock_wait的解决
2019独角兽企业重金招聘Python工程师标准>>> lock wait 与 thread dump 有关,与 堆 dump无关,要分析为什么该语句执行如此长时间 分析表是否需要归 ...
最新文章
- 怎么DIY一个粒子检测器
- 进程与线程的区别联系
- #1097 : 最小生成树一·Prim算法
- 数据库设计三范式的举例及四大特性说明
- 1解锁方式9008_黔隆科技刷机教程红米4A忘记密码刷机解锁降级救砖解屏幕锁账户锁教程...
- Windows个人常用软件推荐
- myeclipse安装使用svn
- nmake 环境变量配置
- 前端工程化:vue代码检查工具vetur
- Linux就业技术指导:简历项目经验示例
- 支付宝支付出现 openssl_sign(): supplied key param cannot be coerced into a private key
- 5个促进 OKR 成功的文化准则
- 如何对NTFS文件进行压缩和加密
- 教你如何在Sco Unix5.05安装大硬盘(启动输入硬盘参数方法)
- 阿里经济体大数据平台的建设与思考
- python数据逆透视_利用Python实现数据逆透视
- 浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
- android 事件派发流程详解
- 什么是PE? 什么是VC?
- FD快餐店迭代三设计文档