当前位置:网站首页>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的过滤器已在发送远程帧之前做了相应设置)。由此可见,远程帧可以使请求更简单,但也非不可代替。
边栏推荐
- Generate certificates using KeyStore
- C#/VB.NET 将PPT或PPTX转换为图像
- slice、splice、split傻傻分不清
- Sparse representation - study notes
- shell--面试题
- [CLion] CLion always prompts "This file does not belong to any project target xxx" solution
- 一文说明白ECDSA spec256k1 spec256r1 EdDSA ed25519千丝万缕的关系
- R语言检验时间序列的平稳性:使用tseries包的adf.test函数实现增强的Dickey-Fuller(ADF)检验、检验时序数据是否具有均值回归特性(平稳性)、具有均值回归特性的案例
- Push the local project to the remote repository
- [Nodejs] node的fs模块
猜你喜欢
轮询和长轮询的区别
Small application project works WeChat gourmet recipes applet graduation design of finished product (1) the development profile
进制与转换、关键字
Qt获取文件夹下所有文件
redis6 跟着b站尚硅谷学习
【公开课预告】:超分辨率技术在视频画质增强领域的研究与应用
Golang内存分析工具gctrace和pprof实战
【likeshop】回收租凭系统100%开源无加密 商城+回收+租赁
A new generation of ultra-safe cellular batteries, Sihao Airun goes on sale starting at 139,900 yuan
Jenkins安装插件遇到的问题
随机推荐
进制与转换、关键字
小程序毕设作品之微信美食菜谱小程序毕业设计成品(4)开题报告
Pve delete virtual machine "for a collection"
石头科技打造硬核品牌力 持续出海拓展全球市场
通配符SSL证书不支持多域名吗?
[Cloud Residency Co-Creation] Huawei Cloud Global Scheduling Technology and Practice of Distributed Technology
Promise学习(一)Promise是什么?怎么用?回调地狱怎么解决?
shell--第九章练习
用户体验 | 如何度量用户体验 ?
爱可可AI前沿推介(8.1)
Envoy 源码流程图
Promise learning (2) An article takes you to quickly understand the common APIs in Promise
Push the local project to the remote repository
一篇文章,带你详细了解华为认证体系证书(2)
xss-labs靶场挑战
SCHEMA解惑
[CLion] CLion always prompts "This file does not belong to any project target xxx" solution
Solve vscode input! Unable to quickly generate skeletons (three methods for the new version of vscode to quickly generate skeletons)
【无标题】
在线GC日志分析工具——GCeasy