最近流行测试平台开发,当然 USB 问题是少不了的话题,论坛最近都在讨论 USB 断线问题,我也曾经为此烦恼过一阵时间,但现在已经有比较稳定的解决方案。

首先,我们先来了解一下 USB 线。把一条 USB 线剪了,我们会看到里面只有 4 根线,这 4 根线两线做传输数据(RX,TX),另外两条做的就是供电(+,-)。USB 供电一般为 5 伏/1.5A,现在手机充电器为了提高充电效率把功率加大,因此一般的充电器都标注 5V/2.5A。
另外,USB2.0 的理论传输速度为 60MB/s,USB3.0 的则是 625MB/s。

了解了这些以后,聊聊 USB 遇到的一些问题吧。
1、手机 usb 连接啥都没有做每天都会不定时的断开...
2、批量安装应用的时候也会断开...
3、多台设备查看日志的时候一堆断开。
................................(欢迎补充)
usb 各种花式断线,各种报警,各种维护。

我曾经做过 usb 无线 wifi 方案,深刻了解到的 usb-hub 供电不靠谱,电压会各种被拉低,当电压低于 4.85V 时 USB 协议会呈现出各种奇怪的问题,完全无法解释。因此 USB-HUB 一定要外置供电!!!
另外 STF 开发者真的是个牛 B 的一群人,他们的经验很丰富,而且在官网上面写个很清楚。好多二次开发者都不往下看的,他们已经提供了解决思路,然后我发现我之前对于 USB 的瞎 BB 在牛人面前都是扯蛋,他们开发 STF 同样也遇到了这些问题,他们应该做过大量的测试,也有了相应解决方法,所以才选择 ubuntu 上面运行 STF 平台!
https://github.com/openstf/stf#troubleshooting


看不懂英文的同鞋,自行 google 翻译。算了我还是翻译一张图片吧。

上面问题描述已经很详细了吧,我也就不多解释了。

下面我讲一下在二次开发中遇到的一些问题及解决方案吧。
1、USB-HUB 选型
我一开始选择的是 USB3.0 的 HUB 叫阿卡西斯这一款,后来接入手机设备多了以后发现真的很不稳定。看了 STF 官网上面的说 ADB 在 USB2.0 运行会比较稳定,于是我再次选型 USB-HUB 后决定买 ORICO 这个牌子的,型号好像叫 P10-U2 吧,10 口 USB-HUB,价格 148 大元,只有 USB2.0 的传输协议。
2、USB 外置供电问题
ORICO 的 USB-HUB 使用的是 12V 转 5V 的供电,电流为 2.5A。但 USB-HUB 10 口满负荷,的运行过一段时间,发现某台一起连接的手机还是存在随机掉线的情况,于是我一个一个减少 USB 连接数,10 个/9 个/8 个...直接到 6 个,已经相对稳定了。但我还是怀疑一个 USB-HUB 接上多台手机只有 2.5A,功率是否足够?于是我就拜托公司的硬件工程师定制一个独立供电模块,他找了一个超大功率的直流电源 DIY,做了一个很漂亮的一个电源。目前供电非常稳定,专业的事情还是得找专业的人来做。

PS:现在硬件上的问题基本上已经解决了。

3、软件层面上的问题。
批量安装应用会掉线的问题,当时批量指的是 30 台手机同时安装应用。上面我说过 USB2.0 传输速度只有 60MB/s,是吧。因此批量安装一个 20MB 的 APK 包,20MB X N 台手机,这个流量相当的大,肯定超过 USB 理论传输速度,然后 USB 就会断开,断开!!!于是在开发代码上做了队列安装,一台一台安装。于是这个问题也解决了。

4、还未解决的一些手机
GOOGLE nexus:接上电源会一直掉电,直到电池没电....找问题找了很久,我司硬件工程师的分析可能是因为 nexus 电源模块损坏了导致被其它手机当成电源拉电。因此这台手机接一个 USB-HUB 很奢侈....
华为 V9:这个手机我也纳闷,在指定的 USB-HUB 上面就一定会断开连接,换到别的 USB-HUB 上就不会....问题没找到,一直很烦恼这台手机,感觉就是我不想跟这些破手机在一起,我是高大上的 V9.😅


↙↙↙阅读原文可查看相关链接,并与作者交流