Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
阅读:5921回复:59

讨论:usb接到pc后显示为串口的驱动

楼主#
更多 发布于:2004-04-12 15:33
物理设备通过usb连接到pc,然后在pc上显示为虚拟的串口,并且可以用串口操作的软件来操作读、写......
想了几天,有个粗略的想法是这样的:
总共写3个驱动,底下的是usb的驱动,中间是一层过滤的驱动,最上面的是虚拟串口的驱动。
因为是第一次做这个,不知道这样行不行?还有没有更简单的办法?
欢迎大家讨论

最新喜欢:

kb219kb219
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-13 17:28
查了一些资料,现在虚拟串口好像可以用超级终端打开了。
我想把中间层和usb的驱动写在一起,不知道这样可不可以?
另外,怎样使这两层驱动之间进行“通信”?有做过这方面的东东的
大虾,能不能介绍点经验?给个链接也行啊!!
lejianz
驱动中牛
驱动中牛
  • 注册日期2003-03-05
  • 最后登录2023-11-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望145点
  • 贡献值0点
  • 好评度116点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2004-04-15 13:13
我也想了解这方面的内容,望知道的大虾指点迷津。顶一下!
一起交流,共同提高!
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-04-16 12:04
怎么没有几个人进来讨论啊?
现在我觉得框架应该是这样的:usb驱动+虚拟串口驱动,
在usb驱动里注册一个interface,然后在虚拟串口驱动通过这个guid来与usb驱动“通信”,在虚拟串口层做各种irp处理。
dennis761222
驱动牛犊
驱动牛犊
  • 注册日期2003-12-12
  • 最后登录2006-03-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-04-21 13:01
我是把usb和串口做成了一个驱动。
一般的串口程序能工作。但是,对于串口以中断方式读取串口还存在一些问题。
有兴趣的话, 我们可以一起研究,sourcecode 也可以给你。

[编辑 -  4/26/04 by  dennis761222]
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-04-22 14:48
嗯,好啊,好啊。。。。
一起讨论,共同进步啊!!
我现在分别写了usb层和虚拟串口层的驱动,
设想是通过内部ioctl来通信,具体就是虚拟串口层收到一个标准的ioctl的时候,比如ioctl_serial_set_baud_rate,在串口层处理一下,得到divisor,然后往usb下层驱动发,再在usb层处理,打包往下发。
这样可以的吗?好像比较麻烦,大概要处理7个这样的请求。
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-04-22 14:58
我是把usb和串口做成了一个驱动。
一般的串口程序能工作。但是,对于串口以中断方式读取串口还存在一些问题。
有兴趣的话, 我们可以一起研究,sourcecode 也可以给你。


我的邮箱:shentu@263.net,学习一下,谢谢啊!
dennis761222
驱动牛犊
驱动牛犊
  • 注册日期2003-12-12
  • 最后登录2006-03-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-04-22 15:05
可以的。
这样, 应该对ioctrl command 有个 编号,对应的在usb设备要实现ioctol的处理。

你能把你的usb设备功能说说吗?
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-04-22 19:23
也不是usb设备。
其实是这样的,pc的usb口->usb ip核->dw_16550芯片->别的东东(modem等),大概就是这样子了。
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-04-22 19:51
我有个疑惑就是:
怎样才能在上层驱动的fdo加到与下层驱动通信的设备栈中?
ntddk的例程里,一般都是在AddDevice的时候,把fdo加到pdo。
是不是要在IOCallDriver之前,用IOGetDeviceObjectPoint打开下层
的驱动,然后把irp发下去?还是在addDevice的时候就建好设备栈?

Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-04-23 13:53
不好意思,重新看了wdm的那本电子书,把上面的问题搞清楚了。
其实,那是两种方法,都是可以的。。。

另外,我想在usb客户程序里每隔1ms就poll一次中断传输得到的数据。资料上说中断传输的polling是由usb类驱动程序实现的,那么,
我怎样才能改变它的时间间隔?在我的驱动程序里,是不是要每隔
1ms就调用某个程序去读取数据?
dennis761222
驱动牛犊
驱动牛犊
  • 注册日期2003-12-12
  • 最后登录2006-03-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-04-23 14:10
我给你的soucecode中,实现了interrupt endpoint polling data from usb devcie. 在intRead.c文件中。

中断端点是由系统 poll在usb 设备的数据。
,只有系统收到usb设备数据是, 对中断端点的读操作才会完成。

在usb 驱动中, 我觉得和bulk没多大区别。
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-04-23 14:42
刚刚看了,应该是你这样就可以实现了的。
硬件工程师告诉我,是在枚举设备的时候告诉系统要1ms查询一次。
Hover
驱动牛犊
驱动牛犊
  • 注册日期2003-02-04
  • 最后登录2004-11-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-04-26 11:45
我也在写一个类似的驱动。
我的设备是:usb接口的hid设备连接到pc,用虚拟com来和hid设备通讯。
因为windows中有自带的usb接口的hid设备的驱动程序,所以我不必写usb那一层的驱动,只是在虚拟串口的驱动中直接读写usb设备。
感觉处理虚拟串口的众多ioctl很麻烦!!
有个问题:
这个虚拟串口驱动在超级终端下可以正常工作,但是在一个使用mscomm这个控件与com通讯的程序中,我对一个read irp调用了
completeirp,但是在应用程序端调用mscomm.input时他里面没有数据,这是怎么回事?
各位可以解释一下吗,谢谢!



dennis761222
驱动牛犊
驱动牛犊
  • 注册日期2003-12-12
  • 最后登录2006-03-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-04-26 15:05
mscom和Hyperterminal采用了不同的方式读取数据。
mscom用事件通知的方式, 在虚拟串口驱动中要处理mask IO_CTRL.
Hyperterminal用查询的方式。
Hover
驱动牛犊
驱动牛犊
  • 注册日期2003-02-04
  • 最后登录2004-11-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-04-26 15:40
我有返回mask,但因为是虚拟的串口,对于象
SERIAL_EV_DSR,SERIAL_EV_CTS,SERIAL_EV_RLSD,SERIAL_EV_BREAK
我不知道该怎样设置,我就全部返回给应用程序了。

dennis761222
能否解释一下事件通知和查询方式有什么不同?
我对串口的有些细节好像还是不太了解,可以提供个资料看看吗?
acidfish
驱动小牛
驱动小牛
  • 注册日期2002-05-20
  • 最后登录2009-11-11
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-04-26 17:01
mscom和Hyperterminal采用了不同的方式读取数据。
mscom用事件通知的方式, 在虚拟串口驱动中要处理mask IO_CTRL.
Hyperterminal用查询的方式。
 

to dennis: 你的驱动做得很不错了。而且要比搂主提供的思路要简单的多。有机会也向大家报告一下嘛。

to hover: 多搜一搜网上的资料。串口的很多细节的确不太好把握。多做一些实验,应该会有更多的体会的。
timon.jz
驱动牛犊
驱动牛犊
  • 注册日期2004-04-26
  • 最后登录2004-04-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-04-26 17:30
多介绍些资料网站好么?
弄来弄去就找到这里一个中文的
呵呵
vennychang
驱动牛犊
驱动牛犊
  • 注册日期2003-02-07
  • 最后登录2005-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-05-25 10:07
我是把usb和串口做成了一个驱动。
一般的串口程序能工作。但是,对于串口以中断方式读取串口还存在一些问题。
有兴趣的话, 我们可以一起研究,sourcecode 也可以给你。

[编辑 -  4/26/04 by  dennis761222]


我也做了和你一
kb219
驱动牛犊
驱动牛犊
  • 注册日期2004-08-17
  • 最后登录2008-06-19
  • 粉丝0
  • 关注0
  • 积分208分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-08-17 16:41
我是把usb和串口做成了一个驱动。
一般的串口程序能工作。但是,对于串口以中断方式读取串口还存在一些问题。
有兴趣的话, 我们可以一起研究,sourcecode 也可以给你。

[编辑 -  4/26/04 by  dennis761222]


我也想作一个这样的驱动,可是刚开始学不懂的东西很多,不知道能不能得到一份sourcecode哪?
kb219@sina.com.cn
上一页
游客

返回顶部