基于USB总线的多路同步数据采集系统
发布时间:2008/5/27 0:00:00 访问次数:662
    
    
    来源:半导体技术 作者:赵莉 白智涛 王鹏
    
    摘要:本文针对计算机外设通过通用串行总线(usb)接口接入问题,设计了usb总线的数据同步采集系统,配以相应usb接口驱动程序,可实现各种计算机外设即插即用地接入。
    
    关键词:usb,同步数据采集,sie
    
    1. 引言
    通用串行总线(usb,universal serial bus)是现代pc数据传输的发展趋势,
    pc的所有外设,包括键盘、鼠标、显示器、打印机、录音机、数字音响、电视机顶盒、数码相机、扫描仪、modem及各种多媒体音频、视频设备均可通过usb接口接入pc。usb总线同步数据采集系统即为这种总线接入系统。
    
    2. 硬件方案
    本系统采用maxiam公司的max125四路12位同步采集芯片,只需一个
    启动信号即可实现同步采集、数据转换,完成后给出一个转换完成信号,可从端口依次读取a/d转换数据,送入单片机处理;usb接口芯片采用philips 公司的pdiusbd12,此芯片单片集成sie、fifo存储器、收发器及电压变换器,
    并严格遵从usb1.1协议,philips sie完成usb协议层,并且完全高速硬连接,无须任何软件干预。此模块功能包括:同步模式识别,并/串转换,位填充/解填充,crc检验/产生,pid 确认/产生,地址识别,握手响应/产生;类似于控制其它接口芯片(如并口芯片)一样控制此接口芯片,单片机将a/d转换结果送至pidusbd12, pidusbd12将自动完成通过usb接口传输数据至pc的功能(按usb1.1协议),
    具体实现电路如图1:
    
    图1
    
    图2
    3. 软件接口程序
    虽然win95 osr2.1 支持usb,但微软推荐在win98或win2000上使用usb。软件部分由wdm驱动程序和应用程序组成。对于usb客户驱动程序,主要是与 usbdi打交道,下面的代码完成了对于irp_mj_read和irp_mj_write的响应。
    
    
    /////////////////////////////////////////////////////////////////////////////
    // usbgatherread:
    //
    // description:
    // handle irp_mj_read requests
    //
    // arguments:
    // pointer to our fdo
    // pointer to the irp
    // irpstack->parameters.read.xxx has read parameters
    // user buffer at: associatedirp.systembuffer (buffered i/o)
    // mdladdress (direct i/o)
    //
    // return value:
    // this function returns status_xxx
    
    ntstatus usbgatherread( in pdevice_object fdo,
    in pirp irp)
    {
    pusbgather_device_extension dx = (pusbgather_device_extension)fdo->deviceextension;
    if( dx->iodisabled)
    return completeirp( irp, status_device_not_connected, 0);
    if (!lockdevice(dx))
    return completeirp( irp, status_delete_pending, 0);
    
    pio_stack_location irpstack = iogetcurrentirpstacklocation(irp);
    ntstatus status = status_success;
    ulong bytestxd = 0;
    
    // 得到参数
    longlong filepointer = irpstack->parameters.read.byteoffset.quadpart;
  
    
    
    来源:半导体技术 作者:赵莉 白智涛 王鹏
    
    摘要:本文针对计算机外设通过通用串行总线(usb)接口接入问题,设计了usb总线的数据同步采集系统,配以相应usb接口驱动程序,可实现各种计算机外设即插即用地接入。
    
    关键词:usb,同步数据采集,sie
    
    1. 引言
    通用串行总线(usb,universal serial bus)是现代pc数据传输的发展趋势,
    pc的所有外设,包括键盘、鼠标、显示器、打印机、录音机、数字音响、电视机顶盒、数码相机、扫描仪、modem及各种多媒体音频、视频设备均可通过usb接口接入pc。usb总线同步数据采集系统即为这种总线接入系统。
    
    2. 硬件方案
    本系统采用maxiam公司的max125四路12位同步采集芯片,只需一个
    启动信号即可实现同步采集、数据转换,完成后给出一个转换完成信号,可从端口依次读取a/d转换数据,送入单片机处理;usb接口芯片采用philips 公司的pdiusbd12,此芯片单片集成sie、fifo存储器、收发器及电压变换器,
    并严格遵从usb1.1协议,philips sie完成usb协议层,并且完全高速硬连接,无须任何软件干预。此模块功能包括:同步模式识别,并/串转换,位填充/解填充,crc检验/产生,pid 确认/产生,地址识别,握手响应/产生;类似于控制其它接口芯片(如并口芯片)一样控制此接口芯片,单片机将a/d转换结果送至pidusbd12, pidusbd12将自动完成通过usb接口传输数据至pc的功能(按usb1.1协议),
    具体实现电路如图1:
    
    图1
    
    图2
    3. 软件接口程序
    虽然win95 osr2.1 支持usb,但微软推荐在win98或win2000上使用usb。软件部分由wdm驱动程序和应用程序组成。对于usb客户驱动程序,主要是与 usbdi打交道,下面的代码完成了对于irp_mj_read和irp_mj_write的响应。
    
    
    /////////////////////////////////////////////////////////////////////////////
    // usbgatherread:
    //
    // description:
    // handle irp_mj_read requests
    //
    // arguments:
    // pointer to our fdo
    // pointer to the irp
    // irpstack->parameters.read.xxx has read parameters
    // user buffer at: associatedirp.systembuffer (buffered i/o)
    // mdladdress (direct i/o)
    //
    // return value:
    // this function returns status_xxx
    
    ntstatus usbgatherread( in pdevice_object fdo,
    in pirp irp)
    {
    pusbgather_device_extension dx = (pusbgather_device_extension)fdo->deviceextension;
    if( dx->iodisabled)
    return completeirp( irp, status_device_not_connected, 0);
    if (!lockdevice(dx))
    return completeirp( irp, status_delete_pending, 0);
    
    pio_stack_location irpstack = iogetcurrentirpstacklocation(irp);
    ntstatus status = status_success;
    ulong bytestxd = 0;
    
    // 得到参数
    longlong filepointer = irpstack->parameters.read.byteoffset.quadpart;
  
上一篇:ARM嵌入式平台的VGA接口设计