【车载开发系列】CAN通信总线再理解(中篇)

【车载开发系列】CAN通信总线再理解(中篇)

    • 九. CAN总线标准
    • 十. CAN物理层
    • 十一. CAN数据链路层
      • 1)CAN的通信帧类型
      • 2)CAN的标准帧格式
        • 1. CAN ID
        • 2. 数据场
      • 3)CAN总线仲裁
    • 十二. CAN应用层
      • 1)CANopen
      • 2)J1939
      • 3)DeviceNet

九. CAN总线标准

  • CAN总线标准有两个,即ISO11898和ISO11519,两者差分电平特性不同。
  1. ISO11898高低电平幅度低(高电压3.5V,低电压1.5V),对应的传输速度快,所以适用于高速CAN;
  2. ISO11519高低电平幅度大(高电压4.0V,低电压1.0V),对应的传输速度慢些,所以适用于低速CAN;

十. CAN物理层

  1. 多个节点连接,只要有一个为低电平,总线就为低电平,只有所有节点输出高电平时,才为高电平。所谓"线与"。
  2. CAN总线有5个连续相同位后,就插入一个相反位,产生跳变沿,用于同步。从而消除累积误差。
  3. CAN的传输速度与距离成反比。
  4. CAN总线上的终端电阻是120Ω,因为电缆的特性阻抗为120Ω,为了模拟无限远的传输线

十一. CAN数据链路层

1)CAN的通信帧类型

  • CAN总线传输的是CAN帧,CAN的通信帧分成五种,分别为数据帧、远程帧、错误帧、过载帧和帧间隔。
帧类型英文帧作用
数据帧Data Frame用于发送单元向接收单元传送数据的帧,使用最多的帧类型
遥控帧Remote Frame用于接收单元向具有相同ID的发送单元请求数据的帧
错误帧Error Frame用于当检测出错时向其他单元通知用的错误的帧
过载帧Overload Frame用于接收单元告诉发送单元,通知其尚未做好接收准备的帧
间隔帧Inter Frame Space用于将数据帧及遥控帧与前面的帧分离开来的帧

2)CAN的标准帧格式

位名位名位数说明
SOF起始位1位是一个显性电平逻辑0
Identifier(ID)仲裁段(识别码)11/29位用来确定数据信息发送给那个设备,每一个设备都有一个属于自己的识别码,11 位标识符的帧称为标准格式,而具有29位标识符的帧为扩展格式
RTR仲裁段(RTR位)1位用来区分数据帧(0)或者远程请求帧(1)
SRR※仲裁段(SRR位)1位只用在扩展格式,替代RTR;不是扩展模式不需要这个
IDE控制段(IDE位)1位用来区分标准帧(0)还是拓展帧(1)
R0控制段(空闲位)1位保留位
DLC控制段(DLC)4位用来控制数据长度
Data Field数据段8-64位数据的内容。DLC为1时数据码8位(标准CAN),为8时数据码64位(CAN FD)
CRC15CRC码15位15位CRC位+1位CRC界定符,循环冗余校验码,检测到错误时会自动重传
DELCRC界定位1位1位CRC界定符,为了把后面信息隔开
ACK应答位(ACK码)1位接收站使用应答位来表示是否已正确接收报文
DEL应答位(ACK界定位)1位一个隐性的位,为了把后面信息隔开
EOF结束位7位表示数据帧传输结束,7个隐形信号

在这里插入图片描述

1. CAN ID

CAN帧中包含ID,在数据链路层只起到优先级判断的作用。ID的数值越小,CAN帧的优先级越高,会获得总线控制权。多节点同时开始发送数据时,按照电路设计,ID按每一bit传输时,ID小的数据会覆盖ID大的值,即0&1=0,此时只要判断到自己发出的bit1实际是收到bit0,就停止发送后续的bit,稍后重试。
CAN ID值的业务意义由应用层决定。一种典型用法是,部分bit代表消息类型,部分bit代表发送者设备,即ID和设备绑定。只要ID的前几bit代表设备号,后几bit代表业务值,就能兼顾优先级判断的规范。

2. 数据场

数据场是放高层业务数据的地方。
数据链路层协议只规定了一帧的格式,数据跨越多帧的情况由应用层协议实现拆包和重组。
经典CAN,数据场最多8bytes;CAN FD最多64bytes;CAN XL最多2048bytes,即一帧可以有更多业务数据。当一帧的业务数据量>8且
003C64时,用CAN FD就不需要在业务层把数据拆成多帧和重组了,这也提升了性能。

3)CAN总线仲裁

  1. CAN总线仲裁是通过优先级决定的。
  2. CAN总线处于空闲状态时,最先发送消息的单元获得发送权。
  3. 多个单元同时开始发送时,从仲裁段(报文ID)的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送,即首先出现隐形电平的单元失去对总线的占有权变为接收。
  4. 仲裁段(识别码Identifier)值越小,说明显性电平(逻辑0)越多,那么优先级越高。
  5. 仲裁失败的单元,会自动检测总线空闲,在第一时间再次尝试发送。
    在这里插入图片描述
  • 该仲裁机制是利用“如果总线上同时出现显性电平和隐形电平,总线的状态会被置为显性电平”这个特性进行仲裁。

十二. CAN应用层

狭义的CAN,指的是物理层和数据链路层。简单地以“CAN”作为关键字去搜索,都是这两层的知识,而广义的CAN,包括应用层协议,主流有以下3种。

1)CANopen

基于CAN2.0A定义的标准帧,由CiA提出和维护。最初是为工业自动化设计的,但很快应用在了其它领域

2)J1939

基于CAN2.0B定义的扩展帧,由SAE提出。多用于重型机械,如大巴、挖掘机、拖拉机、坦克、消防车等。

3)DeviceNet

基于CAN2.0A定义的标准帧,由美国的Allen-Bradley公司所开发。主要应用包括资讯交换、安全设备及大型控制系统,在美国的市场占有率较高。比起CANopen,对物理层的要求更严格,从而使得不同厂商的设备更通用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/30977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《车载以太网通信测试》课程来袭!!!

本课程包含教程和脚本两部分内容。 教程 详细介绍以太网,如何理解TCP/IP协议,CAPL中涉及以太网的代码,以太网测试环境如何搭建,从物理层、链路层、网络层、传输层到应用层多种协议测试点的测试原理和测试方法介绍,中…

西门子学习笔记12 - BYTE-REAL互相转化

这是针对于前面MQTT协议的接收和发送数组只能是BYTE数组做出的对应的功能块封装。 1、BYTE-REAL转化 1、把byte数组转成字符串形式 2、把字符串转成浮点数 2、REAL-BYTE转化 1、把浮点数转成字符串 2、把字符串转成Byte数组

【转载】TIOBE 编程指数 6 月排行榜公布,vb.net排第九

原文地址:https://baijiahao.baidu.com/s?id1801368030428902126&wfrspider&forpc IT之家 6 月 9 日消息,TIOBE 编程社区指数是一个衡量编程语言受欢迎程度的指标,评判的依据来自世界范围内的工程师、课程、供应商及搜索引擎&#…

乐鑫esp32系列睡眠模式下蓝牙连接功耗测试,新支持ESP-C6,启明云端乐鑫代理商

本教程适用于ESP32-S3、ESP32-C3、ESP32-C6; 睡眠模式介绍 ESP32系列常见的休眠方式有三种,分别为Modem-sleep、Light-sleep 和 Deep-sleep。 Modem-sleep模式:CPU 正常工作,可以对时钟进行配置。 进入 Modem-sleep 模式后&…

大模型与知识图谱:联合打造智能未来,案例解析让你大开眼界!

在数字化浪潮中,大模型和知识图谱作为人工智能领域的两大核心技术,正逐渐改变着我们的生活。大模型,是一种通过大规模数据训练得到的深度学习模型,具备强大的语义理解和推理能力;而知识图谱,则是以图状结构…

光伏设计需要设计哪些方面?

光伏设计是一项复杂而关键的工作,它涉及到多个方面的综合考虑,以确保光伏系统的效率、安全性和可持续性。下面将详细探讨光伏设计需要设计的几个方面。 一、系统规模与布局 光伏设计的首要任务是确定系统的规模和布局。这包括评估安装地点的光照资源、可…

【nginx】 nginx核心功能

【nginx】 nginx核心功能 1.nginx核心功能 1. 反向代理 2. 负载均衡 3. 动静分离 4. nginx的高可用2. 反向代理 正向代理: 该服务器代理的是客户端,对于服务器来说,不知道真实客户端的ip。比如: 翻墙软件。 访问国外的服务器---使用了翻墙软件----对…

Vue 使用setInterval定时器导致前端页面卡死(解决方法)

Vue 使用setInterval定时器导致前端页面卡死 原因 setinterval不会清除定时器队列,每重复执行1次都会导致定时器叠加,最终卡死你的网页。 其原因与JS引擎线程有关(需深入研究JS引擎线程) ,但是setTimeout是自带清除定…

同城跑腿多合一系统源码小程序支持安卓+IOS+公众号+H5

🚀 同城跑腿多合一小程序:便捷生活新选择 💨 一、引言:走进便捷新纪元 在这个快节奏的现代生活中,时间成了最宝贵的财富。而“同城跑腿多合一小程序”正是为了满足大家对于便捷、高效生活的追求而诞生的。它不仅是一款…

RapidLayout:中英文版面分析推理库

引言 继上一篇文章之后,我这里想着将360发布的版面分析模型整合到现有的rapid_layout仓库中,便于大家快速使用。 不曾想到,我这整理工作越做越多了,好在整体都是往更好方向走。 起初,rapid_layout项目是在RapidStru…

vue3页面传参

一&#xff0c;用query传参 方法&#xff1a; router.push({path: ‘路由地址’, query: ‘参数’}) 例子&#xff1a;a页面携带参数跳转到b页面并且b页面拿到a页面传递过来的参数 在路由router.ts配置 a页面&#xff1a; <template><div >a页面</div>…

【可控图像生成系列论文(二)】MimicBrush 港大、阿里、蚂蚁集团合作论文解读2

【可控图像生成系列论文&#xff08;一&#xff09;】简要介绍了论文的整体流程和方法&#xff0c;本文则将就整体方法、模型结构、训练数据和纹理迁移进行详细介绍。 1.整体方法 MimicBrush 的整体框架如下图所示。为了实现模仿编辑&#xff0c;作者设计了一种具有双扩散模型…

SpingBoot快速入门下

响应HttpServietResponse 介绍 将ResponseBody 加到Controller方法/类上 作用&#xff1a;将方法返回值直接响应&#xff0c;如果返回值是 实体对象/集合&#xff0c;将会自动转JSON格式响应 RestController Controller ResponseBody; 一般响应 统一响应 在实际开发中一般…

DS1339C串行实时时钟-国产兼容RS4C1339

RS4C1339串行实时时钟是一种低功耗的时钟/日期设备&#xff0c;具有两个可编程的一天时间报警器和一个可编程方波输出。地址和数据通过2线双向总线串行传输。时钟/日期提供秒、分钟、小时、天、日期、月份和年份信息。对于少于31天的月份&#xff0c;月末的日期会自动调整&…

PDO预编译与sql注入

刚学web安全的时候学到sql注入防御&#xff0c;那些文章基本上都会说利用pdo预编译就可以近乎完美防御sql注入&#xff0c;或者看到一些渗透经验贴&#xff0c;遇到sql经过预编译的网站师傅们总是会建议赶紧换个站&#xff0c;那么预编译究竟能不能完美防御sql注入&#xff0c;…

VBA基础知识点总结

VBA教程 VBScript教程 数据类型 数字数据类型 非数字数据类型 变量&常量 可以通过Dim、Public或Private语句声明变量。 变量语法&#xff1a;Dim <<variable_name>> As <<variable_type>>&#xff08;需要在使用它们之前声明&#xff09; 常量语…

LVS+Keepalived高可用集群部署

一、高可用群集(HA)的作用 企业应用中&#xff0c;单台服务器承担应用存在单点故障的危险&#xff0c;单点故障一旦发生&#xff0c;企业服务将发生中断&#xff0c;造成极大的危害。 高可用集群是由一台主调度器和一台或多台备用调度器。在主调度器能够正常运转时&#xff0c;…

优选算法刷题笔记 2024.6.10-24.6.20

一、双指针算法(快慢指针,对撞指针) 艹&#xff0c;CSDN吞了我是十三题笔记&#xff01;&#xff01;&#xff01; 二、滑动窗口(滑动窗口) 1、找到字符串中所有字母异位词 class Solution {public List<Integer> findAnagrams(String s, String p) {int[] hash1 new in…

【Python】一文向您详细解析内置装饰器 @lru_cache

【Python】一文向您详细解析内置装饰器 lru_cache 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕&a…

TMS320F280049学习5:CPU timer中断

TMS320F280049学习5&#xff1a;CPU timer中断 文章目录 TMS320F280049学习5&#xff1a;CPU timer中断前言一、工程代码二、CPU timer时钟总结 前言 DSP的内部有3个CPU timer&#xff0c;分别是CUP timer0 / 1 / 2&#xff0c;传说CPU timer2一般在跑系统时用&#xff0c;类似…