《2045.基于ARM的CAN 总线的研究和实现.doc》由会员分享,可在线阅读,更多相关《2045.基于ARM的CAN 总线的研究和实现.doc(16页珍藏版)》请在三一办公上搜索。
1、基于ARM的CAN 总线的研究和实现目 录摘 要.1Abstract .11、引言.22、CAN的特点.23、简单CAN通信硬件设计.44、CAN报文传输.5 5、简单CAN信息传递机制的介绍.76、软件设计.87、简单CAN通信协议的指定.118、简单测试.129、CAN网络设计.1310、结束语.15参考文献.15基于ARM的CAN 总线的研究和实现摘要:CAN 总线是一种支持分布式实时控制系统的串行通信的局域网络。由于其高性能、高可靠性、实时性好及其独特的设计, 已广泛应用于控制系统中的各检测和执行机构之间的数据通信。本文针对大型复杂工业现场实时测控网络的要求,介绍了CAN总线的特点,介
2、绍了基于CAN 总线测控节点的设计与实现, 阐述了CAN 总线网络的通信模型和构建方法。重点对基于ATMEL公司的7x256芯片的节点硬件配置、软件功能、尤其是CAN 通信的实现进行了比较详细地讨论。关键词: CAN 总线;7x256;CAN 通信中图分类号:TP215 The research and realization of CAN Bus based on ARMAbstract:CAN Bus is a kind of serial communication local area network (LAN)which supports distributed real-time
3、control system.Due to its high performance, high reliability,good performance of real-time and its unique design,CAN Bus has been widely applied in the data communication between the testing and implementing agencies in the control system. At the request of real-time monitoring and control network i
4、n the large-scale industrial complex scene,this paper has introduced the features of CAN Bus,the design and implementation of monitoringand control nodes based on CAN Bus.It has described the communication model and costruction methods of CAN Bus network.This paper has focused on the detailed discus
5、sion of node hardware configuration and soft function of 7x256 chip based on ATMEL company,especially the realization of CAN Bus. Key words :CAN bus;7x256; CAN communication1、引言 目前在某些测控系统中仍采用RS - 485 串行总线通讯。由于该方式只能构成主从式结构的通讯网络,一旦主节点出现故障,就会导致整个系统处于瘫痪状态,系统总体可靠性较低。此外,RS - 485 网络在任意时刻,总线只能允许一个节点向总线发送数据。
6、如果总线上的某些节点发生故障,导致多于一个以上的节点向总线发送数据时,就极有可能使总线呈现短路状态,从而损坏某些节点的RS - 485 驱动器,导致故障范围的进一步扩大。针对这些问题,RS - 485 网络本身无法给出一个良好的解决方法。而CAN 总线技术由于具有多主工作方式、采用非破坏性总线仲裁技术、信号传输采用短帧结构等特点,可使这些问题得到较好的解决。CAN, 全称为“Controller Area Network”, 即控制器局域网, 最早由德国BOSCH 公司提出, 主要用于汽车内部测量与控制中心之间的数据通信。如发动机管理系统、变速箱控制器、仪表装备、电子主干系统中, 均嵌入CAN
7、 控制装置。由于其卓越的性能、极高的可靠性, 独特灵活的设计和低廉的价格, 现已广泛应用于工业现域控制、智能大厦、小区安防、交通工具、医疗仪器环境监控等众多领域。已被公认为几种最有前途的现场总线之一。本文研究的是基于ARM的CAN 总线的数据通信。具体实现CAN总线上一对一,以及一对多的数据通信。2、CAN的特点 CAN总线是一种支持分布式实时控制系统的串行通信局域网。由于其高性能、高可靠性、实时性等优点,已广泛应用于控制系统中的检测和执行机构之间的数据通信。它具有以下一些技术特性:(1) 多主控制在总线空闲时,所有的单元都可开始发送消息(多主控制)。最先访问总线的单元可获得发送权(CSMA/
8、CA 方式)。多个单元同时开始发送时,发送高优先级ID 消息的单元可获得发送权。(2) 消息的发送在CAN 协议中,所有的消息都以固定的格式发送。总线空闲时,所有与总线相连的单元都可以开始发送新消息。两个以上的单元同时开始发送消息时,根据标识符(Identifier 以下称为 ID)决定优先级。ID 并不是表示发送的目的地址,而是表示访问总线的消息的优先级。两个以上的单元同时开始发送消息时,对各消息ID 的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作。(3) 系统的柔软性与总线相连的单元没有类似于“地址”的信息。因此在总
9、线上增加单元时,连接在总线上的其它单元的软硬件及应用层都不需要改变。(4) 通信速度根据整个网络的规模,可设定适合的通信速度。在同一网络中,所有单元必须设定成统一的通信速度。即使有一个单元的通信速度与其它的不一样,此单元也会输出错误信号,妨碍整个网络的通信。不同网络间则可以有不同的通信速度。(5) 远程数据请求可通过发送“遥控帧” 请求其他单元发送数据。(6) 错误检测功能错误通知功能错误恢复功能所有的单元都可以检测错误(错误检测功能)。检测出错误的单元会立即同时通知其他所有单元(错误通知功能)。正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消
10、息直到成功发送为止(错误恢复功能)。(7) 故障封闭CAN 可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上发生持续数据错误时,可将引起故障的单元从总线上隔离出去。(8) 连接CAN 总线时可同时连接多个单元。可连接的单元总数理论上是没有限制的。但实际上可连接的单元数受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少。CAN 总线符合ISO11898 标准,最大传输速率可达1MB/ s ,最大传输距离为10km(传输速率约为5K) ,传输介质可为双绞线、同
11、轴电缆,光纤等。由于CAN 总线是一种很有发展前景的现场总线,因此得到了国际上很多大公司的支持。基于CAN 总线的以上特点,它特别适用于系统分布比较分散、实时性要求高、现场环境干扰大的场合。3 、简单CAN通信硬件设计 节点控制器ARM芯片选用 ATMEL公司的7x256, 属ARM7 系列芯片。ARM7 系列是具有ARM7TDMI 内核的32 位嵌入式微处理器, 是目前应用很广的嵌入式RISC 处理器。该系列芯片体积小、功耗低、成本低, 高性能与灵活性相结合, 有较多的寄存器, 提供了扩充的增强的固定长的16/32位双指令集。此芯片集成了外设CAN 控制器。 芯片支持片上断点和调试点支持,
12、具有先进的软件开发和调试环境。又因为此处理器芯片自身集成了CAN 控制器, 可以自动处理数据链路层和部分物理层,为CPU提供了完整的关于V2.0 Part A和V2.0 Part B协议功能,可以自动处理数据链路层和部分物理层。 总线数据波特度均可达1Mbps; 可访问32 位的寄存器和RAM; 全局验收过滤器可识别几乎所有总线的11 位和29 位Rx 标识符; 验收过滤器为选择的标准标识符提供了FullCAN模式自动接收功能。所以使用ATMEL的7x256省去了CAN 控制器外围电路的设计, 同时也减少了线路干扰。CAN 收发器采用PHILIPS 公司的TJA1050 高速CAN 收发器。收
13、发器是CAN 协议控制器和物理总线之间的接口。它最初是应用在波特率范围在60k 波特到1M波特的高速自动化应用中。TJA1050 可以为总线提供不同的发送性能, 为CAN 控制器提供不同的接收性能。而且它与“ISO 11898”标准完全兼容。TJA1050 提供两种模式供用户使用。用过引脚S 可以选择高速模式或静音模式。高速模式就是普通的工作模式, 将引脚S 接地可以进入这种模式。如果引脚S 没有连接, 高速模式就是默认的工作模式。在静音模式中, 发送器是禁止的。但其他功能可以继续使用。将S 引脚连接到Vcc 可以进入这个模式。静音模式可以防止在CAN 控制器不受控制时对网络通讯造成堵塞。本设
14、计要实现发送和接收, 所以将S 接地进入普通模式。总体的原理图如图1所示:CAN控制器TJA1050ARM7芯片 TXRXCANLCANHCAN总线 图1 硬件设计原理图4、CAN报文传输报文传输由以下4 种不同的帧类型所表示和控制:- 数据帧:数据帧携带数据从发送器至接收器。- 远程帧:总线单元发出远程帧,请求发送具有同一识别符的数据帧。- 错误帧:任何单元检测到一总线错误就发出错误帧。- 过载帧:过载帧用以在先行的和后续的数据帧(或远程帧)之间提供一附加的延时。数据帧(或远程帧)通过帧间空间与前述的各帧分开。因在实际应用中基本上都是进行信息的采集及传递工作,所以这里仅仅介绍下数据帧 。数据
15、帧由7 个不同的位场组成:帧起始、仲裁场、控制场、数据场、CRC 场、应答场、帧结尾。数据场的长度可以为0。数据帧的结构如图2所示:图2 数据帧结构图(1)帧起始它标志数据帧和远程帧的起始,由一个单独的“显性”位组成。只在总线空闲时,才允许站开始发送(信号)。所有的站必须同步于首先开始发送信息的站的帧起始前沿。(2)仲裁场仲裁场包括识别符和远程发送请求位(RTR)。识别符:识别符的长度为11 位。这些位的发送顺序是从ID-10 到ID-0。最低位是ID-0。最高的7 位(ID-10 到ID-4)必须不能全是“隐性”。RTR 位:该位在数据帧里必须为“显性”,而在远程帧里必须为“隐性”(3)控制
16、场控制场由6 个位组成,包括数据长度代码和两个将来作为扩展用的保留位。所发送的保留位必须为“显性”。接收器接收所有由“显性”和“隐性”组合在一起的位。数据长度代码:数据长度代码指示了数据场中字节数量。数据长度代码为4 个位,在控制场里被发送。(4)数据场数据场由数据帧中的发送数据组成。它可以为08 个字节,每字节包含了8 个位,首先发送MSB。(5)CRC 场CRC场包括CRC 序列(CRC SEQUENCE),其后是CRC 界定符(CRC DELIMITER)。(6)应答场应答场长度为2 个位,包含应答间隙(ACK SLOT)和应答界定符(ACK DELIMITER)。在应答场里,发送站发送
17、两个“隐性”位。当接收器正确地接收到有效的报文,接收器就会在应答间隙(ACK SLOT)期间(发送ACK 信号)向发送器发送一“显性”的位以示应答。(7)帧结尾每一个数据帧和远程帧均由一标志序列界定。这个标志序列由7 个“隐性”位组成。5、简单的CAN信息传递机制的介绍 7x256的CAN控制器上有8个独立的邮箱。任何邮箱都可以通过程序设置为接收缓冲区(甚至是不连续的缓冲区)。当缓冲区满的时候一个中断就会被触发。邮箱的设置使开始接收的信息可以被锁存在CAN控制寄存器中。任何一个邮箱在指定其为接收邮箱的时候,可以指定其类型为Receive Mode,或者Receive with Overwrit
18、e Mode,如果将邮箱设置为Receive with Overwrite Mode ,那么如果在申请得到应答之前又接收到了新的信息,那么原来寄存器中的信息会被新接收到的信息覆盖掉。如果将邮箱设置为Receive Mode 模式,那么当邮箱中存在已接收的数据且还没有被应用程序通知其使用完毕时,该邮箱将拒绝接收任何信息。任何邮箱也都可以设置为发送缓冲区。多个发送邮箱可以在同一时间内被使能。每一个邮箱都可以被独立的设置为不同的优先级。 CPU通过CAN控制器邮箱读写数据或信息。每个邮箱均被分配了一个标志符(ID)。CAN控制器通过压缩或解码数据信息创建或解码数据帧。程序运行管理下的CAN控制器可以
19、自动的处理远程帧、错误帧和过载帧。 CAN模块有8个缓冲区,也可以称作通道或者邮箱。每个正在应用的邮箱都被定义了一个与CAN标志符对应的标志符。报文标志符可以和标准帧标志符或扩展帧相匹配。标志符在CAN初始化时就被定义好了,但是可以在以后被更改以使邮箱可以处理新的信息。可以为多个邮箱配置相同的ID。每个邮箱可以被配置为独立的接收或发送模块。邮箱类型可以通过邮箱模式寄存器(CAN MMRx)的MOT位定义。如果邮箱ID寄存器(CAN_MIDx)中的MIDE被置位,那么邮箱可以处理29位扩展的格式标志符,否则,邮箱将处理标准格式标志符。一旦一个新的信息被接收,它的ID会与邮箱掩码寄存器的值相与并与
20、邮箱ID寄存器的值相比较。如果被接收,那么这个信息的ID将被复制到邮箱ID寄存器。 6 、软件设计 程序主体结构为: CAN 驱动程序部分。CAN 驱动程序是针对ARM芯片上CAN 接口模块编写的。CAN 驱动程序主要包括 CAN 控制器初始化程序; 发送子程序; 接收子程序; 中断处理程序。下面主要对CAN 控制器初始化程序进行简要的分析。CAN控制器驱动程序初始化基本流程如下所述:1. 设置复用的PIO引脚连接到CAN控制器。2. 使能CAN控制器输入时钟。3. 设置CAN控制器的波特率。4. 向高级中断控制器(AIC)注册CAN中断(需要编写相应的CAN中断服务子函数)。5. 使能AIC
21、控制器的CAN中断。6. 使能CAN控制器。7. 使能CAN控制器的相关中断。8. 设置CAN邮箱(包括邮箱ID号、掩码、传输数据、传输数据长度、邮箱类型等)。代码分析: /*- 初始化CAN控制器 -*/* 指定CAN收发引脚由CAN控制器控制AT91C_BASE_PIOA-PIO_PDR = CAN_MASK;AT91C_BASE_PIOA-PIO_ASR = CAN_MASK;/* 使能CAN输入时钟AT91C_BASE_PMC-PMC_PCER = 1 AIC_SVRAT91C_ID_CAN = (unsigned int)CANIrqHandler;/* 注册CAN中断的优先级跟触发
22、模式AT91C_BASE_AIC-AIC_SMRAT91C_ID_CAN = AT91C_AIC_PRIOR_HIGHEST | AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL;/* 设置CAN波特率AT91C_BASE_CAN-CAN_BR = CAN_BR_500K;#if TRANSMIT_TYPE = RECV/* 禁止CAN中断AT91C_BASE_CAN-CAN_IDR = AT91C_CAN_MB1;/* 设置MB0 /* 设置邮箱0的ID号(标准帧)AT91C_BASE_CAN-CAN_MB0.CAN_MB_MID = 0x5AA CAN_MB0.CAN_MB
23、_MAM = 0xFFFFFFFF; /设置邮箱 MB0的模式为接收邮箱AT91C_BASE_CAN-CAN_MB0.CAN_MB_MMR = AT91C_CAN_MOT_RX;/* 使能MB0中断AT91C_BASE_CAN-CAN_IER = AT91C_CAN_MB0; /* 设置MB2AT91C_BASE_CAN-CAN_MB2.CAN_MB_MID = 0x5AA CAN_MB2.CAN_MB_MDH = 0; / 数据AT91C_BASE_CAN-CAN_MB2.CAN_MB_MDL = 0; / 数据AT91C_BASE_CAN-CAN_MB2.CAN_MB_MMR= AT91C
24、_CAN_MOT_CONSUMER; / MB1为生产者邮箱/* 使能MB0中断AT91C_BASE_CAN-CAN_IER = AT91C_CAN_MB2;#else/* 禁止CAN中断AT91C_BASE_CAN-CAN_IDR = AT91C_CAN_MB1;/* 设置MB1AT91C_BASE_CAN-CAN_MB1.CAN_MB_MID = 0x5AA CAN_MB1.CAN_MB_MDH = SEND_DATA_H; / 数据AT91C_BASE_CAN-CAN_MB1.CAN_MB_MDL = SEND_DATA_L; / 数据AT91C_BASE_CAN-CAN_MB1.CAN
25、_MB_MMR = AT91C_CAN_MOT_TX; / MB1为发送邮箱#endif/* 使能CANAT91C_BASE_CAN-CAN_MR = AT91C_CAN_CANEN;/* 使能CAN中断并主动清除一次中断AT91C_BASE_AIC-AIC_IECR = 1 AIC_ICCR = 1 AT91C_ID_CAN;/*- CAN控制器初始化结束 -*/7、简单的CAN通信协议的制定该通信协议仅仅是为了简单的对CAN总线的一对一,以及一对多的通信进行测试,没有具体的根据实际的应用需求进行分析设计。如果真正的用于工业现场的CAN总线协议要比这个复杂的多得多。首先,需要对所用到的节点的
26、邮箱进行设置(配置其 ID,掩码,模式等),以及节点的性质的配置(主机或者从机)。而在真正的工业现场应用中,硬性的规定节点的性质以及邮箱的ID号实在是一种非常落后的实现方式,灵活性跟扩展性都大大的受到了限制。在真正的应用中,任何一个节点都可以充当一个主机的身份与总线上其他的节点进行通信,而总线上的所有节点可以由主机发送一个重置ID号的命令后自动完成ID号的重新分配工作,上层软件会将此信息进行保存并用于之后的访问。 主机以及从机中所用到的邮箱的ID号的简单设置如下:主机邮箱号 掩码 邮箱ID 邮箱性质 说明MB0 发送 用于实现一对多或者一对一的数据访问 MB2 0x0 0x1 接收 MB3 0
27、x0 0x1 接收 MB4 0x0 0x1 接收 可以接收所有不同ID号的从MB5 0x0 0x1 接收 信息MB6 0x0 0x1 接收MB7 0x0 0x1 接收从机邮箱号 掩码 邮箱ID 邮箱性质 说明MB0 0x0 0xf1 接收 专门用于接收广播MB1 0x0 0xf2 接收 专门用于点对点接收MB2 发送邮箱 回发数据MB3 发送邮箱 回发数据邮箱掩码设置为0x0,邮箱0,邮箱1均可以接收到主机发送过来的命令,收到主机发送过来的数据后,则分别进行检测,如果收到的是一对多的采集命令,则不用再做邮箱ID号的检测,直接将邮箱准备好的数据发送回去; 如果收到的是一对一的采集命令,则在进行邮
28、箱ID号的匹配检测,如果ID号匹配,则将准备好的数据发送回去,否则不做任何处理。 将主机的接收邮箱掩码设置为0x0,可以接收总线上任何一个节点发过来的数据,其一定程度上充当了一个万能接收的角色。CAN的上层通信协议是对CAN总线协议中数据场所包含信息的不同功能或性质的进一步细化,我们所准备的信息需要根据这个协议写入CAN总线协议的数据场。根据7x256的邮箱设计机制,将长度固定为64位,具体实现如下:1 编码顺序由低位段到高位段;2 采用CAN2.0标准帧格式;3 低32位为信息部分,高32位为数据部分;4 低32位数据为信息位,定义如下: 第一个字节为命令信息:0xAA 一对多的信息采集 符
29、合条件的从机收采集命令后回发一个包含了采集信息的数据帧0xBB 一对一的信息采集 符合条件的从机收到采集命令后回发一个包含了采集信息的数据帧5高32位数据为数据信息 对于主机发送的报文,这32位保留 ,暂时为0 对于从机节点发送的报文,这32位为携带的数据信息 8、简单测试测试工作是在ADS1.2调试平台下进行的。测试过程中的数据信息需要在PC机上进行显示,但是如果是单纯的CAN数据是无法直接在PC机上显示的,于是,增加了一个CAN数据到串口数据的转化模块,具体的转化细节因不是本文讨论的重点,所以不作介绍了。 数据通过一个串口软件在PC机上进行显示。调试工作用到三块开发板(一块开发板用作主机,
30、其余的两块用于挂接到总线上的从机),并口线 ,串口线等。首先测试的是一对一的信息采集。设置主机的采集方式为一对一(低32位命令信息为0xAA,高32位数据信息为0),然后指定需要采集数据的从机上的邮箱ID号,当相应的从机邮箱收到信息后,会将准备好的数据返回给主机。仿真调试程序,看PC机显示结果是否为我们指定的数据。最后,测试的是一对多得信息采集。设置主机的采集方式为一对多(低32位命令信息为0xBB,高32位数据信息为0),然后指定需要采集数据的从机上的邮箱ID(随便一个ID号就可以了,因为在此情况下,没有对ID号进行匹配),当相应的从机组邮箱收到信息后,会将准备好的数据返回给主机。仿真调试,
31、看PC机显示结果是否采集到了多个信息数据。9、CAN网络设计考虑到应用于工业现场数据采集的实际需求,可以将整个CAN通信网络设计成一主多从的实现方式。具体描述如下:1设置一个主机,从机的数目根据实际的采集需求设置。主机和从机的物理载体都是由ARM7芯片设计的控制器。主机和每个从机都对应一个独立的控制器。2从机主要负责数据信息的采集,可以是温度、压力、拉力、速度、位移等工业现场数据。实际应用中会根据需求设置总线上应挂接的从机节点数目,每个节点拥有一个固定的标志符(ID),总线上通过ID识别不同的CAN节点信息。从机节点安装后,用户可以通过按键和液晶设置从机节点采集信息的性质,比如温度、压力等,而
32、从机节点可以通过CAN总线将用户设置的从机状态信息以及从机采集到的数据信息发送给主机。3主机充当一个CAN数据中转和CANRS232数据转换的角色,为整个CAN通信网络的核心。主机通过串口和上位机相连,当从机采集到的信息送达到主机后,主机会通过程序通过上位机软件显示出下位机采集到的数据。挂接到CAN总线上主机和其它从机节点形成了CAN局域网。用户可以通过上位机下达采集从机节点信息或时间校准等命令,而上位机软件会根据用户选择的命令生成一串数据通过串口发送给集成在ARM中的CAN主机,主机通过一系列的数据转换后,将生成的符合CAN通信协议的数据发送给对应的从机节点以完成信息的采集或校准工作。整个网
33、络的拓扑结构如图3所示:ClientClient局域网上位机管理平台AgentClient主控计算机多功能控制器主机CAN试验机单元试验机3试验机4试验机5万能试验机压力试验机试验机1试验机6拉力试验机试验机0图3 整个网络拓扑结构10、结束语 带有CAN通信接口的工业控制产品可以通过双绞线或者光纤接入CAN,这是得CAN的组网和扩展变得更加容易。目前CAN总线的应用研究还在不断的深入,随着CAN总线的国际标准化,具有优先权和仲裁权功能,通信速率高,可靠性和实时性高,连接方便和性能价格比高等优先的CAN网络将会得到迅速的发展和应用。参考文献:1 AT91SAM7X256数据手册.2 杜春雷.
34、ARM体系结构与编程 M . 北京: 清华大学出版社, 2003.3 程希明.CAN 现场总线数据采集系统设计方案.自动化仪表 J .2004,25(6):21- 254 周立功.ARM嵌入式系统基础教程 M .北京: 北京航空航天大学出版社, 2005.1.5 邬宽明. CAN 总线原理和应用系统设计. 北京:北京航空航天大学出版社,19966 阳宪惠, 徐用懋, 魏庆福. 现场总线技术及其应用M. 北京: 清华大学出版社, 1999. 309-324.7 焦海波.嵌入式网络系统设计基于Atmel ARM7系列M. 北京:航空航天大学出版社. 2008.48 美Stephen Prata, C Primer Plus 中文版M。技桥工作室,译.第四版.北京:人民邮电出版社,20029 阳宪惠,魏庆福等. 现场总线技术及其应用M 北京:清华大学出版社,1999.610 周立功.ARM嵌入式系统基础教程 M .北京: 北京航空航天大学出版社, 2005.1