libusb如何与USB设备通信

时间:2021-02-06 16:11:43
   在网上找了很多例子,都是usb控制传输的,控制传输都是用于枚举的。我现在要与USB设备进行数据交互,应该要确定USB设备地址和端口号吧,但是这些东西在libusb的lib没有找到,谁有libusb做过主机与usb设备进行数据交互的例子,给个呗,分全散。

13 个解决方案

#1


引用 楼主 tnijerry 的回复:
   在网上找了很多例子,都是usb控制传输的,控制传输都是用于枚举的。我现在要与USB设备进行数据交互,应该要确定USB设备地址和端口号吧,但是这些东西在libusb的lib没有找到,谁有libusb做过主机与usb设备进行数据交互的例子,给个呗,分全散。

libusb-1.0中有接口,libusb-win32中没有

#2


我做过,直接调库函数就是了 很简单

#3


引用 2 楼 ccFelix 的回复:
我做过,直接调库函数就是了 很简单


应该是要用到下面3个函数,usb_control_msg倒是可以正常使用,usb_bulk_write和usb_bulk_read搞过好多次,一直都没有成功过

ccFelix给点经验吧,你好像经常搞USB通信啊,上次我的帖子也是你回的

int usb_control_msg(usb_dev_handle *dev, int requesttype, int request, int value, int index, char *bytes, int size,
                        int timeout);

 int usb_bulk_write(usb_dev_handle *dev, int ep, char *bytes, int size,int timeout);
 int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size, int timeout)

#4


USB设备读写和串口设备差不多,只不过先要枚举设备,查找到相应的PID,VID,然后用CreateFile函数创建设备,用文件读写API函数和设备交互

#5


引用 4 楼 chinayu2007 的回复:
USB设备读写和串口设备差不多,只不过先要枚举设备,查找到相应的PID,VID,然后用CreateFile函数创建设备,用文件读写API函数和设备交互


chinayu2007能提供个例子做参考吗?

#6


我也在做相关的项目,各位大神给点提示吧。

#7


引用 3 楼 tnijerry 的回复:


 int usb_bulk_write(usb_dev_handle *dev, int ep, char *bytes, int size,int timeout);
 int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size, int timeout);

这是读写,首先要枚举设备,然后开线程读写数据就OK了

#8


http://www.doc88.com/p-994529924867.html 看下这个文档把

#9


引用 7 楼 ccFelix 的回复:
Quote: 引用 3 楼 tnijerry 的回复:


 int usb_bulk_write(usb_dev_handle *dev, int ep, char *bytes, int size,int timeout);
 int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size, int timeout);

这是读写,首先要枚举设备,然后开线程读写数据就OK了
大侠们,我今天也开始学libusb,郁闷的是我在用这个官方给的例子也编译的时候出错,不知道各位有demo给个么,非常感谢。

#10


哥们,你的问题解决了吗?我现在也有同样的疑问,能指导下吗?

#11


引用 10 楼 whoami7788 的回复:
哥们,你的问题解决了吗?我现在也有同样的疑问,能指导下吗?


搞了几次,USB都接收不到数据,没搞了,哪天心血来潮时再弄下

#12


楼主   搞的怎么样了   我也在使用libusb-1.0.9 在win7 上, 但是发现使用libusb_open  调用的时候  返回-12  
/** Operation not supported or unimplemented on this platform */
LIBUSB_ERROR_NOT_SUPPORTED = -12,

楼主用的是libusb-1 吗      libusb-1.0  在win 平台可以正常使用吗???

#13


struct usb_bus *bus;
struct usb_device *dev;
usb_init(); /* initialize the library */
usb_find_busses(); /* find all busses */
usb_find_devices(); /* find all connected devices */



for (bus =usb_busses; bus; bus = bus->next)
{
   ListBox1->Items->Append( bus->dirname);
for (dev = bus->devices; dev; dev = dev->next)
{
ListBox1->Items->Append("Serial : " + IntToHex(dev->descriptor.idVendor,4));
}
}
结果只枚举到一个设备?什么原因

#1


引用 楼主 tnijerry 的回复:
   在网上找了很多例子,都是usb控制传输的,控制传输都是用于枚举的。我现在要与USB设备进行数据交互,应该要确定USB设备地址和端口号吧,但是这些东西在libusb的lib没有找到,谁有libusb做过主机与usb设备进行数据交互的例子,给个呗,分全散。

libusb-1.0中有接口,libusb-win32中没有

#2


我做过,直接调库函数就是了 很简单

#3


引用 2 楼 ccFelix 的回复:
我做过,直接调库函数就是了 很简单


应该是要用到下面3个函数,usb_control_msg倒是可以正常使用,usb_bulk_write和usb_bulk_read搞过好多次,一直都没有成功过

ccFelix给点经验吧,你好像经常搞USB通信啊,上次我的帖子也是你回的

int usb_control_msg(usb_dev_handle *dev, int requesttype, int request, int value, int index, char *bytes, int size,
                        int timeout);

 int usb_bulk_write(usb_dev_handle *dev, int ep, char *bytes, int size,int timeout);
 int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size, int timeout)

#4


USB设备读写和串口设备差不多,只不过先要枚举设备,查找到相应的PID,VID,然后用CreateFile函数创建设备,用文件读写API函数和设备交互

#5


引用 4 楼 chinayu2007 的回复:
USB设备读写和串口设备差不多,只不过先要枚举设备,查找到相应的PID,VID,然后用CreateFile函数创建设备,用文件读写API函数和设备交互


chinayu2007能提供个例子做参考吗?

#6


我也在做相关的项目,各位大神给点提示吧。

#7


引用 3 楼 tnijerry 的回复:


 int usb_bulk_write(usb_dev_handle *dev, int ep, char *bytes, int size,int timeout);
 int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size, int timeout);

这是读写,首先要枚举设备,然后开线程读写数据就OK了

#8


http://www.doc88.com/p-994529924867.html 看下这个文档把

#9


引用 7 楼 ccFelix 的回复:
Quote: 引用 3 楼 tnijerry 的回复:


 int usb_bulk_write(usb_dev_handle *dev, int ep, char *bytes, int size,int timeout);
 int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size, int timeout);

这是读写,首先要枚举设备,然后开线程读写数据就OK了
大侠们,我今天也开始学libusb,郁闷的是我在用这个官方给的例子也编译的时候出错,不知道各位有demo给个么,非常感谢。

#10


哥们,你的问题解决了吗?我现在也有同样的疑问,能指导下吗?

#11


引用 10 楼 whoami7788 的回复:
哥们,你的问题解决了吗?我现在也有同样的疑问,能指导下吗?


搞了几次,USB都接收不到数据,没搞了,哪天心血来潮时再弄下

#12


楼主   搞的怎么样了   我也在使用libusb-1.0.9 在win7 上, 但是发现使用libusb_open  调用的时候  返回-12  
/** Operation not supported or unimplemented on this platform */
LIBUSB_ERROR_NOT_SUPPORTED = -12,

楼主用的是libusb-1 吗      libusb-1.0  在win 平台可以正常使用吗???

#13


struct usb_bus *bus;
struct usb_device *dev;
usb_init(); /* initialize the library */
usb_find_busses(); /* find all busses */
usb_find_devices(); /* find all connected devices */



for (bus =usb_busses; bus; bus = bus->next)
{
   ListBox1->Items->Append( bus->dirname);
for (dev = bus->devices; dev; dev = dev->next)
{
ListBox1->Items->Append("Serial : " + IntToHex(dev->descriptor.idVendor,4));
}
}
结果只枚举到一个设备?什么原因