基于SJA1000 IP核的CAN总线通信系统
扫描二维码
随时随地手机看文章
摘要:分析了CAN总线控制器的工作原理,以SJA1000为模型,提出基于SOPC技术的CAN总线控制器的设计方案,并完成SJA1000 IP核的设计;完成了在Altcra的Cyclone III型FPGA芯片上集成微处理器核、SJA1000 IP核、数据RAM、程序ROM为一体的完整CAN总线通信系统的设计。实验结果验证了SJA1000 IP核设计方案的合理性。
关键词:CAN总线;SOPC;IP核;FPGA
引言
CAN(Controller Area Network)是拧制器局域网的简称,是20世纪80年代初由德国BOSCH公司提出来的一种串行数据通信协议,主要用于解决当时由于汽车功能越来越多而导致汽车内部信号连接线增多的问题。随后CAN总线迅速发展,并于1993年被列入ISO国际标准,形成了IOS 11898标准。至今,CAN总线已经被公认为几种最有前途的现场总线之一,其应用范围也从当初的汽车行业扩展到了机械工业、交通工具、医疗设备、建筑、环境控制等诸多领域中。
伴随着CAN总线的高速发展,用户对其也提出了更高的要求。这无疑给CAN总线带来发展机遇的同时也带来了巨大的挑战。在这种新形势下,CAN总线原有的设计方案和技术就显得有些力不从心。
可编程片上系统(System On a Programmable Chip,SOPC)是一种新型的系统软硬件协同设计的开发技术,是电路系统发展的一个重要方向。它在集成度、设计灵活性以及可移植性等方面上的优越性无疑可以给CAN总线系统设计带来新的动力,使其能够快速地适应新形势下的挑战。
1 CAN总线控制器的工作原理
SJA1000芯片是Philips公司的一款独立CAN总线控制器,主要用于移动目标和一般工业环境中的CAN总线系统上。相埘于它的前一款PCA 82C200,SJA1000主要的改进是在原有Basic CAN模式的基础上增加了另一种工作模式(PeliCAN)——这种模式能够支持拥有很多新特性的CAN 2.0B协议。出于兼容性的考虑,这两种工作模式在SJA1000上都能够实现,通过配置时钟分频器寄存器,就可以在两种工作模式之间转换。但是应特别注意的是芯片在复位后的默认模式为BasicCAN。
2 SJA1000的设计
2.1 SJA1000的功能
SJA1000是一款独立的CAN总线控制器,在CAN总线网络中的功能与作用和一般的CAN总线控制器相同,都是用来实现CAN总线协议的模块。SJA1000在CAN总线系统中的位置如图1所示。
在图中共描绘了2个节点:一个标准参考模型节点和一个包含了SJA1000设备的节点。通过这样的对比可以更加清楚地理解SJA1000的功能与作用。
2.2 SJA1000的结构
按照SJA1000用户使用手册中的叙述,其内部结构如图2所示。
从SJA1000的内部结构图可以了解到SJA1000的功能主要是由以下几个控制模块完成:接口管理逻辑、发送缓冲器、接收缓冲器、验收滤波器、位流处理器、位时序逻辑、错误管理逻辑。
2.3 SJA1000 IP核设计
CAN总线控制器在系统中主要是用来完成LLC和MAC子层功能的。在综合参考了几种CAN总线控制器之后,我们选定了SJA1000作为实现目标。根据SJA1000的内部结构方框图,如图3所示,用Vcrilog HDL语言分别设计了寄存器控制模块、位时序逻辑模块、位数据流处理器模块、CRC校验模块、验收滤波器模块、FIFO模块、顶层控制模块。共有7个功能模块来实现SJA1000的全部功能,其程序结构如图4所示。
下面对这7个功能模块的程序设计做一个大概的说明。
(1)寄存器控制程序
寄存器控制程序用丁完成SJA1000中所有有关寄存器操作。设计寄存器组子模块包括模式寄存器、命令寄存器、状态寄存器、中断寄存器、中断使能寄存器、总线定时寄存器、仲裁丢失捕获寄存器、错误代码捕获寄存器、错误报警限制寄存器、接收错误计数器、发送错误计数器、验收代码寄存器、验收屏蔽寄存器、接收信息计数器、接收缓冲器起始地址寄存器、时钟分频寄存器和接收/发送缓冲器,方便微控制器对CAN Module内部各个功能模块的控制。
(2)位时序逻辑程序
位时序逻辑程序主要负责监视串行CAN总线,并处理与总线相关的位时序问题。在消息发送的开始处,当位时序逻辑检测到总线上由隐性位到显性位的跳变时,其内部逻辑同步到位流,称之为硬同步。在接收消息的过程中,检测到隐性位到显性位的跳变时便会重同步到位流,称之为软同步。位时序逻辑根据总线定时寄存器和总线定时寄存器的值来决定每个位周期的采样点的位置,以补偿传输延迟和相位漂移所造成的误差。[!--empirenews.page--]
(3)位数据流处理器程序
位数据流处理器程序执行总线上的错误检测、仲裁、填充和错误处理等功能。它主要由接收模块、发送模块、错误管理模块、CRC校验、验收滤波、FIFO6个子模块组成。CRC校验、验收滤波、FIFO子模块将单独设计成子程序供位数据流处理器程序调用。
(4)CRC校验程序
CRC校验程序主要用来完成CAN总线网络中循环冗余校验码功能。
(5)验收滤波器程序
验收滤波器程序的功能是由验收代码寄存器(ACR)和验收屏蔽寄存器(AMR)共同完成的。验收代码寄存器将接收到帧中的标识码内容与其自身的内容逐位的进行比较,以决定是否要接收这条报文,验收完全通过后则保存到FIFO中。验收屏蔽寄存器则决定在比较中起作用的验收代码寄存器的位(验收屏蔽寄存器为0,则相应的验收代码寄存器的位相关;验收屏蔽寄存器为1,则对应的位无关)。
(6)先入先出FIFO存储器程序
先入先出FIFO存储器程序的功能是先对接收的报文进行存储,并在CPU要求读出数据时,将接收到的数据通过数据总线从控制器中读出。FIFO模块特点是先进入先输出,后进入后输出。本文中的FIFO存储器是同步的,只有一个时钟信号。
(7)顶层控制程序
顶层控制程序(can_top)是整个CAN总线控制器SJA1000 IP核的最上层模块,主要负责调用并控制以上6个程序模块协同工作。
程序全部设计完后,通过使用QuartusII9.0的编译和综合将整个程序封装成模块符号的形式,如图5所示。这样方便存后面的CAN总线通信系统设计中调用。
对CAN总线控制器IP核的仿真是在ModelSim软件测试平台中进行的,其仿真结果如图6所示。
从图6中我们可以得出:白色竖线处发送成功状态(tx_successful)置1,竖线前面一段时间内,CAN总线控制器IP核的发送状态(transmit _status)为1,接收状态(receive_status)为0,这说明控制器前面已成功地完成了一次发送操作;随后硬同步(hard_sync)置1,发送状态为
0,接收状态为1,控制器又开始一次接收操作,并在接收完后发送应答位(send_ack置1),且置info_empty为1。
3 SJA1000 IP核的CAN总线通信系统设计
基于SJA1000 IP核的CAN总线通信系统是将8051IP核、数据RAM、程序ROM以及CAN总线控制器IP核一同设计到FPGA芯片内,从而构成SPOC系统的。基于IP核复用技术的CAN总线硬件连接图如图7所示。和传统的CAN总线系统构架不同,本文的设计采用的是FPGA而不是单片机作为CAN总线通信系统的控制器。相对于单片机等微处理器而言,FPGA有着其独特的优势:I/O口资源丰富,可以很容易地实现更多的扩展功能;而且在电路设计中除了极少数必要的外围器件外,其余的电路都可以集成设计到FPGA中。这样做可以减少由于器件较多而产生的电磁干扰的可能性,而且还可以减少系统的体积和功耗、提高系统的可靠性。
在CAN 2.0B协议中,为了能够达到设计透明度以及实现灵活性,根据ISO/OSI参考模型,CAN被细分为以下不同的层次:
①数据链路层。其中包括逻辑链路控制子层(LLC)和介质访问控制子层(MAC)。
②物理层。物理层的作用是在不同节点之间根据所有的电气属性进行位的实际传输,它是由CAN总线驱动器和电气线路构成的。
逻辑链路控制子层(LLC)和介质访问控制子层(MAC)的功能,即报文分帧、仲裁、应答、错误检测和标定、报文滤波、过载通知以及恢复管理都是由CAN总线控制器实现。因此,CAN总线控制器IP核(CAN_Module)主要完成LLC和MAC子层的功能。
4 CAN总线通信系统的测试与验证
4.1 硬件电路的设计
CAN总线SOPC硬件连接图如图7所示,下面对图7所示的两个部分进行简单介绍。
4.2 系统的控制部分
控制部分选用的是KX_7C5E型实验电路板,该实验板中的FPGA目标芯片是Altera公司的Cyclonc III型EP3C5E144C8。其中FPGA芯片包含有8051单片机IP核、CAN总线控制器IP核、内部程序ROM、内部数据RAM和锁相环(PLL)等模块。
4.3 CAN总线收发器部分
因为FPGA芯片的供电电压和I/O口输出电平为+3.3 V,所以在设计中CAN总线收发器选用的供电电压也必须是3.3 V的。CTM1050T CAN总线收发器模块是集成电源隔离、电气隔离、CAN总线收发器和CAN总线保护于一体的CAN总线隔离收发器模块。有了CAN总线隔离收发器,就可以很好地实现CAN总线上各节点电气、电源之间的完全隔离和独立,这样可以提高各个节点的稳定性和安全性。该模块的TXD、RXD引脚不需要外接其他元器件就可以很好地兼容+3.3 V及+5 V的CAN总线控制器。因此在图7中我们将FPGA的I/O口与CTM1050T的引脚直接相连,故没有设计任何外围电路。
最后通过使用KX_7C5E型实验电路板、CAN总线收发器、USBCAN-II、CAN总线实验台实验,能够进行基本的收发,验证了系统的可行性。
结语
本文已成功验证了基于SJA1000 IP核的CAN总线通信系统的可行性,该设计充分展现了片上可编程系统的灵活性和可移植性,减小了系统体积和功耗,完全可以代替原有传统的CAN总线系统方案。