基于USB接口的CAN总线适配器设计

发布者:Mengyun最新更新时间:2012-05-05 来源: dzsc关键字:USB  CAN总线  固件编程  适配器 手机看文章 扫描二维码
随时随地手机看文章

现场总线作为二十世纪80年代发展起来的新兴技术,在工业现场已有了广泛的应用。在比较有影响力的几种现场总线中,CAN总线以其突出的优点不仅大量应用于工业现场,而且在楼宇自动化、智能终端设备等民用领域也有了长足的发展。

现场总线网络技术的实现需要与计算机相结合。以往CAN总线网络与计算机的连接采用RS232、ISA或PCI接口。但是随着计算机接口技术的发展,ISA接口已经逐渐被淘汰;RS232接口数据传输率太低;PCI虽然仍是高速外设与计算机接口的主要渠道,但其主要缺点是占用有限的系统资源、设计复杂、需有高质量的驱动程序保证系统的稳定,且无法用于便携式计算机的扩展。随着USB1.1、USB2.0规范的相继制定,为外设与计算机的接口提出了新的发展方向。USB的主要特点有:外设安装简单,可实现热插拨;通讯速率高,USB1.1全速传送速率为12Mbps,与标准串行端口相比,大约快100倍;支持多设备连接;提供内置电源。

本文给出一种在Windows2000下使用USB1.1协议实现CAN总线适配器的设计方法。整个设计主要开发适配器的固件及计算机的驱动程序、应用程序,以达到用USB接口连接现场CAN总线网络的目的。

1 适配器硬件接口设计

适配器硬件电路由微控制器、CAN总线接口、USB总线接口和DC-DC隔离电源模块等组成。原理框图如图1所示。

微控制器P89C51RD2是Philips公司生产的增强型MCS-51兼容单片机,片内集成64KB闪存和1KB扩展RAM,双数据指针,4级中断优先级,7个中断

 

内置看门狗,可编程时钟输出,在6时钟模式下工作,速度是标准51单片机的两倍。此时外部最高频率可达20MHz。在高速、大程序容量、中小规模数据处理场合是一款非常理想的单片机型。

CAN总线接口使用Philips公司的独立CAN总线控制器SJA1000,并由光耦6N136进行总线隔离。SJA1000是一种独立控制器,用于移动目标和一般工业环境中的区域网络控制,符合CAN2.0A和2.0B规范,最高速率可在达1Mbps。CAN总线收发器采用PCA82C250。

PDIUSBD12是Philips公司推出的全速USB接口器件,完全兼容USB1.1规范。图1中D+引脚信号电平通过器件SoftConnect命令内部上拉,从而向主机表示为一个全速设备。EOT引脚自动检测USB接口的VBUS电压以确定USB电缆是否连接到了主机。SUSPEND是双向引脚,用以向微控制器指示器件是否挂起。当有USB总线事件发生时,引脚向微控制器发出中断信号。PDIUSBD12支持总线复用和非复用两种并行接口模式,以方便连接不同类型的微控制器。图1中采用总线复用方式,当用奇数地址访问PDIUSBD12时被认为是命令,偶数地址访问则被认为是数据读写。

各器件都需要外部时钟信号,而且它们自身也都有可编程的时钟输出功能,这就给系统的时钟设计带来了便利。图1中微控制器6时钟运行模式下,外部为12MHz晶振。P89C51RD2的P1.1引脚产生6MHz方波作为PDIUSBD12的输入时钟;通过PDIUSBD12的SetMode寄存器编程使CLKOUT输出时钟频率为24MHz,作为SJA1000的外部输入时钟。

2 软件设计

软件设计包括微控制器的固件设计和计算机端USB驱动程序两部分。

2.1 微控制器固件编程

固件编程是USB数据传输系统中终端设备程序设计的一个重要概念。微控制器通过固件是程序与计算机进行数据交换。固件设计的目的是:使PDIUSBD12在USB上达到最大的传输速率;增加系统的可扩展性和硬件无关性。

固件要实现的内容:一是对SJA1000初始化,接收CAN总线送来的数据,收集CAN网络状态信息,并将主机的数据下发到CAN网络;二是对PDIUSBD12初始化,完成USB总线连接过程,并组织CAN网络和主机之间的数据传送。设计中采用KeilC51软件编译环境,C51和ASM混合编程方式。[page]

SJA1000和PDIUSBD12都有完善的中断机

 

微控制器可以通过读它们的中断寄存器获得总线事件。为了提高固件的运行效率,主程序对系统进行实始化后开放中断,在中断服务程序中对事件进行分析和必要的处理,并设置相应的变量标志和数据缓冲区。主程序则循环查询变量标志,调用相应的子程序进行处理。这种程序结构使得主程序能够在前台处理各种数据传送任务,同时又可以通过中断在后台及时处理总线事件。

2.1.1 CAN协议实现

SJA1000支持BasicCAN和PeliCAN两种协议模式。在适配器设计中采用了BasicCAN模式。中断设为电平中断方式,SJA1000中断服务程序框图如图2所示。

2.1.2 USB1.1协议实现

PDIUSBD12支持所有的四种USB数据传输方式。在适配器的设计中使用了控制传输、中断传输和批量传输。控制传输中只用来传递控制信息,固定使用端点0;中断传输使用端点1,用来传送CAN网络状态信息;批量传输用来实现主机和CAN网络节点之间的数据传送,使用端点2。图3是PDIUSBD12中断服务程序框图。

2.2 驱动程序设计

USB驱动程序属于WDM(Windows driver module)类型。WDM驱动程序是分层的,引入了FDO(Function Device Object)和PDO(Physical Device Object)两个新类来描述硬件,每一个物理硬件有一个PDO,但是可以有多个FDO,在驱动程序中直接操作的是PDO和FDO。系统通过全局唯一标识符GUID实现驱动程序的识别。应用程序和WDM驱动程序通信时,系统为每个用户请求打包形成一个I/O请求包发送到驱动程序。

图4是Windows中USB的通信层次结构模型。图4系统软件方块中的底部是Windows系统提供的驱动程序,包括主控制器驱动程序(OPENHCI.SYS或者UHCD.SYS)、HUB驱动程序(USBHUB.SYS)是一个类驱动程序(USBD.SYS)。

Windows2000下驱动程序的设计工具是VC++和Win2000DDK,但是直接使用DDK编程有相当大的难度。目前有第三方软件厂商提供了一些驱动程序开发工具,如Jungo公司的WinDriver、Compuware公司的DriverStudio等。这些工具仍然是基于WindowsDDK的,但是进行了新的封装,提供了驱动程序设计向导。

  适配器设计中采用了DriverStudio作为驱动程序开发工具。利用其中的DriverWorks一步步地作出选择并修改少量参数,即可生成驱动程序框架和测试台应用程序框架,对USB设备的通用性部分支持得很好。在程序框架,对USB设备的通用性部分支持得很好。在VC++中对向导生成的代码作修改,并对设备特殊功能部分添加处理代码,然后用VC++编译为*.SYS文件,就是一个完整的驱动程序。SoftIce是DriverStudio的另一个调试工具,可以对驱动程序进行操作系统内核级的跟踪与调试。

生成驱动程序后,编写相应的INF文件是重要的一步。INF文件在操作系统发现新硬件之后向系统指明应该安装的驱动程序、系统向设备提供的服务以及注册表项要修改的内容。

基于USB接口的CAN总线适配器经过试验运行证明:在中小规模和短时大数据块传送时,能够很好地完成网络通信任务。USB接口是计算机外设的发展趋势,目前主要用在中低速场合。随着USB2.0规范的推出,又逐渐向高速应用发展。因此将现场总线网络和计算机接口相连的适配器具有广泛的应用前景。

关键字:USB  CAN总线  固件编程  适配器 引用地址:基于USB接口的CAN总线适配器设计

上一篇:高速PCI总线接口卡的开发
下一篇:人机界面中的LCD控制驱动与接口设计

推荐阅读最新更新时间:2024-05-02 22:02

CAN总线在逆变电源监控模块中的研究与应用
1引言 新型高频中小功率逆变电源设备运用电源模块之间的并联实现功率合成,组成积木式、智能化的分布式大功率电源系统,是当今很有应用前景的新型技术。将若干电源模块组合起来,可以构成任意功率等级的供电系统,有着广泛的应用前景。以现场总线为基础的全数字化自动控制系统是当今世界各国在工业自动化领域的热点课题。本文采用CAN现场总线组建监控网络,对含DSP的嵌入式智能控制器的电源模块进行单模块和多模块监控。 CAN (Controler Area Network)总线属于现场总线的范畴,是一种串行数据通信总线。CAN总线结构模型取ISO/OSI参考模型的第1、2、7层协议,即物理层、数据链路层和应用层。应用层的内容主要取决于用户的需要,所以实
[嵌入式]
基于CAN总线的智能馈线终端的研究
  1 前言        随着国民经济的发展,电力用户对供电质量和供电可靠性的要求越来越高,实现配电自动化是配电系统提高供电可靠性的最有效手段。在配电自动化系统中,馈线自动化是配电自动化系统的基础。而作为馈线自动化系统中核心设备的馈线终端则成为配电自动化系统成功实施的关键。 馈线终端简称FTU(Feeder Terminal Unit),它主要用来监控柱上负荷开关,重合器等一次设备。向配电主站/子站提供配电系统运行工况和提供各种参数:包括开关状态,电能参数,相间和接地故障及故障时的参数信息,并执行配电主站/子站对配电设备的控制及调节指令。 CAN总线作为具有国际标准,主要为工业现场设计的开放式总线,具有可靠性
[嵌入式]
USB接口的光电隔离保护方案及其实现
目前计算机的USB接口已经大量使用,一般每台电脑都有2到4个USB口。当一台电脑同时接多个USB外部设备时,如果这些外部设备介入了高电压干扰,就可能会烧坏电脑的USB口甚至电脑以及外设。目前电脑的几种通信接口中,MODEM口以及以太网接口由于本身具有变压器隔离所以不容易损坏,而RS-232串口也可以选用波仕的RS-232光电隔离器来进行有效的保护,只有USB以及类似的1394接口目前还没有方便的隔离保护方案。 实现原理 本文提供了一种对USB信号进行光电隔离的电路,可以使USB的接口得到保护。 图1为将USB信号(D+、D—)转换为光信号的原理框图。 USB信号检测电路(1)将D+和D—变换为“或”门输出DOR1和差分比
[应用]
基于SPI芯片MAX3420的USB控制器接口设计
    目前,USB接口的使用越来越广泛,许多设备上都提供了USB接口。传统的USB控制器需要使用包括数据线和控制线在内的十多根线,占用了大量的CPU资源。而现代设备正在向体积小、功能强的方向发展,CPU更是要求表贴封装,功耗低,其自身资源非常有限,所以在扩展接口方面必须要尽可能少地占用已有芯片资源。本文介绍了如何使用MAX3420进行USB接口扩展。MAX3420提供了SPI接口,只需3~4根线便可实现USB接口。 1 MAX3420简介     MAX3420是Maxim公司推出的一款全速USB外设,包括必要的数字逻辑和模拟电路,支持USB2.O协议。MAX3420内建全速收发器,支持±15kV的ESD保护,可以编程控制U
[嵌入式]
LSI在企业级PCIe® 闪存适配器领域荣居第二
2013年5月17日,北京 – LSI公司(NASDAQ:LSI)日前宣布,根据业界领先的市场研究公司提供的数据,LSI在快速增长的企业级PCIe® 闪存适配器细分市场中的排名已经上升至第二位。 自2012年4月推出Nytro™ 产品系列以来,LSI Nytro 闪存适配器的出货量已经超过了40,000。市场对于这款产品的高需求反映出超大规模Web和云数据中心、金融服务以及其他企业在加速应用性能、提高数据中心效率和降低IT成本方面的迫切要求。 Forward Insights公司的创始人兼首席分析师Greg Wong表示:“基于闪存的解决方案在数据中心领域变得越来越普遍,同时,LSI已经成为美国企业级PCIe闪存适配器的第二大供
[半导体设计/制造]
大联大品佳集团推出基于Infineon产品的65W USB-PD解决方案
2021年8月5日,致力于亚太地区市场的领先半导体元器件分销商---大联大控股宣布,其旗下品佳推出基于英飞凌(Infineon)XDPS21081的65W USB-PD解决方案。 图示1-大联大品佳基于Infineon产品的65W USB-PD解决方案的展示板图(一) 自PD充电协议普及以来,PD充电器可谓是在消费电子领域大放异彩,成为了越来越多数码产品的标配。目前,不仅手机、移动电源纷纷采用PD充电器,就连switch游戏机、笔记本等设备也都纷纷投入到PD阵营中,这让PD充电器的市场进一步扩大。大联大品佳基于Infineon XDPS21081推出的65W USB-PD解决方案,具有高效率、低成本的特点,可广泛应用于
[电源管理]
大联大品佳集团推出基于Infineon产品的65W <font color='red'>USB</font>-PD解决方案
赛普拉斯面向Altera FPGA推出USB 3.0 SuperSpeed接口板
2012 年 6 月 25日,北京讯,加州圣何塞讯——赛普拉斯半导体公司(纳斯达克股票代码:CY)和 Nuvation Research Corp.日前宣布其量产了一款快速原型设计解决方案,可显著简化 Altera FPGA 视频流、图像和其它数据向主机处理器的传输,速度可高达每秒 400MB。该解决方案采用 SuperSpeed USB 3.0 器件接口板,能够连接到 Arrow Electronics 的 BeMicro SDK(软件开发套件)上,后者是一款采用 Altera Cyclone IV FPGA 的流行 FPGA 评估平台。全新 USB 3.0 扩展板可帮助 BeMicro 用户开展原型设计,相对于速度较慢的传统
[嵌入式]
玩转USB HID系列:Linux下使用Python开发USB HID
实验环境 ubuntu 16.04 LTS 64-bit python 3 STM32做下位机 开发步骤 安装pyusb 库 pip install pyusb 我们来与HID设备通讯! 我的STM32信息: interface 0 END POINT 0x01: OUT END POINT 0x82: IN 包大小:64 byte 完成功能:PC机向STM32写入2个字节(查询命令) STM32返回5个字节: :数据长度(这里应该为4) - :一个double的电压值的内存形式 import usb.util import usb.core import sys from ctypes import * import
[单片机]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved