打印

请问VC++的CreateFile能打开自定义的 usb bulk 设备吗?

[复制链接]
5782|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
evilchips|  楼主 | 2013-8-21 14:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
RT:

我用CreateFile函数打开usb bulk设备时,返回无效的句柄,用GetLastError函数取得的返回值为1:表示功能错误。
自定义的bulk设备只有端点1,IN和OUT都用,纯bulk设备,用bushound发送IN的URB能正确返回数据。

if(g_DevFoundFlag==TRUE)
        {
                PrintfMessage("Device found!");
               
                g_hDevHandle=CreateFile(g_DevPathName,
                                                                GENERIC_READ|GENERIC_WRITE,
                                                                FILE_SHARE_READ|FILE_SHARE_WRITE,
                                                                NULL,
                                                                OPEN_EXISTING,
                                                                FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
                                                                NULL);
               
                if(g_hDevHandle != INVALID_HANDLE_VALUE)
                {
                        PrintfMessage("Device connect success.");
                }
                else
                {
                        if(GetLastError()==0x20)
                                PrintfMessage("Device connect failed! Device connected");
                        else
                                PrintfMessage("Device connect failed!");
                                //MessageBox(itos(GetLastError(), 16), "!!!!");
                                
                        g_DevFoundFlag=FALSE;
                }
        }
        else
        {
                PrintfMessage("Device not found!");
        }

程序已经找到了设备,就是连接不上。
驱动和程序都是参考圈圈的书生成的,打开设备用GUID打开的,GUID用MessageBox检查过和DS生成的一致,希望各位能提供点建议。调试信息输出字符串:
Device found!
Device connect failed!

平台是STM32F4-discovery,发到USB区,半天没人回。。。
沙发
lxyppc| | 2013-8-21 15:40 | 只看该作者
信息太少
bulk设备的驱动是你写的吧,打不开还要看你的驱动是怎么写的
至于bushound能工作,因为bushound是工作在总线驱动和你定义驱动之间。总线只要OK,你的设备就能工作
建议用 libusb或是usblib开发,自己写驱动又慢,又麻烦,还要过认证

你先检查一下这些参数吧
g_hDevHandle=CreateFile(g_DevPathName, // 这个名字是否正确
GENERIC_READ|GENERIC_WRITE,            // 这个没啥,一般驱动都支持
FILE_SHARE_READ|FILE_SHARE_WRITE,      // 这个可能有问题,如果你的驱动要支持share read和share write,你有编写这方面的代码么。
NULL,
OPEN_EXISTING,     // 这个应该没有问题
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,  // 这个一般驱动也支持
NULL);

综上,如果你的路径没有问题,那你要看看你的驱动是否支持share read和write
实在找不到问题,可以用WinDBG单步跟踪调试

使用特权

评论回复
板凳
evilchips|  楼主 | 2013-8-21 16:22 | 只看该作者
lxyppc 发表于 2013-8-21 15:40
信息太少
bulk设备的驱动是你写的吧,打不开还要看你的驱动是怎么写的
至于bushound能工作,因为bushound是 ...

驱动用driver studio 3.2生成,只有一个端点,IN和OUT都用,只生成两个函数,一个readfile,一个writefile,deviceioctl没有生成,这样不知道会不会有问题。路径用messagebox弹出看过,没有问题。
同时再问一下,createfile函数能打开自定义的bulk设备吗?因为有看到过有人说只能打开hid设备。

使用特权

评论回复
地板
lxyppc| | 2013-8-21 17:03 | 只看该作者
CreateFile 可以打开自定义设备,你的路径要正确,参数要正确

使用特权

评论回复
5
evilchips|  楼主 | 2013-8-21 17:04 | 只看该作者
重新把驱动生成了一遍,把IRP_MJ_CLOSE, IRP_MJ_CREATE, IRP_MJ_CLEANUP, IRP_MJ_DEVICE_CONTROL, IRP_MJ_READ, IRP_MJ_WRITE都保留下来,更新驱动和上位机的GUID,现在可以连接成功了。并且收到的数据也正确了。

使用特权

评论回复
6
lxyppc| | 2013-8-21 17:05 | 只看该作者
没有用过Driver Studio,理论上生成的空驱动是可以直接打开的
你在设备管理器上看到的设备状态是正常的么

使用特权

评论回复
7
evilchips|  楼主 | 2013-8-22 08:58 | 只看该作者
lxyppc 发表于 2013-8-21 17:05
没有用过Driver Studio,理论上生成的空驱动是可以直接打开的
你在设备管理器上看到的设备状态是正常的么 ...

是正常的,现在连接,接收数据都ok,头痛于怎样提高速度,我用的是STM32F4+USB3300做高速的bulk通讯。不知道该从哪些方面着手提高速度。

使用特权

评论回复
8
lxyppc| | 2013-8-22 09:05 | 只看该作者
驱动中的缓存开大点,里面的URB请求用双缓冲这样的形式
设备中做好数据的处理缓存,尽量在设备请求时就准备好数据
做好帧同步,充分利用一帧的带宽
测试的时候USB总线上不要挂其它的设备,因为bulk传输会和总线上别的设备竞争

使用特权

评论回复
9
evilchips|  楼主 | 2013-8-22 09:16 | 只看该作者
lxyppc 发表于 2013-8-22 09:05
驱动中的缓存开大点,里面的URB请求用双缓冲这样的形式
设备中做好数据的处理缓存,尽量在设备请求时就准备 ...

Ok,我先学习学习,谢谢斑竹的建议。

使用特权

评论回复
10
justin108| | 2013-8-22 11:47 | 只看该作者
Driver studio 的在win7下面就垃圾了。建议用WDK做,WDK对于电源什么的封装很完善!

使用特权

评论回复
11
tergy2012| | 2013-8-22 11:59 | 只看该作者
学习了

使用特权

评论回复
12
shaliixi| | 2017-3-11 16:54 | 只看该作者
本帖最后由 shaliixi 于 2017-3-11 16:57 编辑

  水很深啊。

   干嘛没有标准?  这个BUCLK不是标准,也达不了标准,因此也没有 标准的驱动,操作系统也做不了免驱动安装!!!!
   一边是 HID 通信速度达不了咱们广大电子工程师的通信速度要求。
   一边这样的需求 ,不被重视。

   看来 亚洲人 要 把美国人这种霸道的做法切断推翻才行啊。
   亚洲要有自己的USB 标准,USB 芯片。  用于安卓手机等, 推翻 微软这套垃圾标准



使用特权

评论回复
13
minzisc| | 2017-3-11 22:48 | 只看该作者
这个是usb驱动?

使用特权

评论回复
14
minzisc| | 2017-3-11 22:52 | 只看该作者
有工程文件可以参考学习吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

23

帖子

2

粉丝