发表于:2003-08-11 14:19:00
1楼
柳生一刀斋:
1、总线控制权切换的时候,接收端会不会发生数据顺序的紊乱?
Can是一个多主网络,总线上的任何一个节点都可以主动发送报文,然而当前网络到底谁是主(即谁享有总线控制权),由CAN的总线仲裁机制决定。当总线权发生切换时,想要发送数据的节点一起参与总线仲裁,优先级高的享有总线控制权,而接收节点此时接收到的信息必然是获得总线控制权的发送节点所发送的仲裁标示符,一旦某一节点享有总线控制权后,总线操作一切正常化了,因此不会发生数据顺序的混乱。
2、在总线上采用广播方式,那听者如何确定数据帧是否应当接收?
广播方式是高效利用通讯带宽的一种通讯方式,因此经常被使用。接收方是否应该接收广播报文一般是通过判断广播报文的标示来实现的。因为既然是广播,那就是面向多个听者,所以在报文中一般不会指定听者是谁(也会碰到特殊的),听者根据广播者是谁来决定是否接收报文。
3、这个和局域网广播有何不同?
抱歉,由于本人对局域网不是行家,所以不能回答该问题。
4、出错帧是在哪里被发现的,总线or节点?
出错帧当然是在节点这里发现的,总线上不存在判断的基础。每个节点在发送或接收的同时会监视总线上的状态,根据检测到的状态并结合CAN出错界定策略,产生响应的错误处理。
5、远程帧(remote_frame)的作用究竟是什么?
远程帧是用来呼叫用的,在CAN中可以实现1对1的通讯,那么在通讯之前首先要在两个点之间建立链路,通讯双方一般是通过远程帧来建立链路的!
6、域内的标识符是请求端的标识符还是发送端的标识符?
关于标示符的定义可以说是百家争鸣、百花齐放。从逻辑上讲标示符不应该说是接收端的或是发送端。因为标示符中完全可以包含双方的信息!特别值得体的是CAN2.0B中支持的扩展格式有29位的标示符,可以定义非常丰富的含义。
7、关于出错处理的问题
首先要明白的是出错帧的发送根本不需要仲裁的。因此不存在谁优先的状况,只要出错了,就会向总线发送出错信息。出错信息有两种:active 和passive,他们对总线的影响程度不一样,active出错会使得整个网络上的所有节点都经历一次active 出错,然后网络才会回复正常,而passive出错不会影响网络上其他节点的正常传输,只影响自身后续的发送!另外CAN在严重出错是会自动进入bus-off。
8、数据传输并不存在结束符
这是一个错误的理解,CAN的每一帧数据都有帧结束标示的(好像是连续11个"1",记不清了),帧空间是在总线空闲时才出现的!当然每两个CAN帧信息间也出现帧空间。帧空间是下一帧信息传输开始的硬同步,网上所有要发送数据的节点就是从这一时刻开始总线竞争的!
以上纯是个人理解,欢迎指正!
dnet