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

SOME/IP学习笔记3

目录

1.SOMEIP Transformer

1.1 SOME/IP on-wire format

1.2 协议指定

2. SOMEIP TP

2.1 SOME/IP TP Header

3.小结


1.SOMEIP Transformer

       根据autosar CP 相关规范,SOME/IP Transformer主要用于将SOME/IP格式的数据序列化,相当于一个转换器。总体框架如下:

       如上图,SWC通过RTE处理数据,然后RTE执行相关的SOME/IP转换,将数据序列化转换为线性模式;接收端进行反序列化,最后传给另一个SWC。

1.1 SOME/IP on-wire format

        车载网路中PDU数据格式如下:

  • 报文长度限制

        当前用于CAN或FlexRay的数据长度限制为4095bytes;因此一个包含Header的SOME/IP报文不应该超过4095bytes。

  • 大小端

        Header均以大端表示,payload由SOMEIPTransformationDescription表示。

  • Header

        详见报文格式Some/IP学习笔记-CSDN博客

  • 参数和数据结构的序列化   

        支持序列化的基础数据类型如下:

        结构体的序列化:

        按照深度优先遍历的顺序进行序列化;如果需要对齐,在AUTOSAR数据类型中插入保留/填充元素,因为SOME/IP实现不会自动添加此类填充。

        例如,如果一个结构包含一个uint8和一个uint32,它们只是顺序写入缓冲区。这意味着uint8和uint32的第一个字节之间没有填充;因此,uint32可能没有对齐。因此,系统设计者必须考虑向数据类型添加填充元素,以实现所需的对齐或全局设置。

        如果SomeiptTransformationProps的属性sizeOfStructLengthField设置为大于0的值,则应在为其定义SomeiptTransformationProps的序列化结构之前插入长度字段。结构体的序列化有如下两种方式:

1.2 协议指定

        协议又分为Client/Server和Sender/Receiver

  • Client/Server通信

对于SOME/IP的请求message,Client端的SOME/IP transformer对payload和header做以下处理:

  1.  构建payload、设置独立的request ID、设置协议版本、设置接口版本、设置请求的message类型,returncode=0;
  2.  Server端的SOME/IP transformer应构建header,并处理payload、设置messageType为RESPONSE。
  • Sender/Receiver通信

        这里留个记录,暂时没有看到这里来

2. SOMEIP TP

        SOME/IP TP主要是将SOME/IP packet碎片化(UDP packet无法存放完整帧),接收端重新组装。

2.1 SOME/IP TP Header

        当MessageType中TP-Flag置1后,header变为如下结构:

        这里多出了4字节的内容,分别是28bit的offset、3bit的reserved bits和1bit 的More Segment Flag

  • TP-Flag处于第18位。
  • Offset Field:紧跟在return code,随着SOME/IP segment的发送或接收增加。每增加1相当于16个bytes已经接受或传输,例如offset值为92,表示已经传输了92*16=1472个字节的数据。
  • More Segment Flag置1,表示继续有SOME/IP PDU segment传输。

        现在假设要发送一个5571byte的SOME/IP报文、数据长度为8+5571;表示报文长度为8字节,总长为5571.

        现在将其分为5个连续的SOME/IP segments,每个最长payload为1392bytes。那么对应划分如下:

        8为报文长度、4为offset+res+m、1392为payload长度。

        结合上述,前4个segment总体结构如下:

        最后一个为:

3.小结

        总结一下,目前对于SOME\IP的认知还比较浅显,全是基础概念,所以接下来要进一步深入,搭建测试环境,入门车载以太网

相关文章:

  • 从程序员到架构师,实现技术巅峰的完美转型
  • 【PG】PostgreSQL高可用方案repmgr管理之配置文件
  • 读书充电,温暖你的冬日。不可错过的10本架构师必读书籍
  • CCF编程能力等级认证GESP—C++4级—样题1
  • 【KCC@南京】KCC南京数字经济-开源行
  • C++实现高频设计模式
  • Docker(1)
  • 高教社杯数模竞赛特辑论文篇-2023年A题:基于机理分析法的定日镜场优化设计模型(附获奖论文及MATLAB代码实现)
  • 足跟痛筋膜炎最佳的治疗
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • Vue3+TS+Node打造个人博客(前端架构)
  • centOs 6.10 编译 qt 5.15.11
  • MobileSAM论文笔记
  • React Virtual DOM及Diff算法
  • 人工智能基础_机器学习033_多项式回归升维_多项式回归代码实现_非线性数据预测_升维后的数据对非线性数据预测---人工智能工作笔记0073
  • 自己简单写的 事件订阅机制
  • 【知识碎片】第三方登录弹窗效果
  • Akka系列(七):Actor持久化之Akka persistence
  • Apache Zeppelin在Apache Trafodion上的可视化
  • Consul Config 使用Git做版本控制的实现
  • Cumulo 的 ClojureScript 模块已经成型
  • django开发-定时任务的使用
  • docker容器内的网络抓包
  • Git初体验
  • IOS评论框不贴底(ios12新bug)
  • Java教程_软件开发基础
  • JS笔记四:作用域、变量(函数)提升
  • React 快速上手 - 07 前端路由 react-router
  • Vue官网教程学习过程中值得记录的一些事情
  • Vultr 教程目录
  • 记一次和乔布斯合作最难忘的经历
  • 收藏好这篇,别再只说“数据劫持”了
  • 微服务入门【系列视频课程】
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 找一份好的前端工作,起点很重要
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • gunicorn工作原理
  • #includecmath
  • #LLM入门|Prompt#3.3_存储_Memory
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (附源码)计算机毕业设计ssm电影分享网站
  • (接口封装)
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一)插入排序
  • .bat文件调用java类的main方法
  • .Net Core 中间件验签
  • .net FrameWork简介,数组,枚举
  • .NET 反射的使用
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件