如何将“百年纪念” USB集线器变成智能托管并节省300美元

不知何故,我需要一个集线器很长时间,最好有大量的端口并且形状相当方便,适合于在3.5英寸托架中代替软盘驱动器嵌入。 快速浏览跳蚤市场时,您会发现D-link DUB-H7型号,甚至是“ 1价格2”组合。 外部检查没有什么特别的,集线器做为集线器,主打“打印机” USB AM-BM位于背面,电源为3A。 与往常一样,我整理出的第一件事是对少量的空地方而不是元素感到满意,再加上高质量的焊接和镇定。 没错,以防万一,我去了互联网,看看它是什么样的中心,是否有参与的有趣项目。 没有项目,用户评论通常为50/50,没有动态。 该集线器在5到7年的时间内运行良好并完成了任务,然后平稳地移动到电子垃圾箱中,很可能会与未知的适配器,适配器等一起消失。但是我生命中发生了一件事情让我在装满旧垃圾的袋子里四处逛逛,结果发现这是一个独特的D型链环,然后甩掉灰尘,将其提取成上帝的光芒。 如果您有兴趣了解原因,欢迎减少。


眨眼

介绍或哭泣贪婪的USB集线器制造商


随着小型,便捷的SoC路由器的问世(例如有关“调节”流行的中国微型路由器Hame A15(也称其为“ A5-V11”商标)的教程),并且广泛引入了openwrt来管理主机设备(绝大多数)的情况下,这些是通过USB连接的设备),控制各种调制解调器,读卡器,usb-rs232转换器等的电源就变得非常紧迫,与GSM-mo一起工作时需要控制端口 EMAMI(重新启动,例如)。 原则上,人民已经做出了足够的决定 。 为此,从在路由器中使用免费的GPIO引脚到现成的继电器。 有来自第三方制造商的解决方案。 例如,这是一个用于Acroname的 4个端口的可编程USB集线器,它具有丰富的软件和硬件,但售价约为300美元。


图片

有一个更便宜的选择,一个名为Yupkit YKUSH的智能可切换集线器,仅售35€:


图片

最经济的可以使用一堆最便宜的USB集线器,常闭5V继电器以及任何Arduino-k来断开USB端口的电源(如有必要)。 这种解决方案的成本不到10美元,这不包括焊接和编程Arduino所花费的时间。


这似乎是一个死胡同。 要么昂贵而美丽,要么只是朴实而卑鄙 。 但是事实证明,还有第三种选择。 此外,该解决方案已经过时,因为其中描述了集线器的USB 2.0规范


USB电源管理规范摘录

自供电的集线器可能具有电源开关,用于控制面向下游端口的电源传输,但这不是必需的。 总线供电的集线器必须具有电源开关。 具有电源开关的集线器可以将电源作为一个组/成组切换到所有端口,也可以分别切换到每个端口,或者具有一个或多个端口的任意数量的成组切换。 集线器通过wHubCharacteristics中的“逻辑电源切换模式”字段的设置指示它是否支持电源切换。 如果集线器支持每个端口的电源切换,则在收到端口的SetPortFeature(PORT_POWER)请求时,将打开端口的电源。 当端口处于“已关闭电源”或“未配置”状态时,将关闭端口电源。 如果集线器支持组合电源开关,则当组合中的任何端口接收到SetPortFeature(PORT_POWER)请求时,将打开组合中所有端口的电源。 除非组中的所有端口都处于“已关闭电源”或“未配置”状态,否则不会关闭组的电源。
...
尽管不需要自供电集线器来实现电源切换,但集线器必须支持所有端口的“ Powered-off”状态。 此外,即使集线器没有可通过USB系统软件控制的电源开关,集线器也必须实现PortPwrCtrlMask(所有位均设置为1B)。


译成俄语,事实证明USB标准已经定义了使用所谓的“控制端口电源”的功能。 每端口电源交换(PPPS) ,但要满足支持此功能的设备的要求不仅困难,而且非常困难。 要实现PPPS功能,需要其他组件(场效应晶体管和布线),这些组件没有安装在集线器中以节省成本。


一些制造商对市场需求敏感地做出了反应,在轮毂的规格中指出了PPPS功能,但实际上这并不超出包装盒上的铭文。 基本上,很难找到故障,因为集线器内部的许多芯片都支持此功能,但是如果没有其他开关(晶体管)(大多数USB端口直接连接到+ 5V线路)就无法实现。


我什至专门拆卸了几个打算与A5-V11路由器一起使用的小型USB集线器。 里面有GL850G芯片和深受中国FE1.1s喜爱的芯片。 自然地,只在内部发现了最少细节的控制器本身。 由于电路板的尺寸很小,即使采用铰链安装,也很难放置晶体管及其连接的零件。 我不得不冷静下来。 尽管取决于芯片,但如果在数据手册中提到过电流检测和单独或联合电源控制 ,则可以通过本文中描述的方法对此类设备进行智能操作。 一个朋友使用晶体管和一堆电阻器的组合来在其集线器中启用PPPS功能。


设备的更改方案和外观
图片
图片

另外,在阅读文档时,您会发现不存在,不存在,并且提到可以通过在电路中添加一些AIC1526-0或MIC2026(双通道配电开关)来实现端口控制模式。


数据表中的方案不会撒谎


部分主要还是要切入点


关于购买功能不明的中国集线器(“戳中的猪”)的忧郁想法以及无法进行初步检查的想法使我不知所措,我无意间碰到了一篇有关设置openwrt来控制USB集线器功能的文章,而且,该文章同样被废弃了,灰色情况下忘记了D-Link DUB-H7



在研究了材料之后,很明显,在集线器上,除了相当先进的飞利浦ISP1521BE控制器外,还有一大堆相同的双通道配电开关 AIC1528-0用于全功率开关。 尽管根据数据表判断,但具有最小主体套件的芯片本身可以控制下游端口的功率(并且那里还没有实现很多功能,例如,使用GoodLink技术指示上游端口活动,或者USB 1.1主机正确支持2.0和1.1的混合使用)下游端口等)。


顺便说一句,对于那些决定重复我走过的路的人,我必须立即说,D-Link DUB-H7的现代版本(在光滑的黑色情况下)不再像旧的灰色版本那样有用。



根据wikidevi.com( 1,2,3,4 )的信息,此集线器有多个版本,板载了一组不同的组件,因此具有不同的功能(A1 / A5-ISP1521BE 7端口,B1-2xGL854G 4端口, C1-2xGL850Z 4端口)。


还请注意D-Link DUB-H7,因为它具有良好的功能,它也是我们地区最实惠的选择(无论是价格还是流行程度)。 在“每端口电源切换”过程中可能提到的模型中,我们还可以另外注意以下内容:


  • Linksys USB2HUB4 USB 2.0集线器。
  • D-Link DFB-H7组合式集线器
  • Elecom U2H-G4S
  • 三和供应USB-HUB14GPH
  • Targus Inc. PAUH212
  • 霍金技术UH214

我没有机会寻找上述设备,因为我曾经很幸运A5版本的版本。 事实是,现在,如果我必须购买这样的集线器,我会尝试找到B1版本,因为除了控制端口的功能之外,构建该集线器的芯片(GL854G)内还包含有Multi Transaction Translator这样的东西。



USB集线器中具有多事务翻译器(MTT)的重要性


为了说明这个多事务翻译器(MTT)是什么以及为什么它如此重要和必要,我们做了一个小小的题外话。 事务发送器(TT)是任何高速集线器的重要组件,可在集线器的上游和下游端口之间提供通信,尤其是当这些端口以不同的数据速率运行时。 实际上,TT将低速和中速设备与高速设备(例如,纯USB 2.0)分开,并负责以USB 1.1的速度工作。


操作发送器可以有两种类型-单个(英语,单事务翻译器,STT)或多个(英语,多事务翻译器,MTT)。 在STT的情况下,所有端口都使用一个发送器,在MTT的情况下,每个端口都有其自己的发送器。 显然,第一个选项更便宜,更简单,该选项的主要缺点来自哪里-如果将多个USB 1.1端口连接到集线器,它们将全部通过一个瓶颈工作。 我想您可以想象交换速度会发生什么。



简而言之,STT集线器对可同时使用的设备数量有所限制。 否则,由于数据传输计划中的冲突,集线器超载(尤其是在主动交换数据的设备(例如声卡)的情况下),它会充满数据包丢失。 因此,最好选择集线器以立即关注具有MTT的设备,而不是稍后查找工作不稳定的原因。 如果您已经有一个集线器,但不幸的是事实证明它是与STT一起使用的,则只需仔细检查连接到该集线器的设备的标准,并在可能的情况下减少连接到一个集线器的USB 1.1的数量。


不幸的是,绝大多数基于廉价芯片的低成本集线器(我的A5集线器的fe1.1s,GL850G和ISP1521BE)都带有STT,价格更高且更先进(GL852G,GL854G(D-link DUB-H7的B1修订版正在讨论中), GL3520,VL812,VL813,SMSC USB2514)正在运行MTT。


您可以通过阅读芯片上的数据表(但中国人常常不能或不想告诉芯片的品牌)来检查操作变送器的类型,或者通过将集线器连接到* nix计算机并执行lsusb -v命令并查找与正在研究的集线器相关的一条服务信息(通过名称)。 DeviceProtocol行将指示Single TTMulti TT 。 很明显,只有使用Multi才能更好地购买:)


lsusb团队发布的中心特征描述

总线001设备005:ID 2001:f103 D-Link Corp. DUB-H7 7端口USB 2.0集线器
无法打开设备,某些信息将丢失
设备描述符:
b长度18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 9集线器
bDeviceSubClass 0未使用
bDeviceProtocol 1单TT
bMaxPacketSize0 64
idVendor 0x2001 D-Link Corp.
idProduct 0xf103 DUB-H7 7端口USB 2.0集线器
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
配置描述符:
b长度9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
自供电
远程唤醒
最大功率0mA
接口描述符:
b长度9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9集线器
bInterfaceSubClass 0未使用
bInterfaceProtocol 0全速(或根)集线器
iInterface 0
端点描述符:
b长度7
bDescriptorType 5
bEndpointAddress 0x81 EP 1输入
bmAttributes 3
传输类型中断
同步类型无
使用类型数据
wMaxPacketSize 0x0001 1x 1字节
b间隔12


运行lsusb -v -t命令时,您可以看到连接的USB设备的漂亮层次结构。



代替lsusb,可以将hwinfo实用程序与--usb开关一起使用 (建议通过sudo apt-get install hwinfo进行预安装 )。 然后,有关USB设备的信息输出将看起来有些不同:


hwinfo发布的信息

实验室@实验室G:〜$ hwinfo --usb
23:USB 00.0:10a00集线器
[在usb.122创建]
唯一ID:zFuK.sOcBcpBDhs4
父编号:k4bc.9T1GDCLyFd9
SysFS ID:/devices/pci0000:00/0000:00:1d.7/usb1/1-8/1-8:1.0
SysFS总线ID:1-8:1.0
硬件类别:集线器
型号:“ D-Link DUB-H7 7端口USB 2.0集线器”
热插拔:USB
供应商:usb 0x2001“ D-Link”
设备:usb 0xf103“ DUB-H7 7端口USB 2.0集线器”
修订:“ 1.00”
司机:“枢纽”
驱动程序模块:“ usbcore”
速度:480 Mbps
模块别名:“ usb:v2001pF103d0100dc09dsc00dp01ic09isc00ip00in00”
配置状态:cfg =新建,可用性=是,需要=否,有效=未知
附加至:#21(枢纽)


总的来说,我们简要地了解了低速设备的功能,现在是时候进行软件部分了。


管理USB端口电源


我将马上说,我找不到在Windows环境中实现PPPS功能的方法(至少出于闲置的目的)。 最大值是使用devcon实用程序启用/禁用设备。 如果其中一位读者予以纠正和补充,我将感到高兴。 同时,所有过程都以Ubuntu为例(在openwrt的情况下-算法相似,尽管在最后一个主干中它应该已经包含在“发行版”中)。


因此,使用集线器 -ctrl程序或其后代uhubctrl具有对此功能的硬件支持的集线器实现了每端口电源切换(PPPS)或“端口电源切换”的可能性 。 我将依次考虑它们。


集线器


该程序是由日本独立战斗机工程师Niibe Yutaka于2006年编写的。 但是现在它可以正常工作了。 对于安装,我们需要任何* nix和libusb-dev库。 对于Ubuntu 16.04 LTS,算法如下:


 安装添加。 软件包:sudo apt-get update && sudo apt-get install libusb-dev git gcc
下载源:git clone https://github.com/codazoda/hub-ctrl.c
与gcc一起编译:cd hub-ctrl.c && gcc -o hub-ctrl hub-ctrl.c -lusb 

如果地址不可用,则可以从此处从此处手动下载源并使用上述命令进行编译。


该程序具有相当简单的命令行语法,适合以下描述:


./ hub-ctrl [{-h HUBNUM | -b BUSNUM -d DEVNUM}] \ [-P PORT] [{-p [VALUE] | -l [VALUE]}
其中HUBNUM-集线器号,BUSNUM总线号,DEVNUM设备号,PORT端口号


为了找出这些参数,只需运行lsusb命令:



顺便说一句,集线器-ctrl程序可以充当USB集线器的“探针”,因为它具有管理端口电源的能力。 使用-v开关运行它就足够了。 我们获得系统中可用的受支持集线器的列表(INFO行)和端口状态(在我的情况下,所有端口均已关闭)。


lab @ lab-G:〜/ hub $ sudo ./hub-ctrl -v
集线器#0在001:006
INFO:单独电源开关。
警告:不支持端口指示灯。
集线器端口状态:
端口1:0000.0000
端口2:0000.0000
端口3:0000.0000
端口4:0000.0000
端口5:0000.0000
端口6:0000.0000
端口7:0000.0000

这是打开所有端口时的配置外观:


lab @ lab-G:〜/ hub $ sudo ./hub-ctrl -v
集线器#0在001:006
INFO:单独电源开关。
警告:不支持端口指示灯。
集线器端口状态:
端口1:0000.0100电源
端口2:0000.0100电源
端口3:0000.0100电源
端口4:0000.0100电源
端口5:0000.0100电源
端口6:0000.0100电源
端口7:0000.0100电源

要启用其中一个端口,您需要运行sudo命令./hub-ctrl -h 0 -P 1 -p 1 ,其中-h指示我们使用的是哪个集线器(本例中为第0个),-P表示哪个端口(1-第一个端口),-p指示状态(0-off,1-on)。



要获得上图所示的配置,必须依次执行以下命令(对于最初禁用的端口):


须藤./hub-ctrl -h 0 -P 2 -p 1
须藤./hub-ctrl -h 0 -P 4 -p 1
须藤./hub-ctrl -h 0 -P 6 -p 1


因此,编写脚本以使LED以期望的顺序闪烁有趣并不困难。 这样的例子已经存在并且可以成功运行:
USB集线器, 圣诞节花环等上的摩尔斯电码 等 对我而言,从hub-ctrl的功能来看,循环切换功能不足以实现我的瞬时照明幻想(以免浪费时间编写脚本等)。 在后继者uhubctl中消除了此烦人的缺陷。


联合大学


uhubctl程序是优化的hub-ctrl模拟程序,具有一些外观差异(当然,它支持更多设备)。


使用uhubctl工作:

从理论上讲,该实用程序可以编译为在Windows环境中运行,但是...但是,到目前为止,它是通过winusb.sys驱动程序与实用程序进行交互的,该驱动程序无法直接访问集线器。 该程序还声称支持USB 3.0(顺便说一句,支持Per-Port电源切换的USB 3.0集线器比具有类似功能的USB 2.0集线器要多得多)。 当使用连接到USB 3.0上游端口的USB 3.0集线器时,程序将其定义为两个独立的虚拟集线器:USB 2.0和USB 3.0,并且USB设备本身将根据其功能和连接速度连接到其中一个。 。 因此,要管理此类设备,该程序默认情况下启用/禁用虚拟集线器的电源(您可以通过在启动命令中添加-e开关将实用程序切换为手动模式)。


重要说明: USB端口寻址系统可能会造成一些混乱(对于hub-ctrl和uhubctl来说是相似的)。 在工作时,它使用与Linux内核中相同的寻址方法:bx.yz,其中b是USB总线号,而x,y,z是主机链的端口号,从此总线的根USB集线器开始。 如果有多个受管USB集线器,则可以通过使用-l(位置)选项运行uhubctl来确定正确的选项。 我注意到该寻址是半稳定的-如果断开USB设备并将其重新连接回同一物理端口,则该寻址将不会改变。


该程序的编译算法类似于hub-ctrl的算法。 唯一的例外是,您需要使用常用的sudo apt-get install libusb-1.0-0-dev命令安装libusb-1.0库(1.0.12版或更高版本),然后使用make命令编译二进制文件。


启动程序的语法如下。


uhubctl -a off -p 2


此命令关闭端口2(-p 2)的电源(-a关闭或-a 0)。 支持关闭/打开/循环(或0/1/2)命令。 循环开关关闭电源,等待一会儿(由-d开关确定),然后重新打开。 即 现在,集线器可以轻松更换微控制器以进行闪烁。


从这一切得出的结论是什么


因此,D-Link的旧集线器中的“秘密”就在那里。 如果您需要远程控制连接到USB总线的一系列设备,则使用所述技术(PPPS)是合理的。 此外,此方法已用于禁用硬盘驱动器网络摄像头GSM调制解调器 (例如图片中):


图片

尽管,对于我提到的调制解调器和D-link DUB-H7,有些对这种捆绑包的可操作性表示怀疑(使用hub-ctrl程序时)。


原因是...

“ ...使用Dlink DUB H-7进行的实验表明,hub-ctrl -p 0仅将电压降低至1.47V。但是,将调制解调器插入这样的“禁用端口”后,LED不会闪烁,但是文件/ dev / ttyUSBx . . ."


当选择下一个USB集线器时,本文中描述的实用程序(lsusb,hwinfo,hub-ctrl)可能是一个很好的帮助,尤其是在您无权查看内部设备的情况下。关于habr用户,已经描述了理想的USB集线器的想法和期望(此处此处)。我认为,所描述的用于检查现有集线器的算法将完美地补充和淡化作者描述的方法。因此,此后,从电路解决方案的角度来看,我认为本文的英雄(D-link DUB-H7版本A5)看起来非常好。也许,我在向SIM卡鞠躬:)



PS为向Habr社区成员提出问题,他们突然之间偶然地躺在与我的D-link DUB-H7一样的灰色箱子里。



( - )? RP1...RP2 ( 0- c).


: - EEPROM 24C02, :



! 现在可以在我的电报频道lab66中看到所有更新和临时注释,然后可以轻松地形成habr文章。 订阅以免期望下一篇文章,而立即了解所有研究信息:)


Source: https://habr.com/ru/post/zh-CN430220/


All Articles