没有合适的资源?快使用搜索试试~ 我知道了~
首页Freescale-msCAN教程.pdf
Freescale-msCAN教程.pdf
需积分: 9 93 浏览量
更新于2023-05-29
评论
收藏 7.94MB PDF 举报
本教程以 Nicrosystem 开发的 NSCF51AC-R1 型低成本飞思卡尔 coldfire V1 开发板为平台,但相关内容应该适用于其他公司开发的飞思卡尔 coldfire V1 或 S08 开发板,甚至对其他非飞思卡尔 MCU 也有借鉴作用。
资源详情
资源评论
资源推荐

Nicrosystem Freescale Coldfire V1 教程---基于 NSCF51AC-R1 开发板 Nicrosystem@gmail.com
Nicrosystem NSCF51AC-R1 开发板教程
-------CAN 总线教程
作者 Bluehacker <QQ: 282074921> http://blog.ednchina.com/bluehacker
版本 V 1.0
日期 2010 年 8 月 25 日
版权说明 本教程以 Nicrosystem 开发的 NSCF51AC-R1 型低成本飞思卡尔 coldfire V1
开发板为平台,但相关内容应该适用于其他公司开发的飞思卡尔 coldfire V1
或 S08 开发板,甚至对其他非飞思卡尔 MCU 也有借鉴作用。我们通过网络
免费提供此教程电子版本,不收取任何费用,您可以自由下载传播,但请
您不要更改本教程中的任何文字、图片、表格;更不得以任何形式声称拥
有本教程的版权,侵占作者的劳动成果。本教程可能有描述不当或错误之
处,欢迎你指正,但作者和作者所在公司单位不对可能的错误负任何责任。
备注 如果你发现本教程的问题,欢迎您通过 nicrosystem@gmail.com 与我们联
系。也欢迎你关注我们的产品和在电子论坛上的活动
作者的博客:http://blog.ednchina.com/bluehacker
Nicrosystem “我们的 freescale”专栏:
http://bbs.eeworld.com.cn/forum-100-1.html
Nicrosystem 定期在与非网社区开展系列针对飞思卡尔处理器的 diy 活动和
助学活动:http://www.freescaleic.org
Nicrosystem EDN“我们的 freescale”小组:
http://group.ednchina.com/2460/
淘宝:http://nicrosystem.taobao.com

Nicrosystem Freescale Coldfire V1 教程---基于 NSCF51AC-R1 开发板 Nicrosystem@gmail.com
一. CAN 总线的特点和历史
什么是 CAN?
CAN,全称为“Controller Area Network”,即控制器局域网,是国际上应用最广泛的现场
总线之一。最初,CAN 被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置 ECU
之间交换信息,形成汽车电子控制网络。比如:发动机管理系统、变速箱控制器、仪表装备、
电子主干系统中,均嵌入 CAN 控制装置。一个由 CAN 总线构成的单一网络中,理论上可
以挂接无数个节点。实际应用中,节点数目受网络硬件的电气特性所限制。例如,当使用
Philips P82C250 作为 CAN 收发器时,同一网络中允许挂接 110 个节点。CAN 可提供高达
1Mbit/s 的数据传输速率,这使实时控制变得非常容易。另外,硬件的错误检定特性也增强
了 CAN 的抗电磁干扰能力.
CAN 总线历史
CAN 最初出现在 80 年代末的汽车工业中,由德国 Bosch 公司最先提出。当时,由于消
费者对于汽车功能的要求越来越多,而这些功能的实现大多是基于电子操作的,这就使得电
子装置之间的通讯越来越复杂,同时意味着需要更多的连接信号线。提出 CAN 总线的最初
动机就是为了解决现代汽车中庞大的电子控制装置之间的通讯,减少不断增加的信号线。于
是,他们设计了一个单一的网络总线,所有的外围器件可以被挂接在该总线上。1993 年,
CAN 已成为国际标准 ISO11898(高速应用)和 ISO11519(低速应用)。CAN 是一种多主方式
的串行通讯总线,基本设计规范要求有高的位速率,高抗电磁干扰性,而且能够检测出产生
的任何错误。当信号传输距离达到 10Km 时,CAN 仍可提供高达 5Kbit/s 的数据传输速率。
由于 CAN 总线具有很高的实时性能,因此,CAN 已经在汽车工业、航空工业、工业控制、
安全防护等领域中得到了广泛应用
CAN 总线特点
低成本,总线连接简单
CAN 总线为多主站总线,各节点均可在任意时刻主动向网络上的其他节点发送信
息,不分主从,通信灵活
实时性好
极高的总线利用率
很远的数据传输距离(长达 10Km)
高速的数据传输速率(高达 1Mbit/s)
可根据报文的 ID 决定接收或屏蔽该报文
可靠的错误处理和检错机制
发送的信息遭到破坏后,可自动重发
节点在错误严重的情况下具有自动退出总线的功能
报文不包含源地址或目标地址,仅用标志符来指示功能信息、优先级信息
二. CAN 总线基础知识
CAN 总线信号
CAN 总线采用两根线传送差分信号 CANH 和 CANL,这样可以提高抗干扰能力,在
CAN 总线的规范中定义了两个总线状态:“隐性”和“显性”。所谓隐性状态就是指
CANH=CANL=2.5V 的状态,如果总线处于这种状态,认为它在发送’1’;反之,显性状态
代表的是’0’,此时 CANH=3.5V,CANL=1,5V。

Nicrosystem Freescale Coldfire V1 教程---基于 NSCF51AC-R1 开发板 Nicrosystem@gmail.com
CAN 总线冲突仲裁机制
CAN 总线规范只定义了 OSI 7 层模型的最低两层协议,即数据链路层和物理层;现在
很多组织在 CAN 总线规范基础上,定义了很多高层的协议,相当于 OSI 模型的应用层协议。
现在这些高层协议用的广的有 deviceNet,CANOpen,SDS 等
CAN 总线是多主站的总线,各个节点是平等的,CAN 基于报文进行数据传输,每个报
文都有一个独一无二的 ID 号,当多个节点同时发送报文时,就会产生总线冲突,这种情况
下,优先级最高的那个报文将获得总线,并成功发送,其他报文会丢失。一个报文的优先级
是由报文的 ID 号指定的,ID 号越小,优先级越高。
各个节点在发送数据前,都要监听总线是否空闲,如果空闲则可以发送,否则就转入接
收状态。有可能出现这样一种情况:多个节点监听到总线是空闲的,于是大家同时发送报文,
这就出现了冲突。解决冲突的办法是:每个节点在发送报文过程中要不断接收数据,从而检
测发送出去的报文有没有与其他节点发送的报文冲突。如果有冲突,则采用一种称为非破坏
性仲裁机制来避免冲突。
非破坏性仲裁机制的实现依赖于 CAN 总线下面的特点,就是线与。它的含义是如果总

Nicrosystem Freescale Coldfire V1 教程---基于 NSCF51AC-R1 开发板 Nicrosystem@gmail.com
线上正在发送的各个节点发送的全是 1(隐性状态),则总线最后的状态是隐性的,即总线
上传输的数据是 1;反之,只要有一个节点发送的是 0(显性状态),不管其他节点发送的是
什么,则总线最后的状态都是 0,这一点非常类似于一个多输入的与门:只有每个输入都是
1,输出才是 1,而只要有一个输入是 0,输出就是 0。
有了这样的特性,参与发送的每个节点在发送报文的过程中,每发出去一个 bit,都要
同时读回,看看读回的数据是否与发送出去的数据一致?如果一致,则继续发送下一个 bit;
如果不一致,它就知道还有别的优先级比它高的节点在发送数据,这种情况下,称为仲裁失
利,该节点将立刻停止发送,转为接收。这样优先级最高的那个报文将会不受影响的发送出
去。
那些仲裁失利的节点将持续监听总线,直到发现总线又空闲了,它们将再次发送报文,
重复上述过程。
CAN 总线速率与传输距离的关系
CAN 总线传输速度和节点间距离是有关系的,虽然说 CAN 总线最高速度是 1Mbps,即
每秒 1M 位,但要想达到这么高的速度,节点间的距离不能超过 40 米。随着通信两个节点
之间的距离加大,能够达到的最高速度也将下降。具体关系如下:
位速率
kbps
1000 500 250 125 100 50 20 10 5
节点间
距 离
(米)
40 130 270 530 620 1300 3300 6700 10000
CAN 总线报文格式
CAN2.0 规范有两种,分别是 2.0A 和 2.0B。两者的差别是:2.0A 规范规定报文的 ID 号
必须是 11 位的,这种报文称为标准帧。而 2.0B 则除了支持 11 位的 ID 号,还支持 29 位 ID
号,这种称为扩展帧。
CAN 支持以下几种帧:
数据帧:将数据从发送器发送到接收器
远程帧:请求发送具有同一标识符(即同一 ID 号)的数据
错误帧:任何节点检测到总线错误都必须发送错误帧
过载帧:用在相邻数据帧或远程帧之间提供附加的延时
其中数据帧和远程帧可以使用标准帧和扩展帧两种格式。过载帧在当前各种高层协议中
几乎是不使用的,我们可以不去管它。
数据帧格式:
有标准帧和扩展帧两种格式,差别就在于标准帧的标识符(ID)是 11 位的,而扩展帧
是 29 位的。
每个帧开头都有 Inter Frame Space,即用于分割这个帧和前面一个帧。同样一个帧结束
后也可能会有 Inter Frame Space。所谓 Inter Frame Space 就是一段总线空闲状态(总线处于
空闲时是处于隐性状态的,即维持高电平)。当然如果总线很忙,可能这个 Inter Frame Space
会非常短暂,甚至没有。
下图是标准帧的格式:

Nicrosystem Freescale Coldfire V1 教程---基于 NSCF51AC-R1 开发板 Nicrosystem@gmail.com
帧起始有 1 位,标识一个数据帧的开始,且一定是显性,即 0
帧结尾由 7 位隐性状态构成,表示一个数据帧结束
在帧起始位后是 11bit 的仲裁域,即标识符,CAN 总线就是利用这个域来做仲裁的,ID
号越低优先级越高。对于扩展帧,这个域是 29 位的。
接下来的一个 bit 称为 RTR,即远程发送请求位。如果这个帧是数据帧,则该位为 0,
如果是远程帧,则为 1。
接下来 6 个 bit,称为控制域。分别是 1 位的 IDE(标识符扩展),一位的保留位(置 0),
以及 4 位的 DLC(数据长度)
IDE=0 表示这个标准帧;IDE=1 表示是扩展帧
DLC 表示数据帧的字节数,取值(0~8),它指的不是整个帧的长度,而是后面那个数
据域(Data Field)的长度
控制域后面就是 0-8 个字节的数据域,这才是真正要发送的数据。
再后面是 CRC 域,即对前面数据的校验,这样接收方可以判断传输过程中是否出错。
这部分 15 位,在之后有一个一 bit 的 CRC 界定符,总是 1,这个目的就是标识 CRC 域
的结束。
在这之后就是 2bit 的应答域(有的书上称为应答场),第一个 bit 是 ACK,第 2 个 bit
则是界定符(始终是 1)。在发送时,发送节点将这个 ACK bit 设为 1(隐性),接收节
点在正确接收到报文后,将这个 bit 设为 0(显性),这样发送节点会回读到这个 0,它
就知道该帧被正确接收了,否则,就表示没有被正确接收。
最后是连续 7 个隐性位(即连续 7 个 1)表示帧结束(EOF)。节点如果检测到总线上连
续 11 个 1,就表示总线现在处于空闲状态。
扩展帧格式的数据帧与此类似,稍有不同,见下图:
剩余27页未读,继续阅读












安全验证
文档复制为VIP权益,开通VIP直接复制

评论0