Cypress是USB市场的领导者,占有70%的市场。Cypress有多种USB芯片共选择:
1)M8系列:CY7C63xxx,低速型。 以RISC为内核,用于慢速计算机外设。开发较复杂,需了解USB协议;价格便宜。
2)Hub系列:CY7C65xxx。 以RISC为内核,用于Hub。
3)EZ系列:AN21xx,全速型。 以8051为内核,用于数据传输。开发容易,使用方便。
4)EX-FX系列:CY7C64xxx,全速型。 以8051为内核,高I/O传输率,EZ系列的第二代产品。
5)EX-FX2系列:CY7C68xxx,高速型。 USB2.0标准,480M传输率,高速USB。
一种基于新型USB接口芯片CH372的CAN总线网络适配器系统的设计,提出了一种使用USB接口实现CAN总线网络与计算机连接的方案。利用芯片CH372可在不了解任何USB协议或固件程序甚至驱动程序的情况下,轻松地将并口或串口产品升级到USB接口。该系统在工业现场较之以往的系统,可以更加灵活、高速、高效地完成大量数据交换,并可应用于多种控制系统之中,具有很大的应用价值。 引言
现场总线网络技术的实现需要与计算机相结合。目前,在微机上扩展CAN总线接口设备一般采用PCI总线或者RS-232总线。PCI虽然仍是高速外设与计算机接口的主要渠道,但其主要缺点是占用有限的系统资源、扩展槽地址;中断资源有限;并且插拔不方便;价格较贵;而且设计复杂、需有高质量的驱动程序保证系统的稳定;且无法用于便携式计算机的扩展;RS-232虽然插拔方便,但是传输速率太慢。
本文的设计思想是通过使用USB接口芯片CH372,将计算机与CAN网络控制节点参数相互准确快速地传输。CH372是一种USB总线通用接口芯片,在计算机系统中,通过CH372的配套软件可提供简洁易用的操作接口,从而使其与本地端的单片机通讯就如同读写硬盘中的文件一样简单,由于CH372屏蔽了USB通讯中的所有协议,因而可在计算机应用层与本地端控制器之间提供端对端的连接,在不需要了解任何USB协议或者固件程序甚至驱动程序的情况下,就可轻松地将并口、串口产品升级到USB接口。
CAN适配器用于完成USB总线和CAN总线之间的数据交换。使用MCU统筹安排数据在USB总线和CAN总线之间的数据交换。以MCU为界可以将硬件分为两部分:一是MCU和USB总线交换数据;二是MCU控制CAN控制器,完成CAN数据包到CAN总线位序列协议解释,该系统结构如图1所示。
图1
硬件设计
USB接口电路在微控制器和USB接口的选择上有两种方式:一种是采用具备USB通讯功能的微处理器。随着USB应用的日益广泛,Intel、Cypress、Philips等芯片厂商都推出了具有USB通信接口的微处理器,如8X930A、8X931A、EZ-USB等。由于这些微处理器具有USB接口,它们与过去的开发系统不兼容,需要购买新的开发系统,投资较高。另一种是采用普通微处理器加上专用的USB通信芯片。
现在的专用芯片中较流行的有USBN9602、SL11、PDIUSBD12等。但是,USB接口的开发一般要求设计人员对USB的标准、Firmware编程及驱动程序编写等有较深入的理解,因此限制了一般的硬件工程师对USB接口产品的开发使用。本系统中使用了USB接口芯片CH372,使用非常简单,开发人员只要熟悉单片机的编程及简单的VB或者VC应用程序编程,在较短的时间内就可开发出相应的USB产品。
CH372是一个USB总线的通用设备接口芯片,遵守USB1.1协议。在本地端,CH372具有8位数据总线和读、写、片选控制线以及中断输出,可以方便地挂接到单片机、DSP等控制器的系统总线上;在计算机系统中,CH372的配套软件提供了简洁易用的操作接口,与本地端的单片机通信就如同读写硬盘中的文件。CH372内置了USB通讯中的底层协议,具有内置固件模式和外置固件模式。在内置固件模式下CH372屏蔽了USB通信中的所有协议,在计算机应用层与本地端控制器之间提供端对端的连接。使用CH372,不需要了解任何USB协议或者固件程序,甚至驱动程序,就可以轻松地将并口、串口的产品升级到USB接口。
CH372芯片的RD和WR可以分别连接到单片机的读选通输出引脚和写选通输出引脚。CS由地址译码电路驱动,用于当单片机具有多个外围器件时进行设备选择。INT可以连接到单片机的中断输入引脚,中断请求是低电平有效。当CS和RD以及A0都为低电平时,CH372中的数据通过D7~D0输出;当CS和WR以及A0都为低电平时,D7~D0上的数据被写入CH372芯片中;当CS和WR都为低电平而A1为高电平时,D7~D0上的数据被作为命令码写入CH372芯片中。CH372芯片的UD+和UD-引脚应该直接连接到USB总线上。如果为了芯片安全而串接保险电阻或者电感,那么交直流等效串联电阻应该在5Ω之内。CH372芯片内置了电源上电复位电路,一般情况下,不需要外部提供复位。CH372芯片正常工作时需要外部为其提供12MHz的时钟信号。一般情况下,时钟信号由CH372内置的反相器通过晶体稳频振荡产生。外围电路只需要在X1和X0引脚之间连接一个标称频率为12MHz的晶体,并且分别为X1和X0引脚对地连接一个容量为30pF的高频振荡电容。CH372芯片支持5V电源电压或者3.3V电源电压。当使用5V工作电压时,CH372芯片的VCC引脚输入外部5V电源,并且,V3引脚应该外接容量为0.1μF左右的电源退耦电容。当使用3.3V工作电压时,CH372芯片的V3引脚应该与VCC引脚相连接,同时输入外部的3.3V电源,并且与CH372芯片相连接的其它电路的工作电压不能超过3.3V。接口电路如图2所示。
图2
CAN总线接口电路这部分由CAN控制器、CAN接口芯片和光耦组成。CAN控制器完成CAN通讯协议的所有要求,CAN接口芯片是CAN控制器和物理总线间的接口,并经由光耦将数据发往CAN总线,接口电路图如图3所示。
图3
CAN总线控制器采用Philips公司的SJA1000,并辅以该公司的PCA82C250接口驱动器,通过光电隔离器件6N137实现了总线与控制器的隔离。SJA1000是一款独立的控制器,用于汽车和一般工业环境中,从软件的角度来看,对SJA1000的操作通过单片机的访问外部存储器指令来完成,所以,SJA1000可以被视为一种扩展RAM,SJA1000具有标准模式和Peli模式两种应用模式。标准模式符合CAN2.0A协议标准,接收缓冲器有64个字节;Peli模式符合2.0B标准,能处理扩展数据格式,具有仲裁丢失捕获、代码读取等功能。
PCA82C250是CAN控制器和物理总线之间的接口,它具有限定的电流值以保护接收器输出级,避免阳极和阴极的短路,以防止输出级的损坏,PCA82C250CAN接口控制器提供了总线驱动发送和接收能力,高速可达1Mbps,具有较强的抗干扰能力。
为了增强系统抗干扰能力,在SJA1000和CAN总线收发器82C250之间使用两个高速光电隔离器件6N137实现总线和控制器的隔离,以避免干扰,提高工作可靠性。CAN控制器可以选择从RX0、TX0或RX1、TX1接收和发送数据,当使用RX0、TX0工作时,须将RX1接到一个稳定的电平上。高速光耦6N137的最高速度可达10Mbps,利用它可以在隔离的状态下保证系统的高速可靠。
软件设计
本设计中采用的微控制器为P89C51RD2,它是采用先进的CMOS工艺的单片8位微处理器。工作在6时钟模式时,速度是标准51单片机的两倍,此时最高外部晶振可达20MHz。此外,该机型支持ISP编程和IAP编程。软件主程序的流程图如图4所示。
图4
首先进行MCU、SJA1000和USB的初始化,初始化后系统处于循环等待状态,若有中断产生,就进入相应的中断服务程序,如果CAN总线有数据上传,则转入CAN中断服务程序,由微处理器从SJA1000缓冲区接收数据,写入微处理器的数据缓冲区,并置标志返回,如果上位机有数据下传,则转入USB中断服务程序(下位机中断服务程序流程如图5所示),微处理器从USB缓冲区中读取数据,存入缓冲区,并置标志返回,接收数据是将数据从缓冲区读出发送到USB总线,通过USB总线传送到上位机(下位机数据上传子程序流程简图如图6所示),发送数据是将数据从缓冲区读出写入SJA1000的缓冲区,由CAN节点读取,这种处理可以使微处理器在执行完相应的中断程序后只需读取缓冲区,然后执行相应的接收或发送程序即可完成上位机和下位机的数据交换。对于计算机应用层的程序,在计算机上装载WINCHIPHEAD提供的CH372的通用驱动程序后,不必再考虑USB通信协议、固件程序、驱动程序、自动配置过程和底层数据传输过程。只需要根据提供的动态连接库的接口函数,用VB或VC编制自己的应用程序即可。
图5
图6
结束语
综上所述,本系统为计算机与CAN总线之间的直接通信提供了一种有效的方法,适应网络和接口技术的发展,探索现场总线网络和计算机接口的新方法,是很有实践意义的。
现在的USB生产厂商很多很多,几乎所有的硬件厂商都有USB的产品。我了解的公司有
Intel, 国半, Cypress, AnchorChips这几家,Intel作为USB标准的制订者之一,又加上
Intel的龙头老大的地位,现在的计算机主板上的HOST基本上采用的都是INTEL的芯片。而在
外设的USB控制器方面,大家的性能都差不多。其中CYPESS公司的器件以便宜见长,在收购
了ANCHORCHIPS公司之后,CYPRESS基本上从低速到全速的器件都包涵到了,有一些器件的性
能还超过INTEL,当然价格要便宜得多(注:以上评价纯属个人意见,仅供参考)。就象CPU
唯INTEL马首是瞻一样,很多的厂家都喜欢把自己的东西和INTEL的做比较,我个人认为要做
的话,还是INTEL的要好一些!
USB器件一般来说是有两种类型的,一种是MCU集成在芯片里面的,象上面提到的
Intel,Cypree,National semiconductors, Anchorchips等等;另外的还有就是单独的一个芯
片实现USB的Engine的功能,象philips,PDIUSBD11,PDIUSBP11A,PDIUSBD12等,还有象
lucent也出了两款器件,USS-820,USS-620,820是普通的高速设备,具有8个双向的
endpoints,而620是具有DMA功能,使用起来比820占用系统资源要少得多!还有很多家,因
为我没有接触过其它厂家的东西,所以没有发言权!呵呵!不过总的来说,在这个方面
philips和National Semiconductors的东东要大众一些,开发的话应该上手快一些!不过
philips的和51的接口搞的偶烦了好几天,比较的麻拐一些!
好了,既然把话题说开了,就接着说说USB的HUB的器件,主要的我没有做过,好象国内的
USB的HUB还没有什么厂家开始做,即使有,也是非常少的,HUB的器件我重点推荐philips的
东西,可以选择PDUSBH系列产品,这一个系列的产品主要是在于用它设计HUB的测试方面有
很好的功能,从而减少了开发的难度(这是一个米国朋友告诉偶的,E文翻译过来,如有错
误,敬请注意)。
对了,还有一个问题,起码有不少于十个人来问我,两台PC间如何通过USB口直接连接起
来,再次重申一遍,由于USB的网络协议的关系,两台PC的USB都是host,所以没有办法连,
如果连的话,必须要使用USB的桥!这个桥的芯片有以下几种,一是anchorchips的EZlink,
还有Prolific Technology Inc 的PL2301,PL2302,这个,我只知道anchorchips的东东,
要买好几十给美金,我想如果是家庭用的话,没有人会发神经病去卖这个鸟东西,反正两个
网卡才几块银子。还有USB的Audio方面的器件,有Dalas和philips的东西可以选,当然还有
其它的,反正都是巨大无比的公司,应该质量上没有特别的差别,只是在一些小的细节上有
所不用,各位老大自己慢慢斟酌了。
最后重申:以上几个方面的建议纯属个人建议,不代表官方意见和公司意见,我没有从上面
的推荐公司中获得一分钱的好处(NND,白做了一把广告)。
--------------------------------------------------------------------------------
下面就以INTEL公司的8X930AX USB 芯片作一些介绍:
8X930AX USB 微处理器采用的是MCS51作为它的控制CPU,工作在12MHz的工作频率,有
256Kbytes的存储空间,如果不够还能够在外围扩展。它有11个中断源,其中有三个分配给
USB设备(device)。当然他也还有一些其它的特性,在此不作详细的介绍了。您可以到
http://www.intel.com/ 去获得详细的资料。它的主要缺点是价格上可能偏高,开发费用略
高,但是开发难度要相对小一些!
如何给USB器件设计一个BUFFER(Intel)
下面以CYPRESS公司的CY7C6XX系列产品作一些介绍:
CYPRESS公司的芯片在低速的场合做得很好,比如国内所有的USB鼠标都是采用的CYPRESS公
司的芯片(真的是便宜,不由得你不买他的东东),但是在高速方面支持得不是很好,好象
是在CY36系列产品上存在着速度快就CRASH的毛病,在收购了ANCHORCHIPS之后情况才有所改
观。
在我这次更新(四月)主页的时候,我得知他们在很多方面都做了改进,他们的产品应该还
是很有竞争力的。
[个人意见] 其实我觉得USB的硬件所有的厂家都差不多,差别只是在于他们采用的控制器
的不同,除了各个公司的CPU不同(像ST就用他们的ST8或者ST16,Intel当然就用他们的看
家本领,而ANCHORCHIPS就只好用人家的51了)以外的东西基本一致,就只有一个SIE(什么
是SIE,可以参考这篇文章),高速的器件还会有一个DMA的控制器,使他的数据可以跑得很
快。当然你还要看他们的开发包的费用了,具体的报价我没有比较过,有兴趣的可以比较一
把,别忘了给我一份,呵呵!
我对于硬件最想说的一点是他的速度的算法,USB的速度是跟USB其间内部提供的缓冲区的大
小有关,还有一个就是USB标准中提到的每1ms和每10ms(还有255ms的时候)发一桢数据的
区别,这是低速和全速的主要区别,而缓冲区的大小直接的影响到每桢传送的数据量的大
小,这一点大家在算USB的速度的时候一定要注意。在做设计之前一定计算好自己所要求的
带宽和芯片的速度匹不匹配,否则会引起不必要的麻烦(洒家开始的时候就被害惨了)。
下面是一个带宽的计算公式:
BW=EP*INT(BPF/(OH+EP))/125
其中:BW表示带宽(Mbits/sec),EP表示ENDPOINT的大小(bytes),BPF表示每桢的字节数,
OH表示开销。
你可以很快的根据你的设计计算出你的USB器件的带宽。下面给出一个例子:
BPF 187 OH 46
ENDPOINT SIZE(BYES) MAX BW(Mbits/sec)
1 0.024
2 0.048
4 0.096
8 0.192
希望可以从这个例子中得到USB的带宽的计算方法。而对于四种不同的传输方式来说,主要
的不同是体现在BPF和OH的不同上。具体可以参照USB的标准的第八章。还可以看一看这篇文
章。
选好方案之后,到了具体的控制程序设计阶段,就只是一个CPU的程序控制问题,对于华夏
发达的单片机水平来说,这是非常容易解决的,倘若我再重复讲一下单片机中断抑或讲一段
什么例子程序的话,我怀疑会被人砍翻在地,因此寡人只好封刀引退。若有不明,请参考谁
谁谁谁谁等高手之微处理器专著。
也有一些大佬们来问了一下一些关于这些控制方面的问题,很多是没有仔细的看文档资料,
关于一些USB的芯片的特殊功能寄存器在说明书里面都有详细的说明,操作方法跟51的器件
里面的SFR一模一样。
文章评论(0条评论)
登录后参与讨论