CAN总线通讯实验一、实验目的1.掌握UP-NetARM2410经典版上的CAN总线通讯原理。
2.学习编程实现MCP2510的CAN总线通讯。
3.掌握查询模式的CAN总线通讯程序的设计方法。
二、实验内容学习CAN总线通讯原理,了解CAN总线的结构,阅读CAN控制器MCP2510的芯片文档,掌握MCP2510的相关寄存器的功能和使用方法。
编程实现UP-NetARM2410-CL之间的CAN总线通讯:两个UP-NetARM2410-CL通过CAN总线相连接。
ARM监视串行口,将接收到的字符发送给另一个开发板并通过串口显示(计算机与开发板是通过超级终端通讯的)。
即按PC 键盘通过超级终端发送数据,开发板将接收到的数据通过CAN总线转发,再另一个PC的超级终端上显示数据。
三、预备知识1、用EW ARM集成开发环境,编写和调试程序的基本过程。
2、ARM应用程序的框架结构。
3、会使用Source Insight 3 编辑C语言源程序。
4、了解CAN总线。
四、实验设备及工具硬件:ARM嵌入式开发平台、用于ARM920T的JTAG仿真器、PC机Pentium100以上,CAN通讯电缆。
软件:PC机操作系统Win2000或WinXP、EW ARM集成开发环境、仿真器驱动程序、超级终端通讯程序五、实验原理及说明1.CAN总线概述CAN全称为Controller Area Network,即控制器局域网,是国际上应用最广泛的现场总线之一。
最初,CAN总线被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置ECU之间交换信息,形成汽车电子控制网络。
比如,发动机管理系统、变速箱控制器、仪表装备、电子主干系统中均嵌入CAN控制装置。
一个由CAN总线构成的单一网络中,理论上可以挂接无数个节点。
但是,实际应用中节点数目受网络硬件的电气特性所限制。
例如,当使用Philips P82C250 作为CAN 收发器时,同一网络中允许挂接110个节点。
CAN可提供高达1Mbit/s的数据传输速率,这使实时控制变得非常容易。
另外,硬件的错误检定特性也增强了CAN的抗电磁干扰能力。
CAN的主要优点包括:◆低成本◆极高的总线利用率◆很远的数据传输距离(长达10公里)◆高速的数据传输速率(高达1Mbit/s)◆可根据报文的ID决定接收或屏蔽该报文◆可靠的错误处理和检错机制◆发送的信息遭到破坏后可自动重发◆节点在错误严重的情况下具有自动退出总线的功能◆报文不包含源地址或目标地址仅用标志符来指示功能信息优先级2.CAN总线的电气特性CAN能够使用多种物理介质进行传输,例如:双绞线、光纤等。
最常用的就是双绞线。
信号使用差分电压传送,两条信号线被称为CAN_H和CAN_L,静态时均是2.5V左右,此时状态表示为逻辑1也可以叫做“隐性”。
用CAN_H比CAN_L高表示逻辑0,称为“显性”。
此时,通常电压值为CAN_H=3.5V和CAN_L=1.5V。
当“显性”位和“隐性”位同时发送的时候,最后总线数值将为“显性”。
这种特性,为CAN总线的总裁奠定了基础。
CAN总线的一个位时间可以分成四个部分:同步段,传播段,相位段1和相位段2,每段的时间份额的数目都是可以通过CAN总线控制器(比如MCP2510)编程控制的,而时间份额的大小tq由系统时钟tsys和波特率预分频值BRP决定:tq=BRP/tsys。
如下图所示:图9-1 CAN总线的一个位时间上述四个部分的设定和CAN总线的同步、仲裁等信息有关,请读者参考CAN总线方面的相关资料。
3.CAN总线的MAC帧结构如下图所示,CAN总线的帧数据有两种格式:标准格式和扩展格式。
图9-2 CAN总线的帧数据注:MCP2510中,同时支持上述两种CAN总线的帧格式。
4.UP-NETARM2410-CL上的CAN总线控制器MCP2510UP-NETARM2410-CL上采用MicroChip公司的MCP2510 CAN总线控制器。
其特点如下:◆支持标准格式和扩展格式的CAN数据帧结构◆ 0-8字节的有效数据长度,支持远程帧◆最大1Mbps的可编程波特率◆两个支持过滤器(Fliter、Mask)的接收缓冲区,三个发送缓冲区◆支持回环(Loop Back)模式◆ SPI高速串行总线,最大5MHz(4.5V供电)◆ 3V到5.5V供电平台间的连接方式是将要用于通信的平台的CAN_H和CAN_H相连,CAN_L和CAN_L相连。
系统中,S3C2410X通过SPI同步串行接口和MCP2510相连。
MCP2510的片选信号,通过接在S3C2410X的GPH0上来控制。
通过定义如下宏实现MCP2510的片选:#define MCP2510_Enable() GPHDAT=GPHDAT&0x7fe#define MCP2510_Disable() GPHDAT=GPHDAT|0x01上述的两个宏定义就是对GPH0端口的置1和清0操作。
S3C2410X带有高速SPI接口,可以直接和MCP2510通讯。
通过如下两个函数:SPISend ()//向同步串口发送数据(spi.c)SPIRecv ()//从同步串口读取数据(spi.c)5.MCP2510的控制字如下表所示,MCP2510的控制包括了6种命令:表9-1 MCP2510中的命令命令格式定义复位11000000 设置内部寄存器为默认值,并设置MCP2510到配置状态读取00000011从选定的寄存器的地址开始读取数据写入00000010向选定的寄存器的地址开始写入数据发送请求10000nnn设置一个或者多个发送请求位,发送缓冲区中的数据读取状态10100000轮流检测发送或者接收的状态修改位00000101按位修改寄存器各种命令的时序如下:图9-4 读取命令图9-5 单字节写入命令图9-6 发送请求命令图9-7 修改位命令图9-8 状态读取命令6.波特率的设置:通过设置MCP2510中的CNF1、CNF2、CNF3三个寄存器,实现不同时钟下,CAN 总线通讯的波特率的设置。
在UP-NETARM2410-CL 中,MCP2510的输入时钟为16MHz 。
可以按照如下方式定义CAN 总线通讯的波特率。
表9-2 MCP2510的波特率设置CAN 波特率 同步段 传输段 相位1 相位2 CNF1 CNF2 CNF3 125Kpbs 1 7 4 4 0x03 0x9E 0x03 250Kpbs 1 7 4 4 0x01 0x9E 0x03 500Kpbs 1 7 4 4 0x00 0x9E 0x03 1Mbps1 32 20x000x9E0x037.接受过滤器的设置在MCP2510中有两个Mask过滤器,6个Filter过滤器。
可以控制CAN节点收到指定的一个(或者一组)ID的数据。
Mask和Filter来控制是否接收数据,遵循如下规律:表9-3 Mask和Filter可见,如果要收到所有的数据,只要设置Mask的所有位均为0就可以了。
若要接收指定的ID帧,只要将Mask的所有位均设为1,然后将验收滤波寄存器设置为相应的ID即可。
本实验中使用的是标准帧,因此ID的范围是0~0x7ff。
发送报文中的标准帧ID在函数canWrite()中设置,接收报文端的ID在函数MCP2510_Write_Can_ID()中设置,此函数在函数init_MCP2510中。
函数init_MCP2510和canWrite()在main()函数中。
8.MCP2510的初始化MCP2510的初始化如下步骤:1、软件复位,进入配置模式2、设置CAN总线波特率3、关闭中断4、设置ID过滤器5、切换MCP2510到正常状态(Normal)6、清空接受和发送缓冲区7、开启接收缓冲区,开启中断(可选)9.MCP2510发送和接收数据:MCP2510中有3个发送缓冲区,可以循环使用。
也可以只使用一个发送缓冲区,但是,必须保证在发送的时候,前一次的数据已经发送结束。
MCP2510中有2个接收缓冲区,可以循环使用。
数据的发送和接收均可使用查询或者中断模式,这里,为编程简单,收发数据都采用查询模式。
通过状态读取命令(Read Status Instruction)来判断是否接收到(或者发送出)数据。
注:关于MCP2510的寄存器,操作方式等的详细情况请参考MCP2510的datasheet。
六、实验步骤1. 启动JLink 仿真器并进行初始化配置。
2.启动IAR EW ARM新建或打开工程:CAN总线通讯实验。
3.编写MCP2510驱动函数(MCP2510.c),包括:CAN初始化(init_MCP2510)、发送数据(canWrite)、接收数据(canRead)、查询数据(canPoll)。
4.在主函数中实现将从串口0接收到的数据发送到CAN总线,将从CAN接收到的数据,发送到串口0(Main.c):图9-9 主函数5.在IAR集成开发环境中编译、调试和运行工程程序。
6. 配合PC机的超级终端实现数据收发。
七、思考题1.CAN总线通讯最少需要几根线?如果多个节点应该如何连接?2.为什么CAN总线的可靠性高,传输数率却可以速度比RS232串口快(可达到1Mbps)?。