谈谈基于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是增强型MCS-51兼容单片机,片内集成64KB闪存和1KB扩展RAM,双数据指针,4级中断优先级,7个中断源,内置看门狗,可编程时钟输出,在6时钟模式下工作,速度是标准51单片机的两倍。此时外部最高频率可达20MHz。在高速、大程序容量、中小规模数据处理场合是一款非常理想的单片机型。


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


PDIUSBD12是全速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混合编程方式。


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

适配器


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


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


2.2驱动程序设计
USB驱动程序属于WDM(Windowsdrivermodule)类型。WDM驱动程序是分层的,引入了FDO(FunctionDeviceObject)和PDO(PhysicalDeviceObject)两个新类来描述硬件,每一个物理硬件有一个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文件在操作系统发现新硬件之后向系统指明应该安装的驱动程序、系统向设备提供的服务以及注册表项要修改的内容。

CAN总线适配器经过试验运行表明:在中小规模、短时间的大数据块传输条件下,可以很好地完成网络通信任务。USB接口是计算机外设的发展方向,目前主要应用于中低速场合。随著USB2.0规范的推出,再次向高速应用发展。所以,连接现场总线网络和计算机接口的适配器具有广泛的应用前景。

 

继续阅读
谈谈基于USB的CAN总线适配器的设计

现场总线技术作为二十世纪80年代发展起来的一项新兴技术,已经广泛地应用于工业现场。CAN总线是一种具有较强影响力的现场总线,它不仅在工业现场得到广泛应用,而且在民用领域,如楼宇自动化、智能终端设备等方面都得到了很大的发展。

手机快充时代到来,罗姆如何布局?

随着时代的进步,手机进化越来越快,充电效率也逐渐受到人们的重视,大家最熟悉的广告词就是充电5分钟,通话两小时了吧~其实,快充的历史,可以追溯到三年前...

ROHM发布USB-C控制器 可通过USB线为笔电供电

腾讯数码讯(严灿)9月16日消息,今天上午,ROHM(罗姆)半导体在京发布USB Type-C Power Delivery 控制器IC“BM92TxxMWV系列”。此系列芯片支持 USB Type-C标准, 最大支持100W(20V/5A)的大功率供受电,可驱动笔记本电脑和电视等较大功率的设备。

方便与节能,无线充电与USB供电之间如何抉择?

无线通信技术的流行,使得众多设备摆脱了位置的束缚,终于可以在一定的空间自由移动了,不过这并没有去掉所有的束缚,实现真正的空间自由,毕竟大多数产品还要拖着一条长长的尾巴。无线充电技术因此应运而生,无线充电为人们进入真正的无线联网时代而"砍断最后一根电缆“。无线供电技术不但拜托了线缆的束缚,还可以提高设备连接器的安全性、防水性、防尘性,一个供电装置可以匹配多个待充电终端,因此是现在便携式设备供电方向一个热点。

首款单口USB Type-C移动电源曝光

上周,Google在美国旧金山举行的2015年I/O大会上,正式宣布全面支持USB Type-C标准,这一点对未来安卓手机的软硬件体验带来了深远的影响,赢得了手机用户怒赞。 就在普及浪潮来临之前,首款单口USB Type-C移动电源正式亮相,通过一个接口就能实现充电与放电功能,小伙伴们再也不用担心插反了。