windows下虚拟串口驱动开发

合集下载

USB转串口的虚拟串口驱动

USB转串口的虚拟串口驱动

USB转串口的虚拟串口驱动简介USB2COM是USB转串口转换器的虚拟串口驱动程序(Windows2000/XP),适用于Cypess的USB-HID->COM转换器(未测试), 以及与之兼容的设备。

USB-HID->COM转换器是兼容USB HID类设备的设备,因此可以不用此驱动,直接以USB_HID类设备访问。

特性:∙支持设置波特率、奇偶校验、停止位。

∙事件检测。

仅支持SERIAL_EV_RXCHAR | SERIAL_EV_RXFLAG | SERIAL_EV_TXEMPTY。

∙数据流控。

todo∙超时设置。

todo安装方法-:1.把HID->COM转换器插入USB端口。

2.HID->COM转换器被识别为:USB人体学输入设备。

3.选择设备管理器->人体学输入设备->USB人体学输入设备,单击右键。

4.选择更新驱动程序。

5.选择从列表或指定位置安装,单击下一步。

6.选择不要搜索,我要自己选择要安装的驱动程序,单击下一步。

7.选择从磁盘安装,浏览驱动程序所在路径,单击确定。

8.提示没有通过Windows徽标测试,选择仍然继续。

9.安装完成,端口(COM和LPT) 项下面显示USB-HID ->Comm Port(COM?)。

方法二:使用安装程序。

还没写-;)访问设备∙使用Windows APIo阻塞式读写comtst.co检测事件comevent.co适当的超时设置,可以实现有数据时ReadFile返回,无数据时阻塞。

o CommTimeOuts.ReadIntervalTimeout = 3;o CommTimeOuts.ReadTotalTimeoutMultiplier = 0;o CommTimeOuts.ReadTotalTimeoutConstant = 0;o CommTimeOuts.WriteTotalTimeoutMultiplier = 0;o CommTimeOuts.WriteTotalTimeoutConstant = 0;o bRc = SetCommTimeouts(hCommPort, &CommTimeOuts);∙MFC中使用MSComm控件1.VC6.0 Project菜单--->Add toProject--->Components and Controls--->RegisteredActiveX Controls,选择Components: MicrosoftCommunications Control 插入到当前的Workspace中。

虚拟串口设备用户指南

虚拟串口设备用户指南

虚拟串口设备用户指南
1 文采虚拟串口原理 (2)
1.1 虚拟串口软件结构 (2)
1.2 虚拟串口的不同应用类型 (3)
1.2.1 网络型虚拟串口原理 (3)
1.2.2 TCP Client类型网络虚拟串口 (4)
1.2.3 TCP Server类型网络虚拟串口 (4)
1.2.4 UDP类型网络虚拟串口 (5)
1.2.5 互联型虚拟串口 (6)
2 虚拟串口安装以及管理 (8)
2.1 软件安装平台 (8)
2.2 软件安装目录下各个文件解释 (8)
2.3 添加虚拟串口 (8)
2.3.1 添加TCP Client型虚拟网络串口 (8)
2.3.2 添加TCP Server型虚拟网络串口 (11)
2.3.3 添加UDP型虚拟网络串口 (13)
2.3.4 添加互连型虚拟串口 (15)
2.4 删除虚拟串口 (16)
2.5 设置串口参数 (17)
3 测试虚拟串口设备 (18)
3.1 测试TCP Client类型虚拟串口 (18)
3.2 测试TCP Server类型虚拟串口 (20)
3.2.1 用Peer_sim测试TCP Server型虚拟串口 (20)
3.2.2 用telnet测试TCP Server型虚拟串口 (21)
3.3 测试UDP类型虚拟串口 (22)
3.4 测试互连型虚拟串口设备 (24)。

虚拟串口原理

虚拟串口原理

虚拟串口原理虚拟串口是指通过软件模拟出一个真实的串口,并且可以进行串口通信。

虚拟串口主要应用于各种嵌入式设备、单片机、工业控制、通讯设备等领域,为这些领域的开发和应用提供了方便。

虚拟串口的原理非常简单,就是将计算机中的一个可用于串口通信的软件资源分配给指定的应用程序。

具体实现方式是通过虚拟串口驱动程序实现的。

虚拟串口驱动程序是一种软件,它能够将计算机中可用的资源分配给应用程序。

在应用程序中,虚拟串口就好像是一条真实的串口一样,可以进行串口通信的读写操作。

虚拟串口驱动程序可以根据应用程序的需要,将虚拟串口映射到任意一个空闲的物理串口上,让应用程序通过该物理串口进行通信。

1.基于软件模拟的虚拟串口。

这种方式是通过软件模拟出一个虚拟串口,然后通过操作系统的IO操作将数据传输到物理串口。

这种实现方式的优点是不需要硬件支持,且可以自由地选择硬件串口,但是由于数据传输的效率较低,所以不适合对实时性要求较高的应用。

虚拟串口是一个非常方便的工具,可以使得应用程序可以很方便地进行串口通信。

虽然其实现方式有很多种,但是其基本原理都差不多,都是通过软硬件的组合实现虚拟串口的功能。

虚拟串口的使用非常广泛,主要应用于嵌入式设备、通信设备、仪器仪表、工业自动化和控制等领域。

在这些领域中,传统的串口通信方式还是占据主要的地位,而虚拟串口可以很好地兼容传统的串口通信方式,同时又具有更加灵活的应用和更高的性能。

虚拟串口有很多应用场景,下面就简单介绍一下其中一些常见的应用:1.串口转网口随着互联网和网络技术的不断发展,许多设备需要进行网络通信,但是这些设备往往只提供串口接口。

这时,可以通过虚拟串口将串口转换为网口,使得设备可以通过网络进行通信。

2.串口扩展有些应用需要同时使用多个串口,例如工业自动化和控制领域中的数据采集、机器人控制等。

这时,可以通过虚拟串口将一个物理串口扩展为多个虚拟串口,使得应用程序可以同时访问多个串口。

3.串口模拟有些应用需要模拟外部设备的串口信号,例如嵌入式设备的调试和测试等。

网口虚拟串口通信技术的设计与实现

网口虚拟串口通信技术的设计与实现

网口虚拟串口通信技术的设计与实现作者:黄丽娥来源:《电脑知识与技术》2013年第14期摘要:串口通信是目前较常见的一种通信方式,为了实现串口设备的网络通信功能,该文介绍了UMDF驱动模式、TCP/IP工作模式、虚拟串口通信及Socket通信等相关技术,详细介绍了创建虚拟串口驱动和串口与网口通信的三种工作模式的工作原理及设计过程,最后通过测试实现了虚拟串口通信。

由于是通过程序设计实现,不需要对设备进行改装或是添加新设备,极大地简化了工作和降低了硬件成本。

关键词:虚拟串口;Socket通信;TCP/IP模式中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2013)14-3245-08串行通信是目前广泛存在的一种通信方式,很多计算机外设是通过串行接口连接的。

但通过串口设备联网时,其通信的传输速度低,影响通信效率;为了使串口设备更好地实现联网功能,目前新产品设备通信接口转换的方式实现了联网功能,但是仍有一些旧设备不具备接口转换功能,而是借助硬件设备联网,如MOXA公司的串口设备联网服务器,但是通过硬件方式实现联网会增加硬件成本,具有一定的局限性。

因此通过程序设计方式,即在本机虚拟出一个和真实串口一样的虚拟串口设备来实现联网通信,操作方便且降低了成本。

1 课题关键技术1.1 基于UMDF驱动模式大多数的驱动程序都是运行在Microsoft Windows 内核模式下的,应用内核模式来完成系统地址空间和内部结构的访问。

但是内核驱动程序会影响系统的运行,内核程序受到损害会直接影响系统的运行甚至导致机器的瘫痪。

为此,从Vista开始,微软推出基于用户的UMDF (User-Mode Driver Framework)驱动模式。

基于用户模式的驱动程序,它只是访问用户地址空间,和内核模式驱动程序相比,用户模式驱动具有更好的安全性与稳定性,不会像内核模式驱动一样因为驱动有问题而造成系统崩溃。

1.2 TCP/IP工作模式由于串口协议不具有网络层和传输层,所以串口转网口的通信,实际是将串口数据作为TCP/IP的应用层数据,用TCP封装传输的方式。

WinCE6.0下双模终端的USB转串口驱动开发

WinCE6.0下双模终端的USB转串口驱动开发
关键词 : n E . ; 模终端 ;S WiC 6 0 双 U B转 串 口
0 引 言
我国 3 G牌 照 的 发放 , 宣告 了 3 时代 的到 来 , G
基于 T —C MA和 C MA WC MA 的双 模 终 端 将 DS D D / D 取代 2 时代 的单 模 终 端 。诺 基亚 、 星 、 为 、 G 三 华 中 兴等 国 内外 通 信 厂 商 都 积 极 投 入 到 双 模 手 机 终 端 的开发 中来 , 目前 双模 手 机终 端 的研发 已经 成 为热 点 。当前市场 中主要 的智 能手 机操 作 系统 有 : o i N ka 主推 的 Sm in 开 放 内核 的嵌 入 式 Ln x 微 软 的 y ba , iu , WiC n E等 。由于 WiC 6 0嵌人 式 系统具 有实 时性 n E.
Wi E. U B设备驱动开发只提供了一些底层支持 n 60对 S C
的原因, 以通 信 模 块 厂 商 未 提 供 WiC 6 0下 的 所 nE .
U B驱 动 , 要 实 现 通 信 模 块 的基 本 功 能 , 开 发 S 而 除
纯 U B驱 动 外 , WiC 6 0下 , 需 要 修 改 Mo S 在 nE. 还 . d m源码 , e 存在 着开 发 周 期 长 、 作量 大 、 容 性 差 工 兼 等 问题 , 给开发 人 员带 来 了极 大 的不 便 。而通 过 串 口直接对 Mo e dm进 行操作 , 不仅 避 免 了上述 在开 发 中存 在 的问 题 , 时 由于操 作 Mo e 的 是 虚 拟 串 同 dm 口, 由它来 适 配 Moe 不 会 出 现 由物 理 串 口操 作 d m, Mo e 时制 约 M d m处理速 率 的问题 , 然保持 了 dm oe 仍 U B高 速的特 点 , 开 发人 员 只 需 开发 出对应 模 块 S 故 的 U B转 串 口驱 动 亦 可实 现 上 网 、 电话 等 功 能 ; S 打

Windows CE下的串口驱动设计

Windows CE下的串口驱动设计
d vlp n f r e,rht tr f rvr n eitr p rcsigi id ws E Ipeet te rjc o r l r e, hc o ie e eeo met i rac icue ie dt er t oes W n o .t rsns oet f ei i rw i c mbns od v e od a h n u p n n C p h s ad v h h t
ly rdd ie t te m rv ra dito u e h p cf e eo me rc s fsra rv ra dtepo e s fitru t rc sig a ee rv rwi sra d e, n r d c stes e i cd v lp nt o eso e l i e n rc s er p o e sn . h i n i p i d h o n p
及 Wi o s E的中断处理 过程 ,提出流接 口和分层相结合的驱动程序 设计方案 ,给出 Wi o s E 下串口驱动的具体开发过程及串 口 n w d C n w d C 驱
动 的 中断 处 理过 程 。
关健词 :嵌入式系统;中断处理 ;串 口驱动
De i n o e i l i e i d wsCE sg fS ra v ri W n o Dr n
中圈 分类号 E 下 的 串 口驱 动 设 计 no C
司浩乐 ,万 波 ,田玉敏 ‘
( 西安电子科技大学外部设备研究所 ,西安 7 0 7 ) 10 1

要 :驱动程序 及串口驱动的开发和设计是构建嵌入式系统 的重要组成部分。该文介 绍了 Wi o s E下 的驱动程序 的结构、开发过程 n w d C
软为每种类型的本地驱动提供 了定制的接 I ,本地设备 驱动 S l 为所有特定类型的设备提供 了一组标准的功能 。常见的内建 驱动有键盘 、触摸屏 、音频设备等 。 可 安 装 的驱 动 程 序 又 称 作 流设 备 接 口程 序 (t a Sr ms e It fc r e) ne ae D i r,是 由设备 管理器 动态加载 的用 户模 式的 r v D L。这类驱动具有一组相 同的导出函数——流接 口函数, L

虚拟串口用法

虚拟串口用法

虚拟串口用法介绍虚拟串口是一种软件模拟的串口,可以在计算机中创建并使用。

它能够模拟传统的硬件串口的功能,使得应用程序可以使用串口进行通信,而不需要实际的硬件设备。

虚拟串口广泛应用于各种领域,包括嵌入式系统开发、通信协议调试、设备模拟测试等。

虚拟串口的原理虚拟串口通过操作系统提供的API接口来创建,在操作系统中虚拟串口被认为是一个特殊的设备。

当应用程序使用虚拟串口进行数据读写时,操作系统会将数据通过特定的方式传递给另一个应用程序或者设备驱动程序,从而实现数据的传输。

虚拟串口的使用场景虚拟串口在各种场景中得到广泛的应用。

以下是一些常见的使用场景:1. 嵌入式系统开发在嵌入式系统开发中,通常需要与外部设备进行串口通信。

使用虚拟串口可以方便地在开发环境中模拟外部设备,进行调试和测试。

同时,通过虚拟串口可以方便地与计算机上的工具进行通信,如调试助手、串口监视器等。

2. 通信协议调试在开发和测试通信协议时,使用虚拟串口可以模拟通信的两端,方便进行调试和验证。

同时,虚拟串口还可以记录通信数据,便于分析和研究。

3. 设备模拟测试对于某些外部设备,可能难以获取或者代价较高。

通过使用虚拟串口,可以模拟这些设备的功能和行为,方便进行系统测试和功能验证。

虚拟串口的实现方式虚拟串口的实现方式有多种,包括软件虚拟串口和硬件虚拟串口。

1. 软件虚拟串口软件虚拟串口是在操作系统上通过软件实现的虚拟串口。

它通过操作系统提供的API接口创建虚拟串口,并模拟串口的读写功能。

这种方式成本较低,易于使用,但有一定的性能限制。

2. 硬件虚拟串口硬件虚拟串口是通过硬件设备实现的虚拟串口。

它使用专用的硬件设备来模拟串口的行为,并与操作系统进行交互。

这种方式的性能较好,适用于对性能要求较高的场景,但成本较高。

虚拟串口的配置与使用配置和使用虚拟串口的具体方法和步骤与操作系统和虚拟串口的实现方式有关。

以下是一般情况下使用虚拟串口的步骤:1.安装虚拟串口驱动程序(如果有)。

Windows2000下虚拟串口WDM驱动程序的开发

Windows2000下虚拟串口WDM驱动程序的开发

VOl2 _ 2 No. 1
Ma.0 r 2 08
Widws 0 0下虚拟 串 口 WD 驱 动程序的开发 no 0 2 M
孙筱 萌 ,夏 斌 ,韩德红 ,方 晓
( 空军雷达学院电子对抗系,武汉 4 0 1 ) 3 09

要 : 对 传 统 R 3 针 S22串行 通 信 存 在 的 通 信 距 离、 口数 量 等 多 个 方 面 的 限制 , 出 了在 Wi o s 0 0 端 提 n w 2 0 d
和 WD 驱 动程 序 , M 并且 对 D K函数进 行 了类 的 D
作 者 简 介 : 筱 萌 (9 1 )女 , 师 , 要 从 事 计 算 机 技 术 与 应 用 研 究 孙 17 ~ , 讲 主
维普资讯
和 s 砌C 等开 发工具 . r eWok 用 于开发 K 0 E D v r rs i MD
WD Wi3 r e Mo e) 即 W i o s 动 M( n 2D vr d1 , i n w 驱 d
收 稿 日期 :0 71- ; 修 订 日期 :071-2 2 0—1叭 20 —1 2
中图 分 类 号 : P 9 T 31 文 献标 识 码 : A
在 工业 串行 通信 领域 中 ,R .3 S22是会 被经 常
用 到 的数据 传输 标 准之一 . 例如 , 通 P 普 C一 般 会
提 供 1 4 标 准 R .3 端 口 , 作或 编程 这些 标 .个 S2 2 操 准的 C M端 口也是 非常方便 的. O 但是 , 传统 R .3 S2 2 串行通信 存在着 数据 可靠性 、 信距 离 、 口数 量 通 端 等 多个方 面 的限制 . 文先利 用Z G A 本 L C N接 口卡 、 C N 3MB转换 器等设备 实现 远程 R .3 A 22 S22通信 的 设备驱动软件即虚拟 串 口服务器 ; 然后结合 N Mea u g 公 司 的D ieS d 给 出 了虚 拟 串 口设 备驱 动程 序 r r的配 置工具 , 运行
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

现在介绍在windows XP下开发虚拟串口的方法。

可以开发一个虚拟串口,将读写请求传递给USB驱动,这样就可以利用现成的串口调试工具向USB设备读取了。

1、DDK串口开发框架DDK对串口驱动提供了专门接口。

只要编写的驱动满足这些接口,并按照串口标准的命名方法,不管是真实的串口设备,还是虚拟设备,Windows操作系统都会认为这个设备是一个标准的串口设备。

用标准的串口调试工具都可以与这个设备进行通信。

1、1 串口驱动的入口函数本章的实例程序是在HelloWDM驱动的基础上修改而来,入口函数依然是DriverEntry,在DriverEntry函数中指定各种IRP的派遣函数,以及AddDevice 例程、卸载例程等。

[cpp]view plaincopy1./************************************************************************2.* 函数名称:DriverEntry3.* 功能描述:初始化驱动程序,定位和申请硬件资源,创建内核对象4.* 参数列表:5. pDriverObject:从I/O管理器中传进来的驱动对象6. pRegistryPath:驱动程序在注册表的中的路径7.* 返回值:返回初始化驱动状态8.*************************************************************************/9.#pragma INITCODE10.extern"C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject,11. IN PUNICODE_STRING pRegistryPath)12.{13. KdPrint(("Enter DriverEntry\n"));14.15. pDriverObject->DriverExtension->AddDevice = HelloWDMAddDevice;16. pDriverObject->MajorFunction[IRP_MJ_PNP] = HelloWDMPnp;17. pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = HelloWDMDispatchControlp;18. pDriverObject->MajorFunction[IRP_MJ_CREATE] = HelloWDMCreate;19. pDriverObject->MajorFunction[IRP_MJ_CLOSE] = HelloWDMClose;20. pDriverObject->MajorFunction[IRP_MJ_READ] = HelloWDMRead;21. pDriverObject->MajorFunction[IRP_MJ_WRITE] = HelloWDMWrite;22. pDriverObject->DriverUnload = HelloWDMUnload;23.24. KdPrint(("Leave DriverEntry\n"));25.return STATUS_SUCCESS;26.}其中在AddDevice例程中,需要创建设备对象,这些都是和以前的HelloWDM驱动程序类似。

在创建完设备对象后,需要将设备对象指定一个符号链接,该符号链接必须是COM开头,并接一下数字,如本例就采用了COM7。

因为COM1和COM2在有些计算机中有时会被占用,因此,当该设备对象在指定符号链接时,应该避免采用这些名称。

[cpp]view plaincopy1./************************************************************************2.* 函数名称:HelloWDMAddDevice3.* 功能描述:添加新设备4.* 参数列表:5. DriverObject:从I/O管理器中传进来的驱动对象6. PhysicalDeviceObject:从I/O管理器中传进来的物理设备对象7.* 返回值:返回添加新设备状态8.*************************************************************************/9.#pragma PAGEDCODE10.NTSTATUS HelloWDMAddDevice(IN PDRIVER_OBJECT DriverObject,11. IN PDEVICE_OBJECT PhysicalDeviceObject)12.{13. PAGED_CODE();14. KdPrint(("Enter HelloWDMAddDevice\n"));15.16. NTSTATUS status;17. PDEVICE_OBJECT fdo;18. UNICODE_STRING devName;19. RtlInitUnicodeString(&devName,L"\\Device\\MyWDMDevice");20. status = IoCreateDevice(21. DriverObject,22.sizeof(DEVICE_EXTENSION),23. &(UNICODE_STRING)devName,24. FILE_DEVICE_UNKNOWN,25. 0,26. FALSE,27. &fdo);28.if( !NT_SUCCESS(status))29.return status;30. PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION)fdo->DeviceExtension;31. pdx->fdo = fdo;32. pdx->NextStackDevice = IoAttachDeviceToDeviceStack(fdo, PhysicalDeviceObject);33. UNICODE_STRING symLinkName;34. RtlInitUnicodeString(&symLinkName,L"\\DosDevices\\COM7");35.36. pdx->ustrDeviceName = devName;37. pdx->ustrSymLinkName = symLinkName;38. status = IoCreateSymbolicLink(&(UNICODE_STRING)symLinkName,&(UNICODE_STRING)devName);39.40.if( !NT_SUCCESS(status))41. {42. IoDeleteSymbolicLink(&pdx->ustrSymLinkName);43. status = IoCreateSymbolicLink(&symLinkName,&devName);44.if( !NT_SUCCESS(status))45. {46.return status;47. }48. }49.// 设置为缓冲区设备50. fdo->Flags |= DO_BUFFERED_IO | DO_POWER_PAGABLE;51. fdo->Flags &= ~DO_DEVICE_INITIALIZING;52.53. KdPrint(("Leave HelloWDMAddDevice\n"));54.return STATUS_SUCCESS;55.}在创建完符号链接后,还不能保证应用程序能找出这个虚拟的串口设备,还需要进一步修改注册表。

具体位置是HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM,可以在这里加入新项目。

本例的项目名是MyWDMDevice,类型为REG_SZ,内容是COM7。

在上述步骤后,即在AddDevice例程中创建COM7的符号链接,并且在注册表进行相应设置,系统会认为有这个串口驱动,用任何一个串口调试软件,都可以枚举到该串口。

1、2 应用程序与串口驱动的通信其实对于一个真实的串口驱动,或者这个介绍的虚拟串口驱动,都需要遵循一组接口。

这组接口由微软事先定义好了,只要符合这组接口,windows就会认为这是一个串口设备。

这里所指的接口就是应用程序发的IO控制码和读写命令,因此对于串口驱动只要对这些IRP的派遣函数编写适当,就能实现一个串口驱动。

首先用IRPTrace看一下,需要对哪些IRP进行处理,笔者加载本章已经介绍的虚拟串口驱动,并用IRPTrace 拦截其IRP处理信息,在打开串口工具后,会发现IRPTrace立刻跟踪到若干个IO控制码,如下所示:下面依次解释这些IO控制码,理解这些IO控制码,并处理好这些控制码,是编写串口驱动的核心。

关于这些IO控制码在ntddser.h文件中,都有相应的定义,并且还有相应的数据结构定义。

(1)IOCTL_SERIAL_SET_QUEUE_SIZE这个控制码是应用程序向驱动请求设置串口驱动内部的缓冲区大小,它是向驱动传递SEARIAL_QUEUE_SIZE 数据结构来进行设置的,对于虚拟串口驱动来说,这是不需要关心的。

用IRPTrace可以看出,串口调试工具会向驱动发送的请求是0x400大小的缓冲区大小。

(2)IOCTL_SERIAL_GET_BAUD_RATE串口调试工具会接着向驱动发送IOCTL_SERIAL_GET_BAUD_RATE命令,这主要是询问驱动这个设备的波特率。

驱动应该回应应用程序SEARIAL_BAUD_RATE数据结构,来通知波特率的数值。

(3)IOCTL_SERIAL_GET_LINE_CONTROL串口调试工具接着向驱动发送IOTCL_SERIAL_GET_LINE_CONTROL命令,这主要是为了返回串口的行控制信息,行控制信息用SERIAL_LINE_CONTROL数据结构表示。

[cpp]view plaincopy1.typedef struct _SERIAL_LINE_CONTROL {2.UCHAR StopBits;3.UCHAR Parity;4.UCHAR WordLength;5. } SERIAL_LINE_CONTROL,*PSERIAL_LINE_CONTROL;其中StopBits是停止位,可以是STOP_BIT_1、STOP_BITS_1_5、STOP_BITS_2等取值。

相关文档
最新文档