当前位置:网站首页>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的过滤器已在发送远程帧之前做了相应设置)。由此可见,远程帧可以使请求更简单,但也非不可代替。
边栏推荐
- bat倒计时代码
- 从零开始Blazor Server(4)--登录系统
- Mini Program Graduation Works WeChat Food Recipes Mini Program Graduation Design Finished Products (4) Opening Report
- 进制与转换、关键字
- 新书上市 |《谁在掷骰子?》在“不确定性时代”中确定前行
- Generate certificates using KeyStore
- 通配符SSL证书不支持多域名吗?
- 万字解析:vector类
- Flutter Widget 如何启用和屏蔽点击事件
- 机器学习 | MATLAB实现支持向量机回归RegressionSVM参数设定
猜你喜欢

利用正则表达式的回溯实现绕过

数字化转型实践:世界级2B数字化营销的方法框架

Promise learning (4) The ultimate solution for asynchronous programming async + await: write asynchronous code in a synchronous way

LeakCanary如何监听Service、Root View销毁时机?

在线GC日志分析工具——GCeasy

用户体验 | 如何度量用户体验 ?

Promise学习(二)一篇文章带你快速了解Promise中的常用API

Stone Technology builds hard-core brand power and continues to expand the global market

Qt获取文件夹下所有文件

Excel表格打印时不打印标记填充颜色
随机推荐
A new generation of ultra-safe cellular batteries, Sihao Airun goes on sale starting at 139,900 yuan
【随心笔记】假期快过去了,都干了点什么
程序员如何优雅地解决线上问题?
【cartographer ros】十: 延时和误差分析
迁移学习冻结网络的方法:
数字化转型实践:世界级2B数字化营销的方法框架
Introduction to data warehouse layering (real-time data warehouse architecture)
在线GC日志分析工具——GCeasy
R语言ggplot2可视化:使用ggpubr包的geom_exec函数执行geom_*函数(没有任何参数需要放置在aes中)
The meaning and trigger conditions of gc
MySQL常用语句总结
The use of Ts - Map type
石头科技打造硬核品牌力 持续出海拓展全球市场
leetcode/submatrix element sum
leetcode/子矩阵元素和
Why Metropolis–Hastings Works
NIO‘s Sword(思维,取模,推公式)
千万级乘客排队系统重构&压测方案——总结篇
leetcode每日一题:字符串压缩
R语言拟合ARIMA模型:使用forecast包中的auto.arima函数自动搜索最佳参数组合、模型阶数(p,d,q)、设置seasonal参数指定在模型中是否包含季节信息