CAN总线远程帧的理解


由于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的过滤器已在发送远程帧之前做了相应设置)。
       由此可见,远程帧可以使请求更简单,但也非不可代替。
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页