首页专栏详情
打赏
libusb开发通讯问题
易百纳技术社区 小王子🤴 2020-11-24 23:02:41

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));
        }
7201
16
77
打赏
共1人已赏
评论
0个
内容存在敏感词
相关专栏
打赏作者
易百纳技术社区
小王子🤴
您的支持将鼓励我继续创作!
打赏金额:
¥1 易百纳技术社区
¥5 易百纳技术社区
¥10 易百纳技术社区
¥50 易百纳技术社区
¥100 易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区 微信支付
易百纳技术社区
打赏成功!

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

审核成功

发布时间设置
发布时间:

审核失败

失败原因
备注
Loading...
易百纳技术社区
确定要删除此文章、专栏、评论吗?
确定
取消
易百纳技术社区
易百纳技术社区
在专栏模块发布专栏,可获得其他E友的打赏
易百纳技术社区
回答悬赏问答,被题主采纳后即可获得悬赏金
易百纳技术社区
在上传资料时,有价值的资料可设置为付费资源
易百纳技术社区
达到一定金额,收益即可提现~
收益也可用来充值ebc,下载资料、兑换礼品更容易
易百纳技术社区
活动规则
  • 1.周任务为周期性任务,每周周一00:00刷新,上周完成的任务不会累计到本周,本周需要从头开始任务,当前任务完成后才可以完成下一个任务
  • 2.发布的专栏与资料需要与平台的板块有相关性,禁止注水,专栏/资料任务以审核通过的篇数为准
  • 3.任务完成后,现金奖励直接打款到微信账户;EBC/收益将自动发放到个人账户,可前往“我的钱包”查看;其他奖励请联系客服兑换
  • 4.每周最后三个任务将会有以下奖品掉落:社区热卖开发板、小米音响、视频年度会员、京东卡、华为手机等等
易百纳技术社区
升级提醒
易百纳技术社区

恭喜您由入门

社区送出礼品一份

请填写您的收件地址,礼品将在3个工作日寄出

易百纳技术社区