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

Autosar UDS-CAN诊断开发02-1(CAN诊断帧格式类型详解、CANFD诊断帧格式类型详解、15765-2(CANTP层)的意义)

目录

前言

CANTP层(15765-2协议)存在的意义

CANTP层(15765-2协议)帧类型详细解读(普通CAN格式)

四种诊断报文类型

单帧SingleFrame(SF)

首帧:FirstFrame(FF)

流控帧:FlowControl(FC)  

连续帧:ConsecutiveFrame(CF)

中间小结 

CANTP层(15765-2协议)帧类型详细解读(CANFD格式)

差异点:单帧SingleFrame(SF)

差异点:首帧FirstFrame(FF)

结束


前言

         我们先来看一下诊断报文数据Log:

        上面图中,红色为诊断仪(Canoe或Canpro)发,蓝色为ECU发。

        我刚开始接触诊断的时候。

        看着这些密密麻麻的数据一脸茫然,由于经常能听到同事们在说19服务,所以我知道19服务读DTC,但Canoe发出的19 0A前面为啥还有个0x02?为什么ECU先返回了一帧然后再返回后面的多帧?为什么中间还夹这一帧Canoe发出来的?30 00 14又是啥意思?多帧的数据要怎么看啊,全部数据都是跟DTC故障有关吗?

        真的是小小的脑袋大大的问号。

        ...

        后来我才知道,这一切的由来都是15765-2协议。上面这个流程中,诊断仪和ECU间为什么是这样交互,所有数据中与诊断服务无关的其它数据分别代表什么意思,15765-2中全都有详细的定义。


CANTP层(15765-2协议)存在的意义

        先看一下在Autosar架构中,CANTP层在诊断链路中的位置:

        要理解为什么诊断报文的链路需要CANTP层(15765-2协议)。

        我们可以先看一下普通应用报文的链路:

                应用报文链路:CAN->CANIF->PDUR->COM->APP

        你会发现,应用报文其实很简单。它没有什么协议,收到什么就直接解读就好了。

        比如,车企定义了0x123报文中的Byte0的8个字节为电池的温度,那么当ECU收到0x123报文的时候,直接把Byte0的8个字节读取出来就直接是电池的温度了。换句话说,应用报文的发送和接收是没有什么协议的。

        由于应用报文没有什么协议,因此,应用报文传输数据就完全受限制于物理层的CAN协议(11898),一帧CAN报文的长度最大是CANFD的64Byte,再多就不行了。

        因此,15765-2协议的主要目的就是实现多帧传输。

CANTP层(15765-2协议)帧类型详细解读(普通CAN格式)

四种诊断报文类型

        我们先来看一下诊断报文都有哪些类型:

        这个图简单一眼看过去,初学者肯定不是那么好理解,所以我们提取一些关键信息来看。(先把普通CAN格式的诊断报文提取出来看一下,下图没框出来的就是CANFD格式的,后面再讲)

        从上面图中红色框出来的地方可以看出。诊断报文的类型共有4种。分别叫做:

                        单帧:SingleFrame(SF)

                        首帧:FirstFrame(FF)

                        连续帧:ConsecutiveFrame(CF)

                        流控帧:FlowControl(FC)

        我们暂时先不管他们具体的意义以及什么情况下才发出来。先从上面图中看看每种诊断报文的类型都有什么不同的地方。(注意,上面标准规范里面的图中的Byte#1是起始字节,对应我们口头常说的报文的Byte0起始字节。)

        以下面这张图为栗子,接下来分别讲解各个帧类型的差异。再次注意,下面图中Tx表示诊断仪(Canpro或Canoe)发出去,Rx表示ECU接收到诊断仪请求后ECU返回的数据。

单帧SingleFrame(SF)

        如下图:

        另外说明,后面的无效数据“AA AA ...”叫做填充字节(具体我们后面再讲,现在只要知道它是无效数据就好了。 

        单帧:Byte#1的低4位填写要发送的有效数据长度(SF_DL),Byte#1的高4位固定为0。

首帧:FirstFrame(FF)

        如下图:

        这里它要发送23个Byte的有效数据,但很明显,这一帧里只跟着6个有效Byte。因此还剩下17个Byte的有效数据没发完,它后面要发的数据叫做连续帧。

        首帧:Byte#1的高4位固定为1。Byte#1的低4位和Byte#2的8位共同填写要发送的诊断有效数据长度(SF_DL)。

流控帧:FlowControl(FC)  

        如果流控帧这一部分看不懂,大家可以先看下面的连续帧,然后再反回来看这里流控帧。因为所谓流控,就是控制连续帧的发送。

        如下图:

        下面我们依次讲解FS、BS、STmin这3个的含义

        FS:FlowStatus,即流控状态。它只有3个值:

                FS=0:允许对方继续发送

                FS=1:等待

                FS=2:溢出

                一般来说,我们只会看到FS为0的状态。知道FS等于0表示能继续发送就好了。(其它两个值我到目前为止还没看到出现这种情况)

                关于FS的官方标准如下(大家随便看看就好了):

        BS:BlockSize,即允许对方一次发送连续帧的数量。

                如果发送流控帧的这方发送的BS为0x00,则表示发送流控帧的这方可以接收无穷多的数据,对方只需要把所有要发送的数据全部发过来就好了。

                比如下面这里:

                我们另外再举一个BS不等于0x00的例子。如下面这里,BS=0x01,表示一次对方只能发送1帧数据过来:

        关于BS的官方解释如下(大家也随便看看就好了):

        STmin:SeparationTime minimum,即要求对方发送连续帧的最小时间间隔。

                如下面这张图,STmin=0x0A,即10ms。也就是说,对方发送的连续帧每帧的时间间隔最小是10ms。

                 官方解释如下(也是随便看看就好了)

连续帧:ConsecutiveFrame(CF)

        如下图:

         Byte#1的低四位叫做SN。Byte#1的高4位固定为2。

        SN:SequenceNumber,即当前连续帧的帧数。该值从0-15循环,但是第一帧连续帧的值是从1开始。

        官方解释如下:

        说人话其实就是,叫做SN的这4个Bit,发出第一帧连续帧的时候是1,如果连续帧的数据量很大,比如由上百个Byte,那么,当SN等于15之后的下一帧,就再从0开始,然后不断循环,并且中间不受流控帧的影响。 


中间小结 

        看完上面普通CAN格式的诊断报文类型

        我们另外再补充一个与协议无关的知识点:诊断仪与ECU的关系

        在诊断交互中,诊断仪永远是主动方,ECU永远是被动方。

        理解起来也很简单:ECU不可能能主动发数据给诊断仪说:“诊断仪,你快来读读我的DTC故障状态吧。诊断仪,你快来给我升级下软件吧...”。要是真这样,那真的是智能觉醒了。

        所以,在诊断交互中,第一帧肯定是诊断仪发出去的。

        好了,补充了这个知识点。我再贴一遍一开始那张密密麻麻数据的图

        这次,虽然里面诊断服务的数据的具体含义你不理解,但是你是不是已经能看懂整个交互流程了?

        讲完15765-2中普通CAN格式帧的诊断报文类型,我们接下来再看看CANFD格式帧的诊断报文类型。

        虽然普通CAN和CANFD的诊断报文格式差异其实不大。

        但是大家做Autosar诊断开发的时候,一定要知道诊断报文要有CANFD格式的。

        我之前做CANFD格式的诊断报文的时候,我感觉明明已经完成了整个CANFD诊断报文的开发链路,但是我用CANoe发送诊断请求的时候,ECU死活没有反应,然后各种调试,最后才发现,原来CANFD格式的诊断报文跟CAN格式的诊断报文的发送数据内容是不一样的。

        也就是说,对于CANFD诊断格式的ECU,如果你还用诊断仪按照普通CAN格式的方式发送诊断请求报文,ECU就不会响应你,这并不是ECU坏了或没开发对,而是你没按照人家的协议要求发数据。

        这可真的坑死我了。

        好了,话不多说,我们接下来看下CANFD格式的诊断报文类型。


CANTP层(15765-2协议)帧类型详细解读(CANFD格式)

         从上面图中可以看到,CAN格式和CANFD格式的差异是SF(单帧)、FF(首帧)的差异,连续帧和流控帧是没有差异的。

        关于CANFD格式的诊断报文类型就不详细讲了,只讲于普通CAN有差异地方对比。

        再次说明:上面标准规范里面的图中的Byte#1是起始字节,对应我们口头常说的报文的Byte0起始字节。

差异点:单帧SingleFrame(SF)

        普通CAN:Byte0的高4位固定为0,低4位表示有效数据长度

        CANFD:Byte0的高4位、低4位都固定为0,Byte1表示有效数据长度

差异点:首帧FirstFrame(FF)

        普通CAN:Byte0的高4位固定为1。Byte0低4位和Byte1的8位是一个整体,表示要发送的有效数据长度。

        CANFD:Byte0的高4位固定为1、Byte0低4位和Byte1的高4位都固定为0。Bye1的第4位、Byte2、3、4、5是一个整体,表示要发送的有效数据长度。


结束

        关于诊断报文CANTP层的存在意义和诊断报文的类型就讲到这里了,下一章我们讲一下诊断仪和ECU的交互流程中的帧类型使用情况


 返回目录:

Autosar BSW 开发笔记(目录)-CSDN博客

       

相关文章:

Autosar UDS-CAN诊断开发02-1(CAN诊断帧格式类型详解、CANFD诊断帧格式类型详解、15765-2(CANTP层)的意义)

目录 前言 CANTP层(15765-2协议)存在的意义 CANTP层(15765-2协议)帧类型详细解读(普通CAN格式) 四种诊断报文类型 单帧SingleFrame(SF) 首帧:FirstFrame(FF) 流控帧:FlowCont…...

swing快速入门(三)

解答一下上一篇关于留下的关于布局管理器的疑问 上一篇 几种常见的布局管理器 看不懂?看不懂没关系,这篇是概念篇,大概了解一下就行~ 1.FlowLayout(流式布局):按照从左到右、从上到下的顺序依次排列组件。…...

Swagger PHP Thinkphp 接口文档

安装 1. 安装依赖 composer require zircote/swagger-php 2. 下载Swagger UI git clone https://github.com/swagger-api/swagger-ui.git 3. 复制下载好的Swagger UI 中的dist目录到public目录中,修改目录名称 cp -rf swagger-ui/dist /home/htdocs/public/ m…...

12.9每日一题(备战蓝桥杯循环结构)

12.9每日一题(备战蓝桥杯循环结构) 题目 2165: 求平均年龄题目描述输入输出样例输入样例输出来源/分类 题解 2165: 求平均年龄题目 2166: 均值题目描述输入输出样例输入样例输出来源/分类 题解 2166: 均值题目 2167: 求整数的和与均值题目描述输入输出样…...

与时代共进退

还记得当初自己为什么选择计算机? 当初你问我为什么选择计算机,我笑着回答:“因为我梦想成为神奇的码农!我想像编织魔法一样编写程序,创造出炫酷的虚拟世界!”谁知道,我刚入门的那天&#xff0…...

Python 云服务器应用,Https,定时重启

Python 云服务器应用,Https,定时重启 环境搭建Python模块模块导入生成Flask实例GET处理启动服务器打开网页验证 GET接入证书 支持https申请证书下载证书保留 xxx.crt 和 xxx.key文件就可以了 copy到python项目目录ssl_context 配置 宝塔面板操作在www目录下新建python工作目录在…...

pytorch 笔记:dist 和 cdist

1 dist 1.1 基本使用方法 torch.dist(input, other, p2) 计算两个Tensor之间的p-范数 1.2 主要参数 input输入张量other另一个输入张量p范数 input 和 other的形状需要是可广播的 1.3 举例 import torchxtorch.randn(4) x #tensor([ 1.2698, -0.1209, 0.0462, -1.3271…...

Java的List中的各种浅拷贝和深拷贝问题

先来看一组代码 public class Temp{public static void main(String[] args) {List<Integer> list new ArrayList<>();list.add(1);list.add(2);list.add(3);List<Integer> temp list;list.add(4);System.out.println(list.toString());System.out.print…...

20231207_最新已测_Centos7.4安装nginx1.24.0_安装详细步骤---Linux工作笔记066

以前安装的太模糊了,干脆重新写一个: 1.首先下载对应的nginx-1.24.0.tar.gz安装文件 2.然后: 去执行命令 安装依赖 yum install -y gcc yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum install -y openssl openssl-devel 3.然后:去解压 tar -zxvf ngi…...

前端知识笔记(二十六)———React如何像Vue一样将css和js写在同一文件

如果想在React中想要像Vue一样把css和js写到一个文件中&#xff0c;可以使用CSS-in-JS。 使用CSS-in-JS 下载 npm i styled-components使用 就像写scss一样&#xff0c;不过需要声明元素的类型 基本语法及展示如下 import styled from "styled-components"expor…...

Photoshop Circular Text

Ctrl N 新增 现学现卖...

深入解析Spring Boot中的注解@PathVariable、@RequestParam、@RequestBody的正确使用

文章目录 1. 引言2. PathVariable&#xff1a;处理路径变量2.1 简介2.2 使用示例 3. RequestParam&#xff1a;处理请求参数3.1 简介3.2 使用示例 4. RequestBody&#xff1a;处理请求体4.1 简介4.2 使用示例 5. 多个注解的组合使用6. 参数绑定的原理6.1 HandlerMethodArgument…...

Qt Location中加载地图对象

在Qt Location中加载地图对象&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1&#xff0c;首先&#xff0c;确保你已经安装了Qt Location模块&#xff0c;并在项目中包含了相应的头文件。在项目文件&#xff08;.pro&#xff09;中添加以下行&#xff1a; QT locatio…...

4-Docker命令之docker ps

1.docker ps介绍 docker ps命令是用来列出容器的相关信息 2.docker ps用法 docker ps [参数] [rootcentos79 ~]# docker ps --helpUsage: docker ps [OPTIONS]List containersAliases:docker container ls, docker container list, docker container ps, docker psOptions…...

你在地铁上修过bug吗?

作为技术人员&#xff0c;有没有遇到下班路上收到老板电话&#xff0c;系统故障&#xff0c;然后地铁上掏出电脑&#xff0c;修bug的场景。自己负责的业务线上出现问题&#xff0c;负责人心里是很慌的&#xff0c;在这种心理状态下做事很容易二次犯错&#xff0c;造成更大的问题…...

CPU、MCU、MPU、DSP、FPGA各是什么?有什么区别?

1、CPU 中央处理器&#xff0c;简称 CPU&#xff08;Central Processing Unit&#xff09;&#xff0c;中央处理器主要包括两个部分&#xff0c;即控制器、运算器&#xff0c;其中还包括高速缓冲存储器及实现它们之间联系的数据、控制的总线。 电子计算机三大核心部件就是CPU…...

SpringBoot之logback 在Linux系统上启动的时候,设置日志按日期分割并设置指定时间自动清除日志

一、在src/main/resources/下创建logback-spring.xml文件 <?xml version"1.0" encoding"UTF-8"?> <configuration><!-- 日志存放路径 --><property name"log.path" value"/home/xmmc/logs" /><!-- 日志…...

OpenHarmony北向-让更广泛的应用开发者更容易参与

一、标准系统的体验 按照官方文档指导&#xff0c;这样操作&#xff0c;OH标准系统开发板就可以运行开发者开发的OpenHarmony应用了。 二、实际情况 按照开发文档上的说明&#xff0c;肯定是装不上的。因为OH不同的发行版&#xff0c;不同发行板不同的设备&#xff0c;IDE&…...

数据结构之归并排序及排序总结

目录 归并排序 归并排序的时间复杂度 排序的稳定性 排序总结 归并排序 归并排序大家只需要掌握其递归方法即可&#xff0c;非递归方法由于在某些特殊场景下边界难控制&#xff0c;我们一般很少使用非递归实现归并排序。那么归并排序的递归方法我们究竟是怎样实现呢&#xff…...

仿windows12网盘,私有云盘部署教程,支持多种网盘

仿windows12网盘,私有云盘部署教程&#xff0c;支持多种网盘 资源宝分享&#xff1a;www.httple.net 视频教程&#xff1a;https://www.bilibili.com/video/BV1m64y1G7Bq/ 宝塔部署方式&#xff1a; 1.验证是否安装jdk,没有安装请看安装教程 推荐安装jdk8&#xff08;注意您…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...

如何配置一个sql server使得其它用户可以通过excel odbc获取数据

要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据&#xff0c;你需要完成以下配置步骤&#xff1a; ✅ 一、在 SQL Server 端配置&#xff08;服务器设置&#xff09; 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到&#xff1a;SQL Server 网络配…...

基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究

摘要&#xff1a;在消费市场竞争日益激烈的当下&#xff0c;传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序&#xff0c;探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式&#xff0c;分析沉浸式体验的优势与价值…...