• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >嵌入式开发 > 请版主和高手们关注---USB通讯程序中遇到的高难度问题

请版主和高手们关注---USB通讯程序中遇到的高难度问题

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了第一版主网,如何做app版主,魔幻版主神成长日志,第一版主小说网,第一版主小说等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 请版主和高手们关注---USB通讯程序中遇到的高难度问题
描述:

我现在正在进行编程测试,主要是实现应用程序与EV2300(TI公司产品)的USB设备通讯。
     据了解,USB设备驱动由TI厂商自己开发的(我们无法得到它的技术资料),从应用角度很难明白通讯的实质;
并非像HID类型USB设备,直接调用系统API函数就可以实现的。
 
从网上获取了一些USB应用开发的信息,我们写了一个测试程序,发现
存在许多问题,请指导:
1. 如何获取GUID信息,在INF文件中并没有包含此信息,只有VendorID=0451,ProductID=0035,是不是每个USB设备都对应不同的GUID,而它是打开USB设备的唯一途径;很多人都是从注册表中获取的,有没有可能通过程序实现呢?
 
2. 在获得GUID之后,就可以得到设备路径,主要通过系统API函数实现:
SetupDiGetClassDevs,SetupDiEnumDeviceInterfaces,SetupDiGetDeviceInterfaceDetail
得到的设备路径DevicePathName,是否要在其后面加上pipe0,1,2对应于通讯所使用的通道?
 
3. USBHandle = CreateFile _
        (DevicePathName, _
        GENERIC_READ Or GENERIC_WRITE, _
        (FILE_SHARE_READ Or FILE_SHARE_WRITE), _
        Security, _
        OPEN_EXISTING, _
        0&, _
        0)
打开设备时,有时成功,有时失败,得到"请求的资源正在使用中"错误信息,是不是CreateFile 参数的
问题?
 
4. 最关键的错误
Result = WriteFile(USBHandle, _
              WriteBuffer(0), _
              CLng(Capabilities.OutputReportByteLength), _
              NumberOfBytesWritten, _
              0)
Result返回为0,写数据没有成功,不知道为什么?也不明白WriteBuffer(0), 和Capabilities.OutputReportByteLength
的含义。调试了很久,也找不到原因,现在都是火烧眉头了,一下子好像掉进了泥陷中,举步维履。
 
由于我们对USB设备开发不甚了解,一切都还是摸索,探讨中,恳请您的帮助,万分感谢!


解决方案1:

到www.8dragon.com下载USB在线检测程序。可以借鉴!

解决方案2:

首先申明我不是高手,以下是我的一些理解,如果有错误请大家指正
1.关于GUID。我们说一个USB设备,如USB Modem, USB表明了设备使用的总线类型,而modem表明了这
个设备的功能,所以这是两个层面。因此就会有这钟现象:USB Modem属于Modem类,USB摄像头(Webcam)
属于Image类等。定位一个USB设备可以通过 设备所属的类GUID + VID_PID
2.在Win32系统里面,设备一般都是抽象为文件,应用程序与驱动程序的通信一般是通过文件操作的API,
CreateFile,ReadFile等
3.打开设备的函数CreateFile,其中最重要的参数是文件路径,也就是设备路径,所以关键就是如何找
到设备的路径,方法就是通过楼主所列举的那几个SetupDiX函数。应用程序是跟驱动程序这个整体通信,
而具体通信的通道应该在驱动程序里面处理
4.通过试加猜去了解黑盒子里面的东西是痛苦的

解决方案3:

1.一般来说,不同的设备驱动有不同的GUID,对于别人的驱动,好象只能从注册表里读了.
2.不知道
3.同楼上
4.如果USB设备的驱动没有写IRP_MJ_WRITE例程,你这种方法是永远不会成功的.(我写的几个USB驱动都属于这种情况)

解决方案4:

我刚开始看usb开发的书,也是一头雾水,以下为个人观点,仅供参考:
1. 书上说要从注册表中读取。其它的我就不太清楚了
2. 是否要加上通道号码,我想这个比较容易,你读取之后,看读出的结果是否有通道号码,如果没有,你就把它加上去。(好笨呀)
3. 应该是程序的问题。比如过去打开,但没有关闭。或者关闭了,但硬件还没有“关闭”
4. WriteFile(
  HANDLE hFile,                    // handle to file to write to
  LPCVOID lpBuffer,                // pointer to data to write to file
  DWORD nNumberOfBytesToWrite,     // number of bytes to write
  LPDWORD lpNumberOfBytesWritten,  // pointer to number of bytes written
  LPOVERLAPPED lpOverlapped        // pointer to structure for overlapped I/O
);
后两个可以是NULL,也可以是指针,但是用NumberOfBytesWritten不是指针,恐怕是不行的吧,你就在其前面加上个“&”。不知道你的WriteBuffer(0)是个什么类型,如果不是一个指向要写入的数据的指针,我真猜不出其结果会是什么

解决方案5:

WriteBuffer(0)中的0是什么,不会写buffer是空的吧?
Capabilities.OutputReportByteLength应该是需要写
的数据长度吧,即WriteBuffer中实际的数据长度。

解决方案6:

USB驱动层不是用CreateFile,WriteFile这样的高级系统调用来操作的.那个CreateFile得到的句柄只能针对USB层的一些状态做ioctl.

解决方案7:

1、USB设备的GUID应该是一样的,也就是统一的,只要在INF文件里的class = USB;
2、WriteFile的说明你应该看看MSDN;在WriteFile后面调用GetLastError()看返回什么错误。
3、至于如何打开USB设备,我没玩过,不清楚。

解决方案8:

不知道你的设备是否支持WIA,若支持,你可下载xp sdk

解决方案9:

高级问题,帮up

解决方案10:

帮你UP,学习!

解决方案11:

最好能知道,他下面的固件是怎么写的,这样才好找错误,,
现在你是单方面看上层的,,好象不好做,,,
你不知道下面是干吗的,就给别人下命令,,别人当然不听了啊


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 请版主和高手们关注---USB通讯程序中遇到的高难度问题

相关文章

  • 2017-06-05 编译vxvorksbootloader/bsp报错
  • 2017-06-05 linux文件读写open()函数的返回值
  • 2017-06-05 在C++中,如何知道计算机是支持USB11还是USB20的?
  • 2017-06-05 mime为什么有MIME协议?
  • 2017-06-05 请教取cmos时间的问题
  • 2017-06-05 Fatfs文件系统创建新文件夹及在该路径下创建文件
  • 2017-06-05 如何用单片机通过wifi模块发送大量数据给服务器
  • 2017-06-05 电脑连接无线网怎么配置Samba
  • 2017-06-05 有没有人对数码相机与pc的通信协议比较了解的?
  • 2017-06-05 如何为Lua构建一个安全sandbox?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 海思hi3521内核解压失败
    • 使用虚拟机调试设备
    • 关于S52单片机复位
    • RTL8019AS填入发送区的数据是什么格式??
    • 用UMDF开发打印机驱动的问题
    • Tornado
    • 关于Unix驱动的问题
    • 初学者verilog看不懂这些错误
    • 关于宽电压输入的问题输入(45V~30V)输出5V
    • ubuntuusb转串口驱动问题?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有