arm+linux下usb驱动开发,移植Libusb以及开发应用调试过程

2019-07-13 00:10发布

[SETUP]  2D 00 10
[OUT]    E1 01 E8
/home/wangxj/tool_tar/libusb-1.0.20
或者
/home/wangxj/tool_tar/libusb-1.0.9
都可以


移植libusb 
make
make install
拷贝到/usr/local/libusb_arm/lib


参考
https://code.csdn.net/snippets/470559
arm-linux-g++ usbtrans.c -o usbtrans `PKG_CONFIG_PATH=/usr/local/libusb_arm/lib/pkgconfig/ pkg-config --cflags --libs libusb-1.0`


修改dev_handle = libusb_open_device_with_vid_pid(ctx, 0xc1ca, 0x005); //vid pid
编译usbtrans
将libusb-1.0.so  libusb-1.0.so.0  libusb-1.0.so.0.1.0 拷贝到/usr/lib


运行
[root@me bin]# ./usbtrans
Device Opened
Claimed Interface
Released Interface
[root@me bin]#




libusb_control_transfer(dev_handle, 0x80, LIBUSB_REQUEST_GET_DESCRIPTOR, 0x0100, 0, open_data, 0x0040, 5000)
返回-9  /** Pipe error */
LIBUSB_ERROR_PIPE = -9,


但是高清摄像头,就可以到读到数据


调用libusb_reset_device(dev_handle);可以读到设备描述符


//设备描述符,18个字段
12        01                0101   02             00               00              08                cac1      0500       0000        00           00       
bLength  bDecriptorType    bcdUSB  bDeviceClass  bDeviceSubClass  bDevicePortocol  bMaxPacketSize0  idVendor  idProduct  bcdDevice   iManufacturer iProduct 
          01:设备描述符            02:通信类


00              01 
iSerialNumber   bNumConfigurations
                可能的配置描述符数目


//配置描述符, 9个字段
09      02                 4300                   02                  01                   04                  40            00     
      bDescriptorType    wTotalLength       bNumInterfaces bCongfigurationValue     iConfiguration    bmAttributes  MaxPower
                                               两个接口                                                       自给电源      总线电源消耗


//接口描述符-0
09      04      00                 00              01              02               02                     01                05   
  
   bInterfaceNumber  bAlternateSetting bNumEndpoints   bInterfaceClass   bInterfaceSubClass  bInterfaceProtocol  iInterface
              接口号                             端点数量         CDC控制类                                              描述此接口的字串描述表的索引值。
 
以下数据不懂
//05      24      00      10      01      
 
//05      24      01      00      01     

//04      24      02      00     

//05      24      06      00      01   


//端点描述符---端点1

//07      05      81           03          2000              02      


                设备到主机     中断传输     端点最大数据包    时间间隙
                 端点1


//接口描述符-1
//09      04      01          00                 02              0a                00                  00                  06 
   
   bInterfaceNumber  bAlternateSetting bNumEndpoints   bInterfaceClass   bInterfaceSubClass  bInterfaceProtocol  iInterface
            接口号                             端点数量         CDC控制类                                              描述此接口的字串描述表的索引值。


//端点描述符---端点2
//07      05      82        02          2000               00      

设备到主机  批量传输    端点最大数据包
端点2  
 
//端点描述符---端点3
//07      05      03         02         2000               00      00      00
       主机到设备  批量传输    端点最大数据包
                  端点3




从以上信息可以知道:
   批量输出端点: 0x03
   批量输入端点: 0x82


通过libusb_bulk_transfer(dev_handle,0x03,dataout,18,&size,100); 发送数据
通过libusb_bulk_transfer(dev_handle,0x82,datain,sizeof(datain),&size,200);接收数据


:)) 终于走通








2016.05.19
改写usbtrans 直接调用upslibso
发现,如果用comtest先测试一下usb口的收发,然后再用usbtrans测试,就可以收到数据,但是接收数据需要等待1000ms,
而且接收数据不稳定。