libusb开发通讯问题

小王子🤴 2020-11-24 23:02:41 8654
libusb开发通讯问题

本篇文章继续记录使用libusb通讯是遇到的问题
问题描述:
使用libusb与一台新的虚拟串口下位机通讯,扫描、打开、关闭都是正常的,就是无法收发数据,也没有报错,这是为什呢,检查了usb驱动,虚拟串口驱动已经被安装成usb驱动,没有问题,我又换一种虚拟串口的设备试一试,没有问题,所以代码是没有错误的,是不是有哪些设置没有设好,这里暂且称两台设备为A(使用libusb无法通讯的虚拟串口设备)、B(使用libusb可以通讯的虚拟串口设备);我又使用串口工具与这两种设备通讯,发现使用串口工具也没法与A设备通讯了,B设备依然是正常的,这时候我就怀疑是不是A设备是坏的,所以就去找A设备开发工程师,问他是不是设备坏了,但是他在他电脑上使用串口工具通讯是正常的,这就奇怪了,这时候我发现我和他使用的串口工具不同,所以我就把他的串口工具拷贝到我的电脑上试一试,发现使用他的串口工具就是好的,这时候我大概找到原因了,我仔细对比两个串口工具发现了不同,一个串口工具设置的DTR、RST,一个没有设置,因此导致串口通讯失败,所以我就查找使用libusb设置DTR、RST的方法,设置DTR、RST后果然通讯正常了。
设置是使用控制传输设置的,设置代码:

int rc = libusb_control_transfer(dHand, 0x21, 0x22, 0x02 | 0x01, 0, nullptr, 0, 10);
        if (rc < 0) {
            fprintf(stderr, "Error during control transfer: %s\n",
                    libusb_error_name(rc));
        }

在设备打开后添加以上代码就可以正常通讯了。
根据以上代码设备是可以正常通讯了,可是使用了一段时间后又出现问题了,真的是一个坑填上又出现一个,永远都是填不完的坑啊。
问题描述:
手动插拔设备时是没有问题的,一切都很正常,但是使用软件关闭设备通讯,再次打开设备是就打开不了,使用debug单步调试发现,问题出现在DTR、RST上面,软件关闭设备通讯后再次打开设备这只DTR、RST时就会阻塞在里面无法退出,就算加了超时也没有。
我在想是不是关闭设备的时候没有禁用DTR、RST才导致这个问题,于是我在关闭前禁用DTR、RST:

int rc = libusb_control_transfer(dHand, 0x21, 0x22, 0x00, 0, nullptr, 0, 10);
        if (rc < 0) {
            fprintf(stderr, "Error during control transfer: %s\n",
                    libusb_error_name(rc));
        }

经验证,禁用DTR、RST还是没用,这是为很么呢,百思不得其解,于是我就去查找各种关于使用libusb设置DTR、RST的资料,最后终于在GitHub让我找到了,是在GitHub中一个js使用libusb的工程中发现了,那里面有使用libusb设置DTR、RST的完整步骤,具体是哪个工程不记得了,研究了下这个工程中的使用步骤发现原来我设置DTR、RST时使用的接口传参传错了,但是我很好奇的是为什么传错参数了还可以正常通讯,一直没想明白(想不明白就先不想了),正确的传参是:libusb_control_transfer第五个参数应该是通讯的接口号。
使能DTR、RST:

int rc = libusb_control_transfer(dHand, 0x21, 0x22, 0x02 | 0x01, interfaceNumber, nullptr, 0, 10);
        if (rc < 0) {
            fprintf(stderr, "Error during control transfer: %s\n",
                    libusb_error_name(rc));
        }
//禁用DTR、RST:
int rc = libusb_control_transfer(dHand, 0x21, 0x22, 0x00, interfaceNumber, nullptr, 0, 10);
        if (rc < 0) {
            fprintf(stderr, "Error during control transfer: %s\n",
                    libusb_error_name(rc));
        }
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 77 16 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
小王子🤴
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区