作者:王洪义;李坚;陶涛
控制器局域网(CAN)是德国BOSCH公司于1986年为解决汽车内部测量与执行部件之间的数据通信而开发的一种串行数据通信协议。它的网络模型结构包括物理层、数据链路层和应用层,以双绞线为信号传输介质,通信速率最高可达1Mbps ( 40m),直接传输距离最远可以达到10km/5Kbit/s,每条总线可挂接设备多达110个,特别适用于实时性要求很高的网络。由于其多主的工作方式、优良的稳定性和实时性能、成熟的仲裁和同步技术,加上开放式总线结构、短报文高速通讯、远程通讯能力、超强的纠错和扩展功能,以及控制简单、应用成本低等优点,已经被越来越多地应用到广大网络控制系统领域,并被公认为最有前途的现场总线技术之一。
USB(通用串行总线),是1995年以Intel为首的7家公司推出的一种协议规范,用以实现将将计算机的各种外围接口统一起来,用带四根线(两根电源线和两根数据线)的接口来实现任意设备和PC机间的通讯。具有即插即用,软硬件支持广泛、低功耗、价格低、数据传输率高、扩充性好、使用灵活、硬件结构标准化高和完备的总线拓扑结构等特点,因此USB自问世以来,显示出了强大的生命力,在以计算机为上位机的控制系统中,得到广泛的应用。
随着计算机技术的飞速发展,PC这个已经把USB采纳为通用总线和通用接口标准的控制器几乎已经成为各个领域操控终端的首要选择。通过USB接口,在安装必要的应用软件和驱动程序之后,PC能接入到各个控制系统中去。因此,为了提高应用的高效率、操控的便利性,把USB的通用型和CAN的专业性结合起来,达到优势互补,有必要设计一种高速USB2.0-CAN适配卡,以实现USB2.0通信协议与CAN总线通信协议的转换。
系统结构
系统主要包含三部分:微控制器、USB接口和CAN接口的控制部分(见图1)。其中C8051F040作为系统微控制器。USB接口功能控制器采用CP2102 USB转UART桥接芯片。其中C8051F040作为CAN总线控制器负责与CAN网络交换数据,CP2102实现USB口信息格式与串口格式的转换,最后由C8051F040操作串口与CP2102交换数据,实现USB2.0到CAN总线协议的转换。
图1 USB2.0-CAN适配卡框图
硬件实现
CP2102
CP2102是Silicon Labs公司的USB转UART桥接芯片,具有集成度高、速度高、价格低廉、开发简单等特点,能够用最简单的外部电路,最少的外部器件简便地实现USB到UART的转换。CP2102 包含USB2.0全速功能控制器、USB收发器、振荡器和带有全部的调制解调器控制信号的异步串行数据总线(UART)。CP2102的内部结构如图2所示,内置有与计算机通信的协议,工作时,提供的免费的实用COM口器件驱动器允许一个基于CP2102的产品作为的一个口使用,也就是通常所说的产生一个虚拟的口,电路无需任何外部的USB器件即可工作,工作特性可以满足CAN总线的传输波特率要求。
图2 CP2102的内部结构图
微控制器
系统采用SiliconLaboratories公司推出的混合信号系统级单片机C8051F040作为系统的控制器,内部集成的CAN控制器包括一个CAN内核、消息RAM(独立于CIP-51内核)、消息处理单元、控制寄存器等但是没有提供物理层的驱动器,要实现与CAN总线的接口,还需接口控制器,例如82C250、TJA1050等。数据接收和滤波都是由CAN控制器完成的,不需要CIP-51内核的参与,通过这种方式使CAN通讯时占用的系统资源最小。CIP-51内核通过其内部的特殊功能寄存器来配置CAN控制器以及实现数据交互。
系统电路如图3所示,由CP2102、C8051F040、CAN驱动芯片PCA82C250以及光电隔离芯片6N137等组成。CP2102的RTX、TXD引脚分别是串口的接收、输出端,与单片机的对应引脚相连。USB的终止和恢复信号支持功能便于CP2102器件以及外部电路的电源管理。当在总线上检测到终止信号时,CP2102将进人终止模式。在进人终止模式时,CP2102会发SUSPEND和信号。但是,SUSPEND和在CP2102复位期间会暂时处于高电平。为避免这种情况出现,需要用一个l0kΩ的电阻来确保在复位期间保持在低电平。PCA82C250是CAN收发器,可增加总线驱动能力,Rs端接地相连,系统处于高速工作方式。6N137是光电隔离芯片,CAN总线信号CANTX和CANRX从C8051F040出来后先分别经过高速光耦6N137进行电气隔离,再经过CAN总线控制器接口芯片82C250驱动,然后接到CAN数据线上。6N137实现智能节点与CAN总线之间的电气隔离,不仅提高了节点的可靠性和系统的抗干扰能力,而且也保护了总线及总线上的其它节点。总线两端124Ω的电阻对,防止通信信号传输到导线端点时发生反射。
图3 适配卡的硬件设计
USB与CAN之间协议转换的实现
设计在充分遵守USB和CAN协议的基础上,实现了USB数据与CAN数据之间的协议转换和转发。在设计过程中,USB的高速率和CAN的低速率、USB的大数据包和CAN的小数据包之间存在着矛盾,必须认真解决,否则可能会造成数据丢失,协议转换不可靠,设备工作不稳定。本设计中USB和CAN都采用了接收中断方式,将USB和CAN的数据包先存储下来,作为缓冲再进一步处理。在中断服务程序的数据接收时,只有将数据准确地收取下来,才将接收缓冲区释放,在此之前拒绝接收新的数据。在数据发送时,先确认发送缓冲区可用才写入数据。由于两端接口芯片都有内部的发送和接收缓冲区,主程序的主要任务就是完成数据的转发,以及提供通信同步的握手协议,防止数据丢失和顺序错误。
相
对于CAN总线传输速率,USB总线速率要高得多,128字节的缓冲区也比CAN总线芯片8字节缓冲区大得多,因此,向CAN接口发送数据需要完成拆包和重新打包的任务,属较慢操作,采用定时查询式发送。CAN接收任务每次直接转发CAN接口收到的8字节数据到USB接口发送缓冲区,采用两个信号量(CAN-rcv,USB-wr)完成数据同步操作。数据转发工作共有4个任务协调配合完成:
(1) USB中断后续处理任务
CP2102接收到数据或发送完成都会触发中断程序运行。中断处理程序只需要简单地通知此任务有中断发生,以尽量减少中断关闭的时间。因此,这个任务的优先级最高,并且一旦开始运行不再等待其它事件,尽快处理完成。此任务根据USB接口的不同中断原因,通知其他任务进行后续的数据处理或转发工作。
(2)控制端点信息处理任务
当USB接口[5]接收到主机发来的USB协议信息时,此任务得到通知。根据主机的要求,按照USB协议规范的数据格式对主机应答。主要用于USB设备枚举阶段,与主机之间的信息交换。其它时间,此任务不占用处理器时间。
(3) CAN总线发送任务
当USB接口有新的数据[6]要转发到CAN总线时,USB中断后续处理任务通知此任务运行。读出USB芯片接收缓冲区中的数据到内存缓冲区,然后分解成小于等于8字节数据包,增加CAN总线协议数据包头,送入C8051F040的发送缓冲区。微处理器的主要处理时间就是USB数据包的分解和重新打包发送。此任务占用处理器的时间最长。CAN发送任务每次等待USB接收中断触发USB_ rd信号量后,开始读取CP2102接收缓冲区数据到内存数组Ep2out_Buf[128],然后采用查询式发送方式,将数据送到C8051F040的发送缓冲区,每次8字节。在查询过程中,如果C8051F040处于正在发送中,将任务休眠3个时钟嘀嗒《5ms),然后再次查询,避免长时间占用处理器。
(4) CAN总线接收任务
当CAN总线接收[6]到数据后,由于数据包最多只有8个字节,因此可以一次放入USB接口芯片发送缓冲区,由主机读取。此任务很少占用处理器时间。主要是为了协调CAN总线与USB总线之间数据转发的同步,使数据包按照原来的顺序接收到,并且不覆盖尚未发送的上一个数据包,避免数据丢失。CAN接收中断首先读C8051F040中断寄存器,清除中断标志。然后触发CAN-rcv信号量,使CAN接收任务得以运行。CAN接收任务然后等待USB发送完成中断触发USB-wr信号量,表示USB接口可以发送新的数据。由于USB接口缓冲区较大,并且发送速度快,CAN接收任务直接将CAN接收到的数据,送入USB接口芯片CP2012的发送缓冲区。然后打开CAN接收中断。
结语
设计在充分遵守USB和CAN协议的基础上,USB和CAN都采用了接收中断方式,通过通信同步的握手协议,实现了USB数据与CAN数据之间的协议转换和转发,很好的解决了USB的高速率和CAN的低速率、USB的大数据包与CAN的小数据包之间的矛盾,能够保证数据完整,协议的可靠转换。使CAN的专业化操作和实践通过USB变得更加灵活方便。
责任编辑:gt
-
控制器
+关注
关注
112文章
16073浏览量
176977 -
接口
+关注
关注
33文章
8436浏览量
150694 -
usb
+关注
关注
60文章
7867浏览量
263607
发布评论请先 登录
相关推荐
评论