基于USB总线的多路同步数据采集系统
摘要:本文针对计算机外设通过通用串行总线(USB)接口接入问题,设计了USB总线的数据同步采集系统,配以相应USB接口驱动程序,可实现各种计算机外设即插即用地接入。 关键词:USB,同步数据采集,SIE1. 引言 通用串行总线(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 图23. 软件接口程序 虽然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->x has read parameters// User buffer at: stemBuffer (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->adPart;ULONG ReadLen = IrpStack->ngth;// 检查文件指针if( FilePointer0)status = STATUS_INVALID_PARAMETER;else{status = UsbDoInterruptTransfer( dx, Irp->stemBuffer, ReadLen);BytesTxd = ReadLen;}
// 完成 IRPCompleteIrp(Irp,status,BytesTxd);UnlockDevice(dx);return status;}
/////////////////////////////////////////////////////////////////////////////// UsbgatherWrite://// Description:// Handle IRP_MJ_WRITE requests//// Arguments:// Pointer to our FDO// Pointer to the IRP// IrpStack->x has write parameters// User buffer at: stemBuffer (buffered I/O)// MdlAddress (direct I/O)//// Return Value:// This function returns STATUS_XXX
NTSTATUS UsbgatherWrite( 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->adPart;ULONG WriteLen = IrpStack->ngth;
if( FilePointer0 || WriteLen1)status = STATUS_INVALID_PARAMETER;else{// 仅写一个字节BytesTxd = 1;PUCHAR pData = (PUCHAR)Irp->stemBuffer;UsbSendOutputReport( dx, *pData);}
// 完成 IRPCompleteIrp(Irp,status,BytesTxd);UnlockDevice(dx);return status;}
应用程序采用标准的文件操作方法。使用CreateFile API打开文件。使用WriteFile API发出开始命令,启动ADC,使用ReadFile读回采样值。
4. 结束语 USB数据采集系统设计上严格遵循USB1.1协议,实现了USB的即插即用特性,可热插拔,使用便捷;扩展能力强,可扩展多达127个外设,总带宽达12Mbs;实现容易,为特殊设计PC提供了一种简便易行的外设扩展方案。
- 麦草浆的改性上标签试验台硫磺热转印机百页窗帘Frc
- 四海八荒第一客户管理软件餐桌桂平练功鞋筛分设备乳胶脚垫Frc
- 中华烟标汉语拼音之谜牛头刨床数码相机塑料链铝压铸精密模具Frc
- 松下与Blueface合作推出云通信平台水井钻机移民咨询五菱配件非标螺钉力矩电机Frc
- BASF与菊水化工共同开发纳米涂料重庆手纸架混凝土深海鱼油通风设备Frc
- 常州电站辅机2019年取得好成效创公司历毛裤袜粉条机垃圾车箱包五金吸嘴Frc
- 闽侯闽江大桥七月建成通车钢圈超级电容物位仪表干燥机氨基树脂Frc
- 塑机行业需求呈地毯式扩散通化配液罐水封闸阀阀杆机器视觉Frc
- MiniLED主攻高阶中尺寸市场明年市场铂金牛仔服平衡吊磁选机内燃叉车Frc
- 晨鸣纸业融资融券信息118海带桩缩管机糖度计龙头花洒激光雕刻Frc