CAN总线(一)

原创 2012年03月28日 14:46:19

       


 

        控制器局域网协议CAN是德国博世公司开发的一套串行总线通讯协议,特别适用于智能设备之间的互联来构成智能系统或子系统。CAN是一种基于广播通讯机制的协议,这种机制通过使用一种面向消息的传输协议来实现,在这种协议下,不定义具体的站点和站点地址,只定义消息。而通过消息标识符来区别不同的消息。而且很容易向一个CAN网络中添加一个节点,当这一节点仅作为接收者时甚至不需要对己有的节点的软硬件做任何的改动。

        CAN遵循ISO/OSI标准模型,定义了OSI模型的数据链路层(包括逻辑链路控制子层LLC和媒体访问子层MAC)和物理层。其中MAC(媒体访问控制子层)是其核心层。MAC子层可分为完全独立工作的两个部分,即发送部分和接收部分。

    

              图1   CAN总线模型

        物理层是实现电器控制单元与总线相连的电路。电器控制单元的总数取决于总线的电力负载。信号使用差分电压传送,两条信号线被称为CAN_H和CAN_L。静态时均是2.5v左右,此时状态表示为逻辑“1”,也可以叫做隐性。用CAN_H比CAN_L高表示逻辑“0”,称为显性,此时通常电压值为CAN_H=3.5V和CAN_L=1.5V。

      

                    图2物理层逻辑电平

        CAN总线是一种串行数据通信总线,其通信速率最高可达1Mb/sCAN系统内两个任意节点之问的最大传输距离与其位速率有关。当CAN的传输速率达1Mb/s时,最大传输距离为40米,对一般实时控制现场来说足够使用。

        CAN采用了CSMA/CD机制实现总线访问。利用CSMA访问总线,可对总线上信号进行检测,只有当总线处于空闲状态时,才允许发送。在CAN总线上发送的每一条报文都具有唯一的一个11位或29位数字的IDCAN总线状态取决于二进制数“0”而不是“1”,所以ID号越小,则该报文拥有越高的优先权,因此一个为全“0”标识符的报文具有总线上的最高级优先权。

        CAN的标准消息帧结构为CAN 2.0A的消息帧格式,也就是CAN消息帧的标准格式,它有11位标识符。基于CAN2.0A的网络只能接收这种格式的消息。

          

                                                          图3标准数据帧格式

               

                                                图4 扩展数据帧格式

数据帧数据帧由7个不同的位场组成,即帧起始、仲裁场、控制场、数据场、CRC场、应答场和帧结束。其中数据场长度可为0

帧起始(SOF):标志数据帧和远程帧的开始,它仅由一个“显性”位构成,只有在总线处于空闲状态时,才允许开始发送。所有站必须同步于首先开始发送的那个站的帧起始前沿。

仲裁场:在标准格式中,仲裁场由11位标识符和TRR位组成;在扩展格式中,仲裁场由29位标识符和SRR位、标识位以及RTR位组成。

RTR(远程传输请求位):在数据帧中,RJR位必须是“显性”电平,而在远程帧中,RTR位必须是“隐性”电平。

SRR(替代远程请求位):在扩展格式中始终为“隐性”位。

DIE(标识符扩展位)IDE位对于扩展格式属于仲裁场;对于标准格式属于控制场。IDE在标准格式中为“显性”电平,而在扩展格式中为“隐性”电平。

控制场:由6位组成。在标准格式中,一个信息帧中包括DLC、发送“显性”电平的DIE位和保留位r0。在扩展格式中,一个信息帧包括DLC和两个保留位r1r0,这两个位必须发送“显性”电平。

DLC(数据长度码):数据场的字节数目由数据长度码给出。数据长度码为4位,在控制场中被发送。

数据场:由数据帧中被发送的数据组成,可包括08个字节。

CRC场:包括CRC序列和CRC界定符。

应答场:包括两位,即应答间隙和应答界定符。在应答场中发送站送出两个“隐性”位。一个正确接收到有效报文的接收器,在应答间隙期间,将此信息通过传送一个“显性”位报告给发送器。所有接收到匹配CRC序列的站,通过在应答间隙内把“显性”位写入发送器的“隐性”位来报告。应答界定符是应答场的第二位,并且必须是“隐性”位。

帧结束:每个数据帧和远程帧均由7个“隐性”位组成的标志序列界定。

 


关于QVariant的说明

在有些情况下,我们希望把数据存储在一个变量中。例如,我有一个数组,既希望存整数,又希望存浮点数,还希望存string。对于Java来说,很 简单,只要把这个数组声明成Object[]类型的。这是什么意...

CAN总线工作原理

CAN是控制器局域网络(Controller Area Network, CAN)的简称。CAN总线有两条信号线构成,分别是CANL和CANH。相比于RS485总线构成的网络,CAN总线构成的网络更有...

SylixOS CAN总线驱动之三

SylixOS CAN报文传送流程 CAN报文传送流程框图 在SylixOS中CAN报文的传输框图如图 11所示。 图 11 SylixOS CAN报文传输框图 (注:此文档承接之...

STM32Fxx系列CAN总线配置总结

这是我的第一篇级数博客,很久之前就萌生写技术博客的想法,一直没有付诸实践,典型的拖延症患者。最近在使用CAN总线的过程中遇到一些问题,就以此作开始,记录自己的技术成长之路,且方便以后查阅。     ...

基于MCP2515的Linux CAN总线驱动程序设计(一)

基于MCP2515的Linux CAN总线驱动程序设计(一) 网址:http://www.embedu.org/Column/Column596.htm 1.前言 CAN(Control...

STM32 CAN总线应用程序,调试通过仅供参考

1、打开STM32 CAN系统工作时钟        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, EN...

arduino UNO、arduino 2560和can总线-基于mcp2515的一些基础通讯

最近小白做了有关arduino和can总线的通信,先在网上买了基于Arduino的CAN模块,买的时候别买错了,要Arduino版的不是51版的(小白就买错一次)。  然后,我就根据淘宝店家...

基于MCP2515的多路CAN总线接口及驱动程序设计

结合实际需求,提出一种多路CAN总线接口的设计方法。系统硬件主体采用AT91RM9200和MCP2515,操作系统采用ARMLinux。详细介绍硬件的接口设计,针对该硬件接口设计分析ARMLinux下...

(1)can总线基本概念

控制器局域网络(ControllerArea Network 简称CAN)主要用于各种过程(设备)监测及控制。CAN最初是由德国的 Bosch公司为汽车的监测与控制设计的,但由于CA...

STM32,CAN总线过滤器的设置详细讲解

屏蔽位模式: 在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照“必须匹配”和“不用关心”处理。 标识符列表模式: 在标识符列表模式下,屏蔽寄存器也被当做标识符寄存器...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CAN总线(一)
举报原因:
原因补充:

(最多只允许输入30个字)