CAN总线协议:数据帧-程序员宅基地

技术标签: 网络  arm开发  Linux驱动学习  linux  

一.  简介

前面几篇文章简单了解了 CAN总线特点及其电器属性。文章如下:

CAN简介-程序员宅基地

Linux CAN总线的电器属性-程序员宅基地

本文开始来学习CAN总线的协议。

二.  CAN总线协议

1.  CAN总线的数据帧格式

通过 CAN 总线传输数据是需要按照一定协议进行的
CAN 协议提供了 5 种帧格式来传输数据:数据帧、遥控帧、错误帧、过载帧和帧间隔。
我们常用的一种数据帧格式是 数据帧。
其中数据帧和遥控帧有标准格式和扩展格 式两种,标准格式有 11 位标识符(ID),扩展格式有 29 个标识符(ID)
5 中帧的用途见下表所示:

接下来分别来介绍这五种数据帧格式。

1.   数据帧

数据帧由 7 段组成:
①  帧起始,表示数据帧开始的段。
②  仲裁段,表示该帧优先级的段。
③  控制段,表示数据的字节数及保留位的段。
④  数据段,数据的内容,一帧可发送 0~8 个字节的数据。
⑤  CRC 段,检查帧的传输错误的段。
⑥  ACK 段,表示确认正常接收的段。
⑦  帧结束,表示数据帧结束的段。
数据帧结构如下图 所示:

上图中给出了数据帧标准格式和扩展格式两种帧结构,图中 D 表示显性电平 0R 表示隐性电平 1 D/R 表示显性或隐性,也就是 0 1 ,我们来简单分析一下数据帧的这 7 个段。

① 帧起始

帧起始很简单,标准格式和扩展格式都是由一个位的显性电平 0 来表示帧起始。

② 仲裁段

仲裁段表示帧优先级,仲裁段结构如 下图 所示:

标准格式和扩展格式的仲裁段不同,从上图 可以看出,标准格式的 ID 11 位,发 送顺序是从 ID10 ID0 ,最高 7 ID10~ID4 不能全为隐性 (1) ,也就是禁止 0X1111111XXXXX 这样的 ID 。扩展格式的 ID 29 位,基本 ID ID28 ID18 ,扩展 ID ID17 ID0 ,基本 ID 与标准格式一样,禁止最高 7 位都为隐性。

③ 控制段

控制段由 6 个位构成,表示数据段的字节数,标准格式和扩展格式的控制段略有不同,如下图 所示:

上图 r1 r0 为保留位,保留位必须以显性电平发送。 DLC 为数据长度,高位在 前, DLC 段有效值范围为 0~8

④  数据段

数据段也就是帧的有效数据,标准格式和扩展格式相同,可以包含 0~8 个字节的数据,从最高位 (MSB) 开始发送,结构如下图 所示:

注意,上图 中数据段的 0~64 bit ,对应到字节就是 0~8 字节。

CRC

CRC 段保存 CRC 校准值,用于检查帧传输错误,标准格式和扩展格式相同, CRC 段结构如下图 所示:
可以看出, CRC 段由 15 位的 CRC 值与 1 位的 CRC 界定符组成。 CRC 值的计算范围包括:帧起始、仲裁段、控制段、数据段,接收方以同样的算法进行计算,然后用计 算得到的 CRC 值与此 CRC 段进行比较,如果不一致的话就会报错。

⑥  ACK

ACK 段用来确认接收是否正常,标准格式和扩展格式相同, ACK 段结构如图 66.1.3.6
示:
  可以看出, ACK 段由 ACK (ACK Slot) ACK 界定符两部分组成。
发送单 元的 ACK ,发送 2 个隐性位,而接收到正确消息的单元在 ACK 槽( ACK Slot )发送显性位, 通知发送单元正常接收结束,这个过程叫发送 ACK/返回 ACK
发送 ACK 的是所有接收单元 中接收到正常消息的单元,所谓正常消息是指不含填充错误、格式错误、 CRC 错误的消息,这 些接收单元既不处于总线关闭态,也不处于休眠态的所有接收单元中。

⑦  帧结束

最后就是帧结束段,标准格式和扩展格式相同,帧结束段结构如下图 所示:
可以看出,帧结束段很简单,由 7 位隐性位构成。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wojiaxiaohuang2014/article/details/136877953

智能推荐

Python-入门_python中:>#11x-程序员宅基地

文章浏览阅读203次。python黑马程序员网课笔记_python中:>#11x

T113开发板优化启动速度方法_全志t113linxu开机速度-程序员宅基地

文章浏览阅读220次。具体修改device/config/chips/t113/configs/evb1_auto/longan/env.cfg 配置文件,新增一行"verify=no"。文件为:device/config/chips/t113/configs/evb1_auto/longan/env.cfg。文件为device/config/chips/t113/configs/evb1_auto/longan/env.cfg,1、把启动脚本放在/etc/init.d/rcS文件的最前面执行。3、去掉uboot部分打印。_全志t113linxu开机速度

SQLServer自学之路3 数据库的备份、还原、分离和附加_实验三分离与附加还原备份-程序员宅基地

文章浏览阅读2k次。数据库备份:界面操作点击添加->选择目录写入备份文件名称->点击确认 添加成功 删除原来不用的地址或选择新的地址就可以了备份成功!数据库还原:界面操作按照自学之路2的方法删除数据库,然后进行还原进入还原数据库->点击设备->点击…->进入选择备份设备->点击添加->选择所以文件,选择备份文件,点击确认->点击选择备份设备里面的文件,点击确定->回到还原数据库页面,点击确认->完成还原数据库分离:界面操作点击确认后 数据库_实验三分离与附加还原备份

在Linux上创建基于ISO镜像的本地Yum仓库_linux iso yum-程序员宅基地

文章浏览阅读459次。许多情况下,我们需要在本地环境中创建基于ISO镜像文件的Yum软件仓库,以方便本地机器安装软件包而无需访问外部网络。本文将介绍如何简单快速地在Linux系统上创建和使用基于ISO镜像的本地Yum仓库。_linux iso yum

Maven使用笔记(通过编译Flink的过程发现原来配置maven挺重要的)_mvn编译flink 1.14.5-程序员宅基地

文章浏览阅读774次。前言:今天在编译Flink的时候,一直失败,但是看网上的文章好像编译挺简单的,后来发现,其实是公司的网/国内的网不太行再加上我选择的maven远程仓库上缺了一些package。之前我使用的远程仓库是mvnrepository.com,国内访问的速度还行,但是package不全。比较全的应该是中央仓库,它的repository id 是central,这个是maven默认的,我们不必配置。但..._mvn编译flink 1.14.5

在web端在线预览pdf文件(分页预览、下载、打印)_pdf.js下载-程序员宅基地

文章浏览阅读1.5k次,点赞35次,收藏26次。本文写作环境是若依开源框架vue2+elementui在做这个需求的时候,我查找了资料,简单的是有使用vue-pdf的,我写了发现有跨域问题,只能另寻他法,最后发现很有码友大大们使用的是pdf.js插件,我开始着手,在和后端同事的配合调试下终于成功实现了pdf文件在线预览。以上就是完成pdf文件预览的步骤,可以实现pdf文件的简单预览(分页)、下载。看很多码友大大们还实现了一些可以高亮显示页面内容和驻点什么的,本文这只是一个简单的实现,实现额外功能还需要在此基础上加深研究。加深巩固:Ajax请求。_pdf.js下载

随便推点

实对称矩阵一定可以对角化_实对称矩阵一定可以对角化证明-程序员宅基地

文章浏览阅读3.2w次,点赞25次,收藏74次。UTF8gbsn实对称矩阵一定可以对角化.最近看共轭梯度下降的时候看到有人的推导里面用到了这个命题. 虽然以前学过,但是学得很渣, 所以没有自己想过这个命题怎么样成立的.现在将这些证明过程梳理一下.实对称矩阵含有n个实根首先我们来证明一个命题, 实对称矩阵含有n个实根,注意,n个实根并不一定都是不同的, 可能含有重根.比如(r−1)2=0(r-1)^2=0(r−1)2=0就含有两个重根r=1r=1r=1.在计算根数目的时候这个方程的解算两个.首先, 任意的矩阵A\mathbf{A}A,_实对称矩阵一定可以对角化证明

java 将字节数转换为秒-程序员宅基地

文章浏览阅读359次,点赞8次,收藏6次。字节数转换为秒

深度学习在语音识别中的挑战与解决方案-程序员宅基地

文章浏览阅读956次,点赞19次,收藏25次。1.背景介绍语音识别技术是人工智能领域的一个重要应用,它可以将语音信号转换为文本信息,从而实现自然语言与计算机之间的沟通。深度学习在语音识别领域取得了显著的进展,但仍然面临着一些挑战。本文将从背景、核心概念、算法原理、最佳实践、应用场景、工具和资源等方面进行全面阐述,以期为读者提供一个深入的理解。1. 背景介绍语音识别技术的发展历程可以分为以下几个阶段:基于规则的方法:早期的语音..._语音识别csdn

Python爬虫系列(一)——手把手教你写Python爬虫_python写爬虫-程序员宅基地

文章浏览阅读3.7w次,点赞328次,收藏1.3k次。适合初学者快速上手入门,以爬取CSDN和百度图片为例。_python写爬虫

使用React+Three.js 封装一个三维地球_自己做app如何展示一个地球-程序员宅基地

文章浏览阅读1.6w次,点赞6次,收藏36次。良久没有写过博客了,最近忙的焦头烂额,忽略了博客,罪过罪过。今天补充一篇,前一段时间研究过的技术,使用React+Three.js 封装一个三维地球,支持鼠标的交互行为。其实也实现了对有坐标的json数据展示在地球上的功能,以后会有补充。github仓库地址: https://github.com/zrysmt/react-threejs-app整体做完之后的效果图: 废话少说,直接上环_自己做app如何展示一个地球

2017二级c语言考试大纲,2017年计算机等级考试二级C语言程序设计考试大纲-程序员宅基地

文章浏览阅读66次。摘要全国计算机等级考试二级C 语言程序设计考试大纲(2013 年版)基本要求1. 熟悉Visual C++ 6. 0 集成开发环境。2. 掌握结构化程序设计的方法,具有良好的程序设计风格。3. 掌握程序设计中简单的数据结构和算法并能阅读简单的程序。4. 在Visual C++ 6. 0 集成环境下,能够编写简单的C 程序,并具有基本的纠错和调试程序的能力。考试内容一、C 语言程序的结构1. 程序的...

推荐文章

热门文章

相关标签