打印
[CAN-bus/DeviceNet]

关于CAN总线各种类型帧的发送和接受的理解

[复制链接]
5077|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hhh489|  楼主 | 2008-10-7 14:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于CAN总线各种类型帧的发送和接受的理解:
    初学CAN总线,对CAN总线上数据的发送和接受有一点自己的理解,不知道对不对,写出来请各位达人拍砖。每个节点都有自己的ID,验收代码寄存器和验收屏蔽寄存器。这三个寄存器构成了一套该节点自己的报文滤波规则。只要是总线上的帧满足该节点的滤波规则,那么总线上的数据就会被接收,反之,则放弃该帧。
    举例说明:假设总线上现在有三个节点A,B,C;他们之间需要互相传发送数据,请求数据;如果节点A要给节点B发送数据,那么在节点A 要发送的的帧里面的标志域(ID)的设置上就要满足节点B的滤波要求,而与节点A本身的ID没有关系;如果三个节点之间只是存在点对点的数据传送,而不存在一点对多点的同时数据传送(广播),那么这三个节点的滤波条件的设置即ID,验收代码寄存器和验收屏蔽寄存器,不能完全相同。
    不知道我的理解对不对?

相关帖子

沙发
caycat| | 2008-10-13 00:30 | 只看该作者

还得继续看书

ID还是总线用于仲裁用的,CAN芯片首先侦听网络,发现总线空闲,就通过ID可以发数据,如果同时都侦听到了总线,ID低的具备优先的权利,接收的话是根据其他节点的要求,选择屏蔽位。

使用特权

评论回复
板凳
cocobat| | 2008-10-22 11:05 | 只看该作者

Leon的一些理解:

Leon的一些理解:



     CAN网络在进行数据传输时,支持多主机结构,只要网络空闲,各个节点都可以发送数据,如果发生两个节点以上同时发送数据而导致冲突,那么所有的节点都停止发送,回到监听总线状态,直到冲突结束,再继续发送。

     对于冲突的处理,由仲裁机构来解决,根据识别符来判断各个节点的优先级,优先级高的重新发送,低的退出发送。



欢迎探讨  http://www.soon-now.com/bbs/dispbbs.asp?boardid=13&id=126&page=1&star=1

使用特权

评论回复
地板
xhtxzxw| | 2008-12-4 22:25 | 只看该作者

嘿嘿

LS:
 CAN网络在进行数据传输时,支持多主机结构,只要网络空闲,各个节点都可以发送数据,如果发生两个节点以上同时发送数据而导致冲突,

"那么所有的节点都停止发送,回到监听总线状态,直到冲突结束,再继续发送。"

加引号的说法是错误的.应该是:
那么只有优先级最高的节点继续发送,其他所有节点都停止发送,回到监听总线状态,直到冲突结束,再继续竞争总线。

使用特权

评论回复
5
王敬| | 2008-12-16 13:13 | 只看该作者

问一下

那如果没有使用优先级呢,ID都一样,会出现什么情况?

使用特权

评论回复
6
王敬| | 2008-12-16 13:18 | 只看该作者

补充

当出现总线仲裁中断时,是系统自动解决仲裁问题,还是需要人为写代码解决呢 ?怎样解决?

使用特权

评论回复
7
xhtxzxw| | 2008-12-16 20:41 | 只看该作者

嘿嘿

硬件完全自动做的,不需要人为参与的.
打个比方吧, N个人闭着眼睛呆在只能通行一人的走廊两侧的房间里, 相当于N个CAN节点吧.

类比:
            CAN节点 ==== 呆在屋子里的闭着眼的人
            CAN总线 ==== 走廊
  CAN使用权总线竞争 ==== 走廊通行权竞争
CAN节点往总线上发ID ==== 人往门外扔鞭**
  ID里面的一个隐性位 ==== 扔一个哑**
  ID里面的一个显性位 ==== 扔一个响**
           总线空闲 ==== 一段时间里走廊上没有人走动的声音也没有**声

仲裁规则:
      发出去的ID和自己收到的ID一样则赢得总线使用权 ==== 扔出去的**该响的响了该哑的哑了则赢得走廊通行权

当发出一个隐性位却收到一个显性位就不需要继续发ID了 === 当扔出去一个哑**却听见有**声就不用继续扔**了


使用特权

评论回复
8
littlef| | 2008-12-18 20:00 | 只看该作者

问个弱相关问题

    我现在只有一个CAN 模块,没有其他的CAN模块和我通信,如果我编程把CAN设置为发送数据帧,那么CAN能把数据发送出去吗?我怎样来判断我是否发送成功了呢?
   比如有两个节点A,B.A发送,B接受,是不是A是否发送成功还要取决于B啊,单独的A是无法发送数据的,是吗?
   希望高手赐教啊,我刚接触CAN.

使用特权

评论回复
9
xhtxzxw| | 2008-12-20 01:47 | 只看该作者

嘿嘿

回LS
一般来说,至少需要两个CAN节点才可以做你所说的测试.

原因:
CAN通信成功的最后一步是:发送方收到了接收方回送的ACK.如果没有这个ACK,发送方就认为这次发送失败了,一般就会不停的反复重发(当然一般也可以设置不自动重发).

有一部分CAN器件,比如SJA1000可以配置工作在"自发自收"模式(自己给自己回ACK,有点象自慰呵呵).这样,如果你的测试装置里有比较方便的人机界面,就可以通过查询SJA1000里面的状态寄存器并通过你的人机界面显示出来,间接的知道CAN的工作是否异常了.

不幸的是,并不是所有的CAN器件都支持"自发自收"模式.这样的话,就必须有至少俩节点了!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

2

帖子

0

粉丝