新闻中心

EEPW首页 > 模拟技术 > 设计应用 > 智能仪器中数据高速传输的USB实现

智能仪器中数据高速传输的USB实现

作者:天津工业大学信息与通讯学院,王金海,郑羽时间:2004-06-18来源:电子设计应用收藏
摘 要: 本文介绍了Philips公司的芯片和Maxim公司的芯片,提出了基于USB1.1协议的PC和现场智能仪器之间的高速数据传输的解决方案。

关键词:

引言
在高速的数据采集系统中,需要PC和现场智能仪器之间进行大量的数据交换,这就要求PC机和现场之间必须拥有高速的数据传输通讯接口,才能保证系统的实时性和可靠性。新一代通用串行总线接口USB的优良特性给我们提供了极佳的解决方案。在高速数据传输过程中,由于采样频率较高,尤其频率在1MHz以上的应用,普通单片机是无法胜任的。Maxim公司的就能够达到高速数据传输的要求。

简介
Philips公司提供的PDIUSBD12芯片是一款性价比很高的USB器件,它通常用作微机控制器进行通讯的高速通用并行接口,PDIUSBD12完全符合USB1.1版的规范,也符合大多数器件的分类规格。PDIUSBD12所具有的低挂起功耗连同LazyClock输出可以满足使用ACPI、OnNOW和USB电源管理的要求。低的操作功耗可以应用于使用总线供电的外设。此外,它还集成了许多特性,包括SoftConnet、GoodLink、可编程时钟输出、低频晶振和终止寄存器集合,支持本地的DMA传输。D12芯片给我们提供了3个端点,每个端点都有输入和输出端点各一个,同时端点2还提供了4种方式的数据传输方法,本系统采用的是非同步模式,USB的端点结构见表1。
PDIUSBD12的端点1进行命令的传输和应答,而端点2进行数据的高速传输和海量传输。端点1每次接收计算机发送过来的2个字节指令,每接收2组后为一个完整的命令。通过一个校验位来判断命令字是否正确,如果命令字正确,则通过端点2发送或接收数据。而USB的传输速率可以达到12Mbps,比RS-232的传输速率提高了100倍,这样,USB以12Mbps与采样系统进行数据交换,需要1000K/12000K=0.08s的传输时间,因此,PC机可以实现和智能仪器的高速数据交换。


表1 非同步模式图


图1 硬件原理图


图2 软件流程图

DS87C520简介
DS87C520是Maxim公司生产的一种新型高速全静态CMOS单片机,它与8051单片机的管脚和指令集完全兼容。DS87C520的处理器核心经过重新设计,一个机器周期只占4个时钟周期。实际应用表明,若晶振频率相同,执行相同指令的速度是8051的1.5到3倍。DS87C520最高时钟频率为33MHz,执行一个单字节指令的速度最快可达到121ns。除此之外,还具有两个新型全双工串行口,13个中断,,电源电压下降自动复位,可编程看门狗定时器,电源电压下降中断功能等。使数据块传送速度得到提高。DPTR0(82h,83h)和8051的DPTR用法相同,用于访问片外RAM或外设。DPTR1(84h,85h)是新增的数据指针。DPTR选择位(DPS)通过设置SFR的寄存器86h的低位实现,通过使用INC指令,就可以切换DPTR的选择。所有与DPTR有关的指令都使用当前选择的DPTR。因此,只需要用一条指令就可从源地址切换到目的地址。DS87C520与8051单片机最突出的区别就是速度的提高,这样,在高速的数据传输过程中就可以解决智能仪器采样频率低的问题了。

系统的工作原理
根据USB协议,任何传输都是由主机(host)开始的,单片机DS87C520的前台工作就是等待工作。主机PC首先要发送令牌包给USB, PDIUSBD12接收到令牌包就给单片机发中断,单片机DS87C520进入中断服务程序。首先读PDIUSBD12的中断寄存器,判断USB令牌包的类型,然后执行相应的操作。因此,USB单片机程序主要就是中断服务程序的编写。在USB单片机程序中要完成对各种令牌包的响应,主要是对端口的编程。
硬件部分的设计
本系统的硬件结构框图如图1所示。PDIUSBD12的DATA0-DATA7与DS87C520的P0-P7实现上位机和智能仪器之间数据的双向通讯。ALE为地址锁存使能。本系统ALE接为低电平,表示一个独立的地址和数据总线配置。PDIUSBD12的A0脚可与DS87C520的任意一个I/O口相连,该端口控制PDIUSBD12的命令和数据状态。DS87C520频率的输入可由PDIUSBD12的CLKOUT提供。GL_N技术提供良好的USB连接指示。在枚举中,LED指示根据通信的状况间歇闪烁,当PDIUSBD12成功地枚举和配置后,LED指示灯一直点亮。随后与PDIUSBD12之间的成功传输将关闭LED。PDIUSBD12的晶振是6MHz。VOUT3.3是3.3V的调整输出,要使器件工作在3.3V,需要对VCC和VOUT3.3脚都提供3.3V电压。而DMREQ、DMACK_N是用作DMA请求的,由于本系统未采用DMA,所以这两脚是悬空的。PDIUSBD12的传输速率是12Mbps,DS87C520的最高晶振频率为33MHz,一个指令周期最快可达到121ns,这样使得PC和现场的智能仪器之间可以进行高速和实时的数据传输。
软件部分的设计
单片机和PDIUSBD12通讯主要是靠单片机给PDIUSBD12发命令和数据实现的。PDIUSBD12的命令字可以分为三种:初始化命令字、数据流命令字和通用命令字。PDIUSBD12给出了各种命令的代码和地址。单片机先给PDIUSBD12的命令地址发命令,根据不同命令的要求再发送和读出不同的数据。因此,可以编写不同功能的函数,用函数实现各个命令,以后直接调用函数即可。软件流程图如图2所示。
?上位机软件部分的介绍
上位机的程序主要是调用4个未公开的API函数,根据上位机对USB端口的使用情况,分别用VC、VB、Delphi等调用这四个函数就可以实现上位机对USB端口的操作。
DWORD_stdcall ReadPort1(BYTE *pData,size_t iLen)
DWORD_stdcall WritePort1(BYTE *pData,size_t iLen)
DWORD_stdcall ReadPort2(BYTE *pData,size_t iLen)
DWORD_stdcall WritePort2(BYTE *pData,size_t iLen)
其中:pData为指向接收数据缓冲区的指针,iLen为接收数据的长度。
?下位机软件部分的介绍
下位机的软件部分由初始化单片机、所有的外围电路、主循环部分和中断服务程序组成。主循环主要是对单片机初始化及对USB端口和一些变量的定义。中断程序主要是通信协议的判断、命令字的读写和数据的读写,只要读者深刻了解这段中断程序,再相应地进行一些变量的定义,就可以轻松地在PC和DS87C520之间进行数据传输。
void datarw(void)
{ If(bEPPflags.bits.ep1_rxdone){ //端点1接收有效
DISABLE;
BEPPfalgs.bits.ep1_rxdone=0; //清端点1接收有效
ENABLE;
If(bEPPflags.bits.timer) //分两次进行命令字的读取
{ ComEpBuf[0]=GenEpBuf[0];
ComEpBuf[1]=GenEpBuf[1];
ComEpBuf[2]=GenEpBuf[2];
ComEpBuf[3]=GenEpBuf[3];
Commandflag=0;
DISABLE;
BEPPflags.bits.timer=0; //定时器1溢出清定时器
ENABLE;}
else
{ ComEpBuf[4]=GenEpBuf[0];
ComEpBuf[5]=GenEpBuf[1];
ComEpBuf[6]=GenEpBuf[2];
ComEpBuf[7]=GenEpBuf[3];
Check_data=ComEpBuf[0]^ ComEpBuf[1] ^ ComEpBuf[2] ^ ComEpBuf[3] ^ ComEpBuf[4] ^ ComEpBuf[5] ^ ComEpBuf[6] ^ ComEpBuf[7];
//如果校验和正确就进行应答值的判断
If(check_dat==ComEpBuf[7]) {GenEpBuf[0]=0x55; GenEp Buf[1]=0xaa;}
Else{ GenEpBuf[0]=0xaa; GenEpBuf[1]=0x55;}
D12_WriteEndpoint(3,2,GenEpBuf); //命令字的读写
D12_WriteEndpoint(3,2,EpBuf);}}} //数据的读写
驱动程序的设计
USB接口的驱动程序主要实现以下的功能:USB接口器件的初始化;计算上层数据包的校验和,发送上层的数据包;发送SOF帧;接收从USB接口传送来的数据,并检查数据的有效性;将接收到的数据送往上层。虽然Windows系统提供了很多USB设备的驱动程序,但编制驱动程序仍然是USB开发中最为困难的事。USB设备驱动程序的设计是基于WDM的。对于USB的设备来说,驱动可分为USB总线驱动程序和USB功能驱动程序。USB总线驱动程序由操作系统提供,它负责与实际硬件打交道,实现繁琐的底层通信。USB功能驱动程序由设备开发者编写,位于USB总线驱动程序的上面,通过向USB总线驱动程序发送中断程序,来实现对USB设备信息的发送或接收。

结语
USB1.1协议的优点在于,为PC和智能仪器之间提供了一种快速和方便的数据交换方式。同时,USB可以采用“级联”方式,通过这种菊花链式的连接,一个USB控制器可以连接多达127个外设,每个外设间的距离可达5米。USB为PC的外设扩充提供了一个很好的解决方案。■

参考文献
1 Philips Corp. PDIUSBD12 Users Manual.2001,10
2 张力. Visual C++ 高级编程. 人民邮电出版社[M].2002,3.pp426-436
3 Jan Axelson. Universal Serial Bus Complete[M].中国电力出版社.2002,7(3).pp145-150




评论


相关推荐

技术专区

关闭