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

STM32 CAN简介及帧格式

一、CAN简介

                                                            图1.CAN简介 

高速CAN:用于短距离、高速

低速CAN: 用于长距离、低速

 二、回顾之前的通信协议对比:

                                                             图2. 通信协议对比

UART:点对点的通信,只有两个设备

I2C:一个主机外挂多个被动的传感器、存储器等模块

SPI:也是一主多从,但是通信速率是最快的,主要应用于高速通信场景

CAN:可以实现多个主控互相通信

三、CAN硬件电路

  • 每个设备通过CAN收发器挂载在CAN总线网络上
  • CAN控制器引出的TX和RX与CAN收发器相连,CAN收发器引出的CANH和CAN L分别与总线的CAN H和CANL相连
  • 高速CAN使用闭环网络,CANH和CANL两端添加120Q的终端电阻
  • 低速CAN使用开环网络,CAN H和CANL其中一端添加2.2kQ的终端电阻

                                                            图3.闭环高速CAN 

         

                                                   图4.开环低速CAN 

注:闭环控制CAN总线的两端120欧电阻作用:

1.防止回波反射(与传输线原理有关)

2.可以将两根差分线的电压“收紧”,,也就是电压拉至同一电压,呈现1状态。当需要0状态的时候由软件来将电压拉开,呈现0状态。(如下)

CAN收发器-TJA1050

                                                          图5.TJA1050原理图 

  • 发送部分: 

首先最右边的CANH和CANL就是CAN总线,连接在总线上。

中间的RECEIVER可以时刻检测总线的电压差,然后输出到左边通过场效应管到RXD引脚(这个场效应管有电平反向的功能,右边为1,输出左边为0。右边为0,输出到左边为1)。

  • 接收部分:

如果TXD给1,则不会对总线进行任何操作,总线呈现默认的隐性电平1。

如果TXD悬空,则默认也是给1

如果TXD给0,则驱动器会把CANH拉高,CANL拉低,输出显性电平0。

如果TXD一直给0,出错了,则显性超时,收发器会主动释放CAN总线。

四、CAN电平标准

                                                               图6.CAN电平标准

这里注意:逻辑1隐性电平逻辑0显性电平

高速CAN规定的状态0或者是状态1,都是由电压差来呈现的。逻辑电平是由两个线的差分电平合成而来的

五、CAN总线帧格式

规定了一下五种帧格式:

                                                             图7.CAN帧类型

主要学习的是数据帧,最复杂,用到的最多

(一)数据帧

                                                         图8,数据帧的构成 

  • 一个起始帧,是一个显性信号,用来标志起始信号
  • identifier(ID):报文ID,标准格式是11位。用来表示后面数据的功能,相 当于加一个名字,同时还用来区分优先级,ID小的报文优先发送,ID大的等到下一次的空闲时间重新发送,不同功能的数据帧ID不同
  • RTR:占据1位必须为显性0,远程请求标志位,用于区分数据帧还是遥控帧。数据帧为0,遥控帧为1
  • IDE:ID扩展标志位,用于区分标准格式还是扩展格式,标准格式固定为显性0(如上半部分),扩展格式固定为隐性1(如下班部分) 
  • r0 : 保留位,必须为显性0,为了以后附加其它功能的
  • DLC : 数据段的长度,例如发一个字节,DLC就给0001,八个字节,就给1000
  • Data : 数据段,最大64位,也就是8个字节(这里数据段必须要给8的倍数
  • CRC段 : 高效检验算法,有15位,对前面所有的数据进行算法计算,从SOF到Data,计算得到一个校验码,然后接收方也是通过CRC进行CRC计算,得到校验码。然后对比发送方的校验码,判断传输是否有误
  • CRC界定符 : 1位,必须是隐性电平
  • ACK槽:应答的作用,发送方发出一帧数据,查看是否收到,发送方发送隐性1,如果接收方存在,则接收方就要发显性0,可以多个设备同时接收(也就是同时拉开)
  • EOF:7个隐性1,作为停止位。

扩展格式:

  • ID:同上
  • SRR:没有用,但是要给隐性电平1
  • IDE:扩展格式标志位,和标准格式相反
  • 之后就和标准格式相同

(二)遥控帧

适合使用频率低,但偶尔又需要集中用几次的数据

                                                             图9.遥控帧的构成

RTR进行数据帧和遥控帧的区分,数据帧为0,遥控帧为1。

请求方发出遥控帧,其中ID表示要请求的数据。响应请求的那边,通过相同ID的数据帧反馈数据。

注:当请求和反馈数据同时发生时,数据帧拥有更高的优先级

(三)错误帧

用途:某个设备检测出错误时,向其它设备通知错误

                                                          图10.错误帧的构成

(四)过载帧

                                                             图11.过载帧的构成 

(五)帧间隔

连续发送数据帧时,中间会有一小段帧间隔

                                                             图12.帧间隔  

六、位填充

  • 位填充规则:发送方每发送5个相同电平后,自动追加一个相反电平的填充位,接收方检测到填充位时,会自动移除填充位,恢复原始数据
  • 例如:          

                即将发送:    10000011 0       10000011110    0111111111110          

                实际发送:    1000001110       1000001111100    011111011111010          

                实际接收:    1000001110       1000001111100    011111011111010          

                移除填充后: 100000110       10000011110    0111111111110

  • 位填充作用:

        1. 增加波形的定时信息,利于接收方执行“再同步”,防止波形长时间无变化,导致接收方不能精确掌握数据采样时机

         2.将正常数据流与“错误帧”和“过载帧”区分开,标志“错误帧”和“过载帧”的特异性(它们都需要6个相同电平

         3.保持CAN总线在发送正常数据流时的活跃状态,防止被误认为总线空闲(规定:出现连续11个隐性1之后,认为是总线空闲)

总结:某个设备想要发送自己的数据时,就操作总线,拉开或者释放,使总线产生一段这样的时序波形,发送方需要依照上面的帧格式的定义来发,接收方同样根据帧格式的定义,来接收解析

http://www.lryc.cn/news/573293.html

相关文章:

  • AR眼镜与3D建模社区建设
  • 3D可视化数字孪生智能服务平台-物联网智控节能控、管、维一体化技术架构
  • RA4M2开发IOT(0)----安装e² studio
  • QVariant详解与属性访问
  • 【设计模式】3.装饰模式
  • 算法导论第二十四章 深度学习前沿:从序列建模到创造式AI
  • MySQL之InnoDB存储引擎深度解析
  • 深度剖析 PACK_SESSIONID 实现原理与安全突破机制
  • 【环境配置】在Ubuntu Server上安装5090 PyTorch环境
  • Kubernetes控制平面组件:Kubelet详解(八):容器存储接口 CSI
  • 项目中后端如何处理异常?
  • 数据分析实操篇:京东淘宝商品实时数据获取与分析
  • Python 的内置函数 hash
  • NVIDIA cuFFTDx文档笔记
  • 资产设备管理系统,Java + Vue,移动端+后台管理,实现设备全生命周期信息精准管控与高效运维
  • Windows/Linux系统 Ollama部署deepseek 大模型
  • 面试题-定义一个函数入参数是any类型,返回值是string类型,如何写出这个函数,代码示例
  • 跨标签页通信(三):Web Storage
  • C# WPF常用调试工具汇总
  • 如何定时发布WordPress文章(多种方法)
  • 【Redis】深入理解 Redis 事务:命令、应用与实战案例
  • CertiK联创顾荣辉将于港大活动发表演讲,分享Web3安全与发展新视角
  • C#测试调用ClosedXML根据批注设置excel单元格内容
  • 企业公用电脑登录安全管控的终极方案:ASP操作系统安全登录管控方案
  • 亚马逊认证考试系列 - 第一部份:基础服务 - AWS SAA C03
  • 客户端面经
  • 决策树:化繁为简的智能决策利器
  • 【Kubernetes】从零搭建K8s集群:虚拟机环境配置全指南(DNS/网络/防火墙/SELinux全解析一站式配置图文教程)
  • 题解:P11501 [ROIR 2019] 探险队(Day 2)
  • FPGA四十年创新:因仿真加速而生,AI加速而盛!