当前位置:网站首页>CAN通信的数据帧和远程帧
CAN通信的数据帧和远程帧
2022-08-01 11:27:00 【路过的小熊~】
(先来一波操作,再放概念)
远程帧和数据帧非常相似,不同之处在于:
(1)RTR位,数据帧为0,远程帧为1;
(2)远程帧由6个场组成:帧起始,仲裁场,控制场,CRC场,应答场,帧结束,比数据帧少了数据场。
(3)远程帧发送特定的CAN ID,然后对应的ID的CAN节点收到远程帧之后,自动返回一个数据帧。
环回模式下(方便调试用),设置为发送远程帧:
STM32端通过J-Link RTT调试软件可以打印出CAN接收到数据(在中断服务函数里面接收);
而通过CANTest软件不能接收到STM32端发送出来的数据,因为远程帧比数据帧少了数据场;
正常模式下:通过CANTest软件手动发送一组数据,STM32端通过J-Link RTT调试软件也可以打印出CAN接收到的数据;
附上正常模式下,发送数据帧的显示效果:
概念
看完上文,可以简单理解为:
如果A需要B节点向你发送数据!A可以用B节点的ID,发送一个Remote frame(远程帧),B收到A ID 的 Remote Frame 之后就发送数据给A!发送的数据就是数据帧!
远程帧就像命令,命令相应的节点返回一个数据包.
应用(划重点):如果需要CAN上某个节点向你发送数据,你可以用这个节点的ID,发送一个Remote frame(远程帧),这样节点接收到这个Remote frame之后会自动发送数据给你!发送的数据就是数据帧!
主要用来请求某个指定节点发送数据,而且避免总线冲突。
总结
由于CAN总线发送帧时,仲裁方法只依靠帧ID号,当有两个相同ID号的帧同时竞争总线时,总线就无法判别出让哪个设备先发送帧,于是就造成总线冲突
。
为了总线访问安全,每个发送器必须用独属于自己的ID号往外发送帧
(多个接收器的过滤器ID可以重复),(可以让某种信号帧只使用特定的ID号,而每个设备都是某一种信号的检测源,这样就形成某一特定个设备都只是用特定的ID号往总线上发送数据)。
设有设备A,B,且假设A发送信息的ID为A_ID=1,B发送信息时是用的ID为B_ID=2。
A是收取温度信息的设备,B是采集温度信息的设备。
某一时刻,A需要请求B发送温度信息帧。那么A可有2种方法发送请求:
(1)A发送一帧数据,ID号为B的ID号(B_ID),数据域内容为【请求温度信息】。
B的过滤器设置为接收B_ID帧。
则A发送后被B接收到,B再以B_ID发送温度信息帧。被A接收到。
这看似完美的过程,其实存在可能的总线冲突:如果A发送帧的同时,B也正要往总线上发送温度帧,则造成总线冲突。
当然也可以采用别的方法来解决此问题,如A发送请求温度帧的ID号改成别的,当然B的过滤器也要做相应的设置。
(2)使用远程帧来做信息请求:由于A直接发送B_ID号的数据帧,可能造成总线冲突,但若是A发送远程帧:远程帧的ID号自然是B发送帧使用的ID号(B_ID )。
由于CAN总线仲裁时,数据帧发送的优先级高于远程帧,即使有别的节点设备也在发送以B_ID为ID号的远程帧,因为远程帧除了ID号不同,其他都相同。所以不会造成总线冲突。
当B(前提是以对过滤器设置接受B_ID类型的帧)接受到远程帧后,在软件(注意,是在软件的控制下,而不是硬件自动回应远程帧)控制下,往CAN总线上发送一温度信息帧,即使用B_ID作帧ID号往CAN总线上发送温度信息帧。该帧被A接受到(当然A的过滤器已在发送远程帧之前做了相应设置)。由此可见,远程帧可以使请求更简单,但也非不可代替。
边栏推荐
- Aeraki Mesh 加入 CNCF 云原生全景图
- Why Metropolis–Hastings Works
- ACL 2022 | 文本生成的相关前沿进展
- 千万级乘客排队系统重构&压测方案——总结篇
- Pytest电商项目实战(下)
- Promise学习(四)异步编程的终极解决方案async + await:用同步的方式去写异步代码
- 爱可可AI前沿推介(8.1)
- Transfer learning to freeze the network:
- R语言拟合ARIMA模型:使用forecast包中的auto.arima函数自动搜索最佳参数组合、模型阶数(p,d,q)、设置seasonal参数指定在模型中是否包含季节信息
- 小程序毕设作品之微信美食菜谱小程序毕业设计成品(1)开发概要
猜你喜欢
Qt supports HEIC/HEIF format images
Mysql index related knowledge review one
石头科技打造硬核品牌力 持续出海拓展全球市场
图解MySQL内连接、外连接、左连接、右连接、全连接......太多了
【公开课预告】:超分辨率技术在视频画质增强领域的研究与应用
What is a stepper motor?40 pictures to show you!
Why Metropolis–Hastings Works
判断JS数据类型的四种方法
Mini Program Graduation Works WeChat Food Recipes Mini Program Graduation Design Finished Products (4) Opening Report
在线GC日志分析工具——GCeasy
随机推荐
Introduction to data warehouse layering (real-time data warehouse architecture)
WPF 截图控件之绘制箭头(五)「仿微信」
Promise学习(三)Promise的几个关键性问题 -- 状态改变、执行顺序与机制、多任务串联、异常穿透、中断promise链
July 31, 2022 -- Take your first steps with C# -- Use arrays and foreach statements in C# to store and iterate through sequences of data
Glassmorphism design style
C#/VB.NET 将PPT或PPTX转换为图像
How I secured 70,000 ETH and won a 6 million bug bounty
轮询和长轮询的区别
迁移学习冻结网络的方法:
2022 Go生态圈 rpc 框架 Benchmark
【CLion】CLion 总是提示 “This file does not belong to any project target xxx” 的解决方法
机器学习 | MATLAB实现支持向量机回归RegressionSVM参数设定
石头科技打造硬核品牌力 持续出海拓展全球市场
稀疏表示--学习笔记
新一代超安全蜂窝电池, 思皓爱跑上市13.99万元起售
bat倒计时代码
一篇文章,带你详细了解华为认证体系证书(2)
What is a stepper motor?40 pictures to show you!
R语言ggplot2可视化:使用ggpubr包的ggdensity函数可视化密度图、使用stat_central_tendency函数在密度中添加均值竖线并自定义线条类型
js中常用追加元素的几种方法:append,appendTo,after,before,insertAfter,insertBefore,appendChild