标题：CAN总线协议
概述
CAN总线发展控制器局域网CAN( Controller Area Network)属于现场总线的范畴，是一种有效支持分布式控制系统的串行通信网络。是由德国博世公司在20世纪80年代专门为汽车行业开发的一种串行通信总线。由于其高性能、高可靠性以及独特的设计而越来越受到人们的重视，被广泛应用于诸多领域。而且能够检测出产生的任何错误。当信号传输距离达到10km时，CAN仍可提供高达50kbit/s的数据传输速率。由于CAN总线具有很高的实时性能和应用范围，从位速率最高可达1Mbps的高速网络到低成本多线路的50Kbps网络都可以任意搭配。因此，CAN己经在汽车业、航空业、工业控制、安全防护等领域中得到了广泛应用。
随着CAN总线在各个行业和领域的广泛应用，对其的通信格式标准化也提出了更严格的要求。1991年CAN总线技术规范（Version2.0）制定并发布。该技术规范共包括A和B两个部分。其中2.0A给出了CAN报文标准格式，而2.0B给出了标准的和扩展的两种格式。美国的汽车工程学会SAE在2000年提出了J1939协议，此后该协议成为了货车和客车中控制器局域网的通用标准。相关组织依据国际标准化组织/开放系统互连(International Standardi-zation Organization/Open SystemInterconnection，ISO/OSI)参考模型，CAN的ISO/OSI参考模型的层结构。概念和特征下面对CAN协议的媒体访问控制子层的一些概念和特征做如下说明：
(1)报文(Message)总线上的数据以不同报文格式发送，但长度受到限制。当总线空闲时，任何一个网络上的节点都可以发送报文。
(2)信息路由(Information Routing)在CAN中，节点不使用任何关于系统配置的报文，比如站地址，由接收节点根据报文本身特征判断是否接收这帧信息。因此系统扩展时，不用对应用层以及任何节点的软件和硬件作改变，可以直接在CAN中增加节点。
(3)标识符(Identifier) 要传送的报文有特征标识符(是数据帧和远程帧的一个域)，它给出的不是目标节点地址，而是这个报文本身的特征。信息以广播方式在网络上发送，所有节点都可以接收到。节点通过标识符判定是否接收这帧信息。 
(4)数据一致性应确保报文在CAN里同时被所有节点接收或同时不接收，这是配合错误处理和再同步功能实现的。
(5)位传输速率不同的CAN系统速度不同，但在一个给定的系统里，位传输速率是唯一的，并且是固定的。
(6)优先权 由发送数据的报文中的标识符决定报文占用总线的优先权。标识符越小，优先权越高。
(7)远程数据请求(Remote Data Request) 通过发送远程帧，需要数据的节点请求另一节点发送相应的数据。回应节点传送的数据帧与请求数据的远程帧由相同的标识符命名。
(8)仲裁(Arbitration) 只要总线空闲，任何节点都可以向总线发送报文。如果有两个或两个以上的节点同时发送报文，就会引起总线访问碰撞。通过使用标识符的逐位仲裁可以解决这个碰撞。仲裁的机制确保了报文和时间均不损失。当具有相同标识符的数据帧和远程帧同时发送时，数据帧优先于远程帧。在仲裁期间，每一个发送器都对发送位的电平与被监控的总线电平进行比较。如果电平相同，则这个单元可以继续发送，如果发送的是“隐性”电平而监视到的是“显性”电平，那么这个单元就失去了仲裁，必须退出发送状态。
(9)总线状态 总线有“显性”和“隐性”两个状态，“显性”对应逻辑“0”，“隐性”对应逻辑“1”。“显性”状态和“隐性”状态与为“显性”状态，所以两个节点同时分别发送“0”和“1”时，总线上呈现“0”。CAN总线采用二进制不归零(NRZ)编码方式，所以总线上不是“0”，就是“1”。但是CAN协议并没有具体定义这两种状态的具体实现方式。
(10)故障界定(Confinement) CAN节点能区分瞬时扰动引起的故障和永久性故障。故障节点会被关闭。
(11)应答接收节点对正确接收的报文给出应答，对不一致报文进行标记。
(12)CAN通讯距离最大是10公里（设速率为5Kbps）,或最大通信速率为1Mbps(设通信距离为40米)。
(13)CAN总线上的节点数可达110个。通信介质可在双绞线，同轴电缆，光纤中选择。
(14)报文是短帧结构，短的传送时间使其受干扰概率低，CAN有很好的校验机制，这些都保证了CAN通信的可靠性。
CAN总线协议内容
CAN总线的物理层是将ECU连接至总线的驱动电路。ECU的总数将受限于总线上的电气负荷。物理层定义了物理数据在总线上各节点间的传输过程，主要是连接介质、线路电气特性、数据的编码/解码、位定时和同步的实施标准。总线竞争的原则BOSCH CAN基本上没有对物理层进行定义，但基于CAN的ISO标准对物理层进行了定义。设计一个CAN系统时，物理层具有很大的选择余地，但必须保证CAN协议中媒体访问层非破坏性位仲裁的要求，即出现总线竞争时，具有较高优先权的报文获取总线竞争的原则，所以要求物理层必须支持CAN总线中隐性位和显性位的状态特征。在没有发送显性位时，总线处于隐性状态，空闲时，总线处于隐性状态；当有一个或多个节点发送显性位，显性位覆盖隐性位，使总线处于显性状态。
在此基础上，物理层主要取决于传输速度的要求。从物理结构上看，CAN节点的构成如图7-8所示。在CAN中，物理层从结构上可分为三层：分别是物理信号层(Physical Layer Signaling，PLS)、物理介质附件(Physical MediaAttachment，PMA)层和介质从属接口(Media Dependent：Inter-face，MDI)层。其中PLS连同数据链路层功能由CAN控制器完成，PMA层功能由CAN收发器完成，MDI层定义了电缆和连接器的特性。目前也有支持CAN的微处理器内部集成了CAN控制器和收发器电路，如MC68HC908GZl6。PMA和MDI两层有很多不同的国际或国家或行业标准，也可自行定义，比较流行的是ISOll898定义的高速CAN发送/接收器标准。节点数量理论上，CAN总线上的节点数几乎不受限制，可达到2000个，实际上受电气特性的限制，最多只能接100多个节点。CAN的数据链路层CAN的数据链路层是其核心内容，其中逻辑链路控制(Logical Link control，LLC)完成过滤、过载通知和管理恢复等功能，媒体访问控制(Medium Access control，MAC)子层完成数据打包/解包、帧编码、媒体访问管理、错误检测、错误信令、应答、串并转换等功能。这些功能都是围绕信息帧传送过程展开的。
CAN总线的报文传输和结构
报文类型在CAN2．0B的版本协议中有两种不同的帧格式，不同之处为标识符域的长度不同，含有ll位标识符的帧称之为标准帧，而含有29位标识符的帧称为扩展帧。如CAN1．2版本协议所描述，两个版本的标准数据帧格式和远程帧格式分别是等效的，而扩展格式是CAN2．0B协议新增加的特性。为使控制器设计相对简单，并不要求执行完全的扩展格式，对于新型控制器而言，必须不加任何限制的支持标准格式。但无论是哪种帧格式，在报文传输时都有以下四种不同类型的帧：帧类型(1)数据帧(Data ) 数据帧将数据从发送器传输到接收器。
(2)远程帧(Remote ) 总线单元发出远程帧，请求发送具有同一标识符的数据帧。
(3)错误帧(Error ) 任何单元检测到总线错误就发出错误帧。
(4)过载帧(Overload ) 过载帧用在相邻数据帧或远程帧之间提供附加的延时。
数据帧或远程帧与前一个帧之间都会有一个隔离域，即帧间间隔。数据帧和远程帧可以使用标准帧及扩展帧两种格式。
CAN总线应用领域
CAN总线最初是德国BOSCH为汽车行业的监测，控制而设计的。现已应用到铁路、交通、国防、工程、工业机械、纺织、农用机械、数控、医疗器械机器人、楼宇、安防等方面。目前大多数CAN控制器只做到链路层，然而随着CAN的发展和应用，应用层的硬件设计也成为硬件厂商的考虑范畴。