从代码角度看CAN网络层协议 ISO 15765-2(一)
相关文章
从代码角度看CAN网络层协议 ISO 15765-2 (二)
前言
测试软硬件环境:
CANoe 11 SP2
Win10 X64
ISO 15765-2 -2016由于不同类型的总线运载数据的能力不同,比如
CAN
总线协议(包括CAN-FD)最多携带64个字节有效数据;Flexray
总线协议单帧做多携带254个字节有效数据;车载以太网???
而应用层ISO-14229规范定义单个功能请求传输可以大于4095
个字节。所以来自应用层
的数据在经过传输层
,怎么将这些数据分解成多帧,以适应不同总线类型协议,这便是传输层协议要做的事。
比如ISO 15765-2
规范了CAN
总线类型TP层的传输协议, 而ISO-10681-2
则定义了Flexray
总线协议的传输层规范,今天我们要说的是ISO 15765-2
下图是数据传输的七层结构,ISO 15765-2所在的层级如下图
文章目录
- 相关文章
- 前言
- 网络层协议数据报文的格式组成
- Address information(N_AI)
- Protocal control information (N_PCI) 协议控制信息
- SF 单帧
- FF 首帧
- CF 连续帧
- FC 流控帧
- FS 流控状态
- Block Size (BS)
- STmin 连续帧传输时间间隔
- 网络层定时参数(NetWork layer timing)
- 总结
网络层协议数据报文的格式组成
ISO 15765-2
的前面的章节是一些服务原语,理解起来晦涩,从第九章节开始是协议数据单元的格式
N_PDU 的解释:
- N 是NetWork的缩写,即网络层的意思。
- PDU:Protocal data unit 即协议数据单元
这种命名方式是标准的惯例,比如 ISO-14229 是 应用层(application),所以也会用A_PDU 表示
Address information(N_AI)
地址信息可以参考下图:
Protocal control information (N_PCI) 协议控制信息
在TP层 ,收到的PDU根据 N_PCI信息 判断PDU类型
如下图,这张图应该是ISO-15765的核心了,当应用层数据多时,TP层会把长报文进行分段传输,根据分段的类型分为4种类型:首帧,流控帧,连续帧,最后帧。
下图的信息比较丰富,标准CAN 的 N_PCI的高4位决定 PDU的类型。后面会逐一讨论
SF 单帧
如上面的Table 9图,单帧根据CAN DL 的长度不同,N_PCI占用的字节数不同,
CAN_DL ≤ 8 (标准CAN):高4位表示 N_PCIType ,低4位表示数据长度,可以最多携带 CAN_DL - 1个数据
CAN_DL > 8 (CAN-FD):第一个字节都表示 N_PCIType ,第二个字节表示数据长度,可以最多携带 CAN_DL - 2个数据
FF 首帧
如上面的Table 9图,首帧根据CAN DL 的长度不同,N_PCI占用的字节数不同,
CAN_DL ≤ 4095 : 需要2个字节表示N_PCI
CAN_DL > 4095 : 需要6个字节表示N_PCI
CF 连续帧
如上面的Table 9图,高4位表示N_PCIType ,低4位表示序列号
- 序列号从0开始增加(第一个0在首帧里面)
- 紧接着流控帧的第一帧连续帧,序列号应该是1
- 序列号增加到15的时候,下一帧序列号是0
FC 流控帧
FlowControl用来调整发送端到接收端网络层的能力。这种流量控制方案允许使用诊断网关和子网
如上面的Table 9图,
第一个字节高4位表示N_PCIType ,低4位表示流控状态 FS ,表示接收方的状态,是否允许继续发送
第二个字节Block Size (BS) 表示 接收方允许发送方在等待授权之前发送的n_pdu的最大数量,以继续发送以下的n_pdu
第三个字节SeparationTime minimum (STmin)表示 发送端在两个CF n_pdu发送之间等待的最小时间。
FS 流控状态
FS是0,表示接收方一切正常,发送方可以继续发送连续帧
FS是1,表示接收方有点吃不消,发送方等一会(一个N_BS timer时间)再发送连续帧
FS是2,表示接收方缓存炸了,发送方你要终止发送
Block Size (BS)
告知发送方可以连续发送多少帧连续帧,一般情况设置为0,表示你发送方有多少数据,我接收方照单全收
如果接收方接受能力不足,可以设置BS为具体值。
STmin 连续帧传输时间间隔
告知发送方 连续帧传输时间间隔 设置为STmin
网络层定时参数(NetWork layer timing)
N_As超时:发送方没有及时发送N_PDU。
N_Ar超时:接收方没有及时发送N_PDU。
N_Bs超时:发送方没有接收到流控帧。
N_Cr超时:接收方没有收到连续帧。
N_Br超时:接收方没有发出流控帧。
N_Cs:即STmin,发送两个连续帧需要等待的最短时间。
总结
本章博客从ISO 15765-2 标准简要讲述CAN网络层多帧传输的重要参数和定义,我们接下来将在从代码角度看CAN网络层协议 ISO 15765-2 (二)中通过代码演示的方式让大家更加通俗的理解这些参数。
- 要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
- 如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。
从代码角度看CAN网络层协议 ISO 15765-2(一)相关推荐
- 从代码角度看CAN网络层协议 ISO 15765-2 (二)
ont color=orange>
- js随机跳转域名_从代码角度看各类子域名收集工具
作者:w7ay @ 知道创宇404实验室 开源的域名收集工具有很多,本文会从代码的角度去看各类开源的域名收集工具的技术特点,以及各有哪些优缺点,来帮助大家,在合适的时候选择合适的利用工具. 这里选取了 ...
- TLS1.2的握手过程——从代码角度
代码角度看TLS1.2握手过程 -- 以 ECDHE_RSA_WITH_AES_128_GCM_SHA256 密码套件为例 名词解释:密码套件--SSL握手过程联合使用了一系列加密&摘要 ...
- 基于CAN总线的汽车诊断协议UDS (网络层 ISO 15765)
上个月一个同事Z跳槽去了德赛西威,Z之前是完全不懂诊断的MCU工程师,去德赛后做诊断开发,让我感觉到,汽车嵌入式行业,CAN和诊断工程师还是比较稀缺的.之前我和Z共同负责一个项目,我负责CAN网络和诊 ...
- 从JVM的角度看JAVA代码--代码优化
从JVM的角度看JAVA代码–代码优化 从JVM的角度看JAVA代码代码优化 片段一重复计算 片段二重复比较 在JVM加载优化为class文件,运行class文件时,会有JIT(Just-In-Tim ...
- 从JVM的角度看JAVA代码1
从JVM的角度看JAVA代码1 从JVM指令的角度来分析++,--问题可以分析的非常透彻,这里给出两个案例.通过这两个案例就能知道JAVA中前++和后++的原理了,同时也可以推论出--的情况. pub ...
- 从软件工程角度看大前端技术栈
从软件工程角度看大前端技术栈 优秀人才不缺工作机会,只缺适合自己的好机会.但是他们往往没有精力从海量机会中找到最适合的那个. 100offer 会对平台上的人才和企业进行严格筛选,让「最好的人才」和「 ...
- 从全生命周期管理角度看大数据安全技术研究
从全生命周期管理角度看大数据安全技术研究 李树栋1,2, 贾焰2, 吴晓波3, 李爱平2, 杨小东4, 赵大伟5 1. 广州大学网络空间先进技术研究院,广东 广州 510006 2. 国防科技大学计算 ...
- 从平台角度看物联网体系架构
从平台角度看物联网体系架构 一.前言 万物互联时代已经到来,2020年全球物联网连接数将达到300亿个.中国的物联网市场更是飞速发展,随着许多新商业模式的涌现,市场将迎来井喷期.预计2020年物联网连 ...
- 一文看懂PPP协议——PPP协议简介
今天给大家介绍一下PPP协议的相关内容,文章浅显易懂,特别适合0基础同学.本文主将主要从PPP概述.PPP链路建立过程和PPP认证三个角度对PPP协议进行讲解. 一.PPP概述 PPP,point-t ...
最新文章
- Java线程之join
- 简单计算器的设计java_(基于java的简易计算器的设计.doc
- 如何系统地理解「交易平台」?
- linux版_巧用linux版powershell,管理linux下的docker
- 镜像电流源特点_9000大型地网变频大电流接地特性测量系统介绍
- 解决centos6.5出现-bash: mysql: command not found的方法
- Angular应用 vendor.js里的magic number 16384是什么含义
- win10电脑黑屏只有鼠标箭头_win7开机黑屏只有鼠标怎么办,我来教你解决
- mathematica在linux上运行,Mathematica在Ubuntu中的表现及修正
- React.js 官网入门教程 分离文件 操作无法正常显示HelloWord
- 正月十五元宵节中国风海报PSD分层模板找灵感!
- Centos7.9安装Mysql5.7.32_mysql-5.7.32-1.el7.x86_64.rpm-bundle.tar_亲测成功---Linux工作笔记041
- SharePoint 2013必备组件离线包安装:AppFabric无法安装问题解决
- win10+cuda10.0.130+cudnn7.5.1+tensorflow-gpu 1.13.1+anaconda3+keras+pycharm2018
- 清华成北京赛赢家,旷视唐文斌分享本质创业 | 联想高校AI精英挑战赛
- vue中常用的事件修饰符
- SVM笔记(一)硬间隔SVM
- centos普通用户和root用户之间相互切换
- devgis分享 只分享有价值的东西!http://download.csdn.net/user/devgis
- 【C语言】VSCode配置C语言开发环境(详细图文)
热门文章
- 基于halcon的颜色识别---杜邦线识别
- 怎么看服务器cpu温度命令_ubuntu 命令行下查看及监测CPU温度的方法
- VBA 字典使用小结:关键字循环
- VBA字典(dictionary)
- AT91SAM9260搭建LINUX操作系统
- html视频怎么添加封面,快影视频封面怎么添加文字标题
- 在Excel如何根据内容自动调整行高列宽
- BZOJ 1213 HNOI2004 高精度开根 二分+高(Py)精(thon)度
- android锁屏事件监听,Android 监听锁屏、解锁、开屏 操作
- 使用layer 弹出对话框 子父页面相互参数传递 父页面获取子页面参数实例