我是靠谱客的博主 义气金毛,最近开发中收集的这篇文章主要介绍Ubuntu下调试USB通信,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

环境:Ubuntu 16,libusb1.0.22

测试对象:U盘

程序源代码:

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>

#include "libusb.h"

static struct libusb_device_handle *devh = NULL;
static unsigned char imgbuf[4] = {'a','b','c','d'};
unsigned char imgbuf_rx[4]={'e','e','e','e'};

static int find_print_device(void)
{
    devh = libusb_open_device_with_vid_pid(NULL,0xffff,0x1201);//luo ji webcam id;(NULL,0x046d,0x0825);//
    fprintf(stderr, "open_devh %dn", devh?0:EIO);
    return devh ? 0 : -EIO;
}

int main(void)
{
    int r;
    int count = 0;
    int count_rx = 0;
    r = libusb_init(NULL);
    if (r < 0) {
        fprintf(stderr, "failed to initialise libusbn");
        exit(1);
    }

    r = find_print_device();
    if (r < 0) {
        fprintf(stderr, "Could not find/open devicen");
        goto out;
    }

    r = libusb_claim_interface(devh, 0);
    {
     if(r<0)
      {
        r = libusb_detach_kernel_driver(devh,0);

        if (r < 0)
        {
            fprintf(stderr, "libusb_detach_kernel_deriver failed! %dn", r);
            goto out;
        }
        r = libusb_claim_interface(devh, 0);

        if (r < 0) {
            fprintf(stderr, "usb_claim_interface error %dn", r);
            goto out;
        }
          }
    }

    printf("claimed interface successed!n");


    r = libusb_bulk_transfer(devh,0x01,imgbuf,sizeof(imgbuf),&count,0);
    
    if (r < 0)
    {
        fprintf(stderr, "Could not bulk transfer!n");
        goto out0;
    }
    else
    {
        fprintf(stderr, "bulk transfer successed!,count = %dn",count);
    }

    for(int i = 0;i<4;i++)
    {
        fprintf(stderr, "imgbuf is  %cn", imgbuf[i]);
    }

    r = libusb_bulk_transfer(devh,0x82,imgbuf_rx,sizeof(imgbuf_rx),&count_rx,2);  //test usb read in and printf the test result 20200907
    
    if (r < 0)
    {
        fprintf(stderr, "Could not bulk transfer_rx! %dn",r);
        goto out0;
    }
    else
    {
        fprintf(stderr, "bulk transfer_rx successed!,count_rx = %dn",count_rx);
    }

    for(int i = 0;i<4;i++)
    {
        fprintf(stderr, "imgbuf_rx is  %cn", imgbuf_rx[i]);
    }

out0:
    libusb_release_interface(devh, 0);
    libusb_detach_kernel_driver(devh,0);
out:
    libusb_close(devh);
    libusb_exit(NULL);
    return r >= 0 ? r : -r;
}

测试结果:

1、成功将数据写入U盘。

2、再将数据读出失败,返回值 -9.

疑问是不是U盘坏掉了?明明端点都是正确的。

发现U盘虽然有端点(如0x81)显示bulk类型支持,实际操作时返回 -9的原因时不支持这种类型的数据传输。于是暂停测试,有机会再更新。

最后

以上就是义气金毛为你收集整理的Ubuntu下调试USB通信的全部内容,希望文章能够帮你解决Ubuntu下调试USB通信所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部