最近在学习CAN,记录一下,也供大家参考交流。

推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记

首先是瑞萨的CAN入门,真的通透;

秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4 CAN!
原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252

CAN详解(小白教程)
原文链接:https://blog.csdn.net/xwwwj/article/details/105372234

一篇易懂的CAN通讯协议指南1

一篇易懂的CAN通讯协议指南1 - 知乎 (zhihu.com)

视频推荐

CAN总线个人知识总结_哔哩哔哩_bilibili

【单片机】野火STM32F103教学视频 (配套霸道/指南者/MINI)【全】(刘火良老师出品) (无字幕)_哔哩哔哩_bilibili

一、CAN协议是什么?(概念)

CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO国际标准化的串行通信协议。 在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统 被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很 多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个 LAN,进行大量数据的高速通信”的需 要,1986 年德国电气商博世公司开发出面向汽车的 CAN 通信协议。此后,CAN 通过 ISO11898 及 ISO11519 进 行了标准化,现在在欧洲已是汽车网络的标准协议。

CAN通讯是异步通讯,没有时钟信号线来保持信号接收同步,无法同时发送与接收,在同一时刻,只能有一个节点发送数据,也就是半双工,其余节点都只能接收数据。

二、can的物理层

CAN 通讯并不是以时钟信号来进行同步的,它是一种异步通讯,只具有 CAN_High 和 CAN_Low 两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。

1.通讯节点

CAN通讯节点由一个CAN控制器和一个CAN收发器组成,控制器与收发器由CAN_TX和CAN_RX连接,CAN收发器通过CAN_HIGH和CAN_LOW与总线连接。节点之间的信号经过总线传输,实现节点之间的通讯,CAN总线可以挂载多个通讯节点,因为CAN不对节点进行地址编码,而是对数据内容进行编码,只要总线的负载足够,理论上可以不受限制。

2.1闭环总线网络

遵循ISO11898标准,高速,通讯速率最大可达1Mbps,短距离,最长40m,总线俩端需要120欧的匹配电阻。

2.2开环总线网络

遵循ISO11519-2标准,低速,最高通讯速率125Kbps,远距离,最远1km,俩总线不闭环,要串联2.2千欧电阻。

3.差分信号

为什么CAN要使用差分信号?

差分信号又称差模信号,与传统使用单根信号线电压表示逻辑的方式有区别,使用差分信号传输时,需要两根信号线,这两个信号线的振幅相等,相位相反,通过两根信号线的电压差值来表示逻辑 0 和逻辑 1。差分信号抗干扰能力强,可以有效抑制外部电磁干扰,时序定位精确。

单端信号和差分信号的区别

这个差分信号在CAN上怎么用,与逻辑之间是什么关系?

ISO-11898 (高速CAN)和ISO-11519(低速CAN)的CAN信号定义

当CAN_H和CAN_L的电压均为2.5v,两者电压差为0,就规定CAN信号为隐性电平;当CAN_H的电压为3.5v,CAN_L的电压为1.5v,两者电压差为2V,就规定CAN信号为显性电平。这里实际的规定是:电压差满足定义的一定范围,就可以认为是显性电平或者隐性电平,比如电压差在1.5-2.5v范围,都认为是显性电平。

而CAN的差分信号可以参考下面这张图,在 CAN 总线中,必须使它处于隐性电平 (逻辑 1) 或显性电平 (逻辑 0) 中的其中一个状态。假如有两个 CAN 通讯节点,在同一时间,一个输出隐性电平,另一个输出显性电平,类似 I2C 总线的“线与”特性将使它处于显性电平状态,显性电平的名字就是这样来的,即可以认为显性具有优先的意味。

二、CAN的协议层

前面提到CAN是异步通讯,那他没有时钟线怎么进行通讯的呢?

CAN的各个节点之间就要约定好特定的波特率进行通讯,怎么约定好波特率,没有时钟线,而且难免会出现误差,这时候我们还需要使用位同步的方式来抗干扰,吸收误差。这时候就要了解位时序和位同步。

1.位时序分解

位时序,就是一个数据位的时序,CAN把一个数据位的时序分解为SS、PTS、PBS1、PBS2,他们的最小单位是1Tq,一个完整的位由 8~25 个 Tq,这四段加上为一个CAN的数据位长度。下面分别介绍:

SS段    同步段   固定为1Tq

同步段,顾名思义与同步有关,若通讯节点检测到总线上面信号的跳变沿被包含在SS段的范围之内,则表示节点与总线的时序是同步的,此时采集到的电平也是确定的。

PTS段   传播时间段      1~8Tq

用于补偿网络的物理延长时间,是总线上输入比较器延时和输出驱动器延时的两倍。

PBS1段   相位缓冲段     1~8Tq

补偿边沿阶段的误差,他的时间可以在重新同步时加长(再同步)

PBS2段  相位缓冲段     2~8Tq

补偿边沿阶段的误差,他的时间可以在重新同步时缩短(再同步)

2.位同步

2.1硬同步

接收单元在总线空闲状态检测出帧起始时进行的同步调整。 在检测出边沿的地方不考虑 SJW 的值而认为是 SS 段。 硬件同步的过程如下图所示。

2.2再同步

再同步就是在接收过程中检测出总线上的电平变化时进行的同步调整。 每当检测出边沿时,根据 SJW 值通过加长 PBS1 段,或缩短 PBS2 段,以调整同步。但如果发生了超出 SJW 值的误差时,最大调整量不能超过 SJW 值。这里定义了这个补偿时间叫做SJW,它的含义就是最大补偿值。一般保持在不大不小的状态,小了容易造成误差,大了影响传输速率。

3.确定波特率

总线上的各个通讯节点只要约定好1个Tq的时间长度以及一个数据位占多少个Tq,就可以确定波特率。例如:假设1Tq = 1us,19个Tq组成一个数据位,1bit = 19tq

1x10的6次方/19 = 52631.6 (bps)

4.CAN的报文种类及结构

了解了CAN协议的时钟现在了解一下CAN的数据咋实现。

CAN协议对数据、操作命令 (如读/写) 以及同步信号进行打包,打包后的这些内容称为报文,而当整个数据包被传输到其它设备时,只要这些设备按格式去解读,就能还原出原始数据,这样的报文就被称为 CAN 的“数据帧”。

通信是通过以下 5 种类型的帧进行的

5.数据帧的结构

数据帧以一个显性位开始,7个连续的隐形位结束,他们之间有仲裁段、数据段、CRC段和ACK段

1)SOF段,帧起始,用于通知各个节点将有信号传输,其他节点通过帧起始信号的电平跳变沿来进行硬同步。

2)仲裁段,CAN不对节点地址分配优先级,对信息的重要程度分配优先级,仲裁段的主要内容就是ID信息。RTR 区分数据帧和遥控帧  显性就是数据帧。

3)控制段 r0、r1保留位,默认显性,DCL段位数据长度。

4)CRC段,表示一个15位的校验码,算出来的校验码和接受相同表示正确,如果错误则错误帧返回,请求重新发送。CRC界定符,分界线,默认隐形。

5)ACK段,ACK 槽(ACK Slot)和 ACK 界定符 2 个位构成,发送单元的 ACK 段:发送单元在 ACK 段发送 2 个位的隐性位。 接收单元的 ACK 段 :接收到正确消息的单元在 ACK 槽(ACK Slot)发送显性位,通知发送单元正常接收结束。这称作“发 送 ACK”或者“返回 ACK”。

6)EOF 帧结束,帧结束是表示该该帧的结束的段。由 7 个位的隐性位构成。

........未写完

CAN协议的学习与理解相关推荐

  1. 【SIP协议】学习初学笔记

    1.SIP这玩意是怎么走来和如何构建的? 通俗的说,SIP就是一个轻量级信令协议,它可以作为音频.视频.及时信息的信令. 说到SIP是怎么出来的就要提H.323,而提到这个标准由不得不提到ITU-T, ...

  2. TCP与UDP协议初步学习——网络环境中分布式进程通信的基本概念

    TCP与UDP协议初步学习--网络环境中分布式进程通信的基本概念 一.单机系统中进程通信方法 进程和进程通信是操作系统中最基本的概念,首先通过回忆操作系统课程中,关于单击系统中进程和进程通信的问题描述 ...

  3. 视频播放压缩的相关知识点:I帧、P帧、B帧、RTMP协议、RTSP协议、GB28181协议等学习记录

    I帧.P帧.B帧.RTMP协议.RTSP协议.GB28181协议等学习记录 引言 1. I帧.P帧.B帧 1.1 P帧 1.2 B帧 1.3 I帧 2.ONVIF协议与GB28181协议,RTMP与R ...

  4. IM通讯协议专题学习(八):金蝶随手记团队的Protobuf应用实践(原理篇)

    本文由金蝶随手记技术团队丁同舟分享. 1.引言 跟移动端IM中追求数据传输效率.网络流量消耗等需求一样,随手记客户端与服务端交互的过程中,对部分数据的传输大小和效率也有较高的要求,普通的数据格式如 J ...

  5. 《C++应用程序性能优化::第五章动态内存管理》学习和理解

    <C++应用程序性能优化::第五章动态内存管理>学习和理解 说明:<C++应用程序性能优化> 作者:冯宏华等 2007年版. 2010.8.29 cs_wuyg@126.com ...

  6. 【赠书】新手速递!深度学习视频理解!

    ‍‍ 视频理解是当前计算机视觉研究领域中备受学术界和工业界关注的方向,随着视频行业的高速发展,如何利用 AI 技术更好地对视频内容进行理解变得越来越重要.今天要给大家介绍的书是<深度学习视频理解 ...

  7. 9月21日云栖精选夜读 | 如何优雅地从四个方面加深对深度学习的理解

    在今年的 ICML 上,深度学习理论成为最大的主题之一.会议第一天,Sanjeev Arora 就展开了关于深度学习理论理解的教程,并从四个方面分析了关于该领域的研究:非凸优化.超参数和泛化.深度的意 ...

  8. 《C++应用程序性能优化::第二章C++语言特性的性能分析》学习和理解

    <C++应用程序性能优化::第二章C++语言特性的性能分析>学习和理解 说明:<C++应用程序性能优化> 作者:冯宏华等 2007年版.最近出了新版,看了目录,在前面增加了一章 ...

  9. 如何优雅地从四个方面加深对深度学习的理解

    在今年的 ICML 上,深度学习理论成为最大的主题之一.会议第一天,Sanjeev Arora 就展开了关于深度学习理论理解的教程,并从四个方面分析了关于该领域的研究:非凸优化.超参数和泛化.深度的意 ...

最新文章

  1. angular 管道
  2. matlab-画个拱桥和倒影?
  3. 【JavaSE_07】Java中类和对象-封装特性-思维导图
  4. 一文读懂「Attention is All You Need」| 附代码实现
  5. 清除元素中的子元素html_HTML中的元素简介
  6. 编码风格工作笔记-初步模仿大佬编码风格
  7. 【Keras】Win10系统 + Anaconda+TensorFlow+Keras 环境搭建教程
  8. 你该怎么去学软件测试,过来人告诉你
  9. 如何禁止树莓派屏幕休眠
  10. DFS和BFS算法框架
  11. 人脸关键点检测之PFLD
  12. L1-020. 帅到没朋友
  13. 芝麻信用商家接入指南
  14. centos7 部署安装SRS流媒体服务器
  15. 使用CLion开发STM32时无法生成hex文件的解决办法
  16. php中的refresh,PHP mysqli_refresh() 函数用法及示例
  17. 数据库小型教务系统,成绩管理系统
  18. Android界面隐藏软键盘的探索(兼findViewById返回null解决办法)
  19. python足球联赛赛程_足球联赛赛程表生成
  20. 热力地图高德_高德地图

热门文章

  1. JS网页加载状态判断
  2. 制作无人值守的WINXP安装光盘(3)(转)
  3. gephi的安装和使用
  4. mesh路由器哪个品牌好(无线mesh组网推荐路由器)
  5. Windows安装DB2
  6. 边界层气象学期末复习笔记
  7. js对象排序,根据对象的key来排序,按ASCII码排序
  8. 怎么修改linux系统时区,Linux系统时区该怎么修改?
  9. 使用PSFTP进行Windows与Linux远程服务器的上传下载
  10. 【ICS551 时钟缓冲器国产替代量产】