Как превратить «столетний» usb-хаб в «умный» управляемый и сэкономить при этом 300$

    Как-то давно понадобился мне хаб, желательно с большим количеством портов и c достаточно удобной формой, пригодной для встраивания вместо флоппи-дисковода в отсек 3,5''. Беглый просмотр барахолки подкинул модель D-link DUB-H7, да еще и в комбинации «2 по цене 1». Внешний осмотр ничего особенного не дал, хаб как хаб, сделан добротно, капитальный «принтерный» USB AM-BM на оборотной стороне и 3 А блок питания. Как всегда первым делом разобрал, порадовался малому количеству пустых мест вместо элементов вкупе с качественной пайкой и успокоился. Правда на всякий случай зашел в интернет посмотреть, а что это за хаб и есть ли интересные проекты с его участием. Проектов не оказалось, отзывы пользователей 50/50, в общем, никакой динамики. Хаб на протяжении 5-7 лет довольно сносно работал и выполнял свою задачу, потом плавно переместился в коробку для электронного хлама и вполне возможно сгинул бы в итоге вместе с безызвестными переходниками, адаптерами и т. п. Но произошло у меня в жизни событие, которое заставило-таки меня покопаться в мешках со старым барахлом, найти этот, как оказалось уникальный D-link, и стряхнув пыль извлечь его на божий свет. Если интересно послушать зачем — добро пожаловать под cut.


    миг-миг-миг

    Intro или Плач о жадных производителях usb-хабов


    С появлением маленьких удобных SoC роутеров (вроде любовно описанного мной в статье Руководство по доведению «до кондиции» клона популярного китайского мини-роутера Hame A15, он же «unbranded A5-V11» ) и повсеместного внедрения openwrt для управления сонмами устройств (в абсолютном большинстве случаев, это устройства подключаемые по USB) очень актуальной задачей становится задача управления электропитанием всевозможных модемов, картридеров, usb-rs232 преобразователей и т. д. и т. п. Найболее часто встречается необходимость управления портом при работе с GSM-модемами (для перезагрузки, например). В принципе, народ наработал уже достаточное количество решений. Для этих целей, начиная от использования свободных GPIO выводов в роутере, и заканчивая готовыми реле. Существуют решения и от сторонних производителей. Это например программируемый USB хаб на 4 порта от Acroname, который и в корпусе приятном и программным обеспечением богат, но стоит около 300$.


    image

    Есть вариант подешевле, умный переключаемый хаб с приятным названием Yupkit YKUSH всего лишь за 35€:


    image

    Самые же экономные могут использовать связку из самого дешевого usb хаба, нормально закрытого 5V реле, и любой из Arduino-к для отключения питания от usb порта в случае необходимости. Стоимость такого решения < 10$, без учета временных затрат на пайку и программирование Arduino.


    Казалось бы тупик. Либо дорого и красиво, либо просто и на соплях неказисто. Но оказалось существует третий вариант. Притом решение старо, как сама спецификация USB 2.0 для хабов в которой оно описано.


    Выдержки из спецификации, касающиеся управления питания USB

    Self-powered hubs may have power switches that control delivery of power downstream facing ports but it is not required. Bus-powered hubs are required to have power switches. A hub with power switches can switch power to all ports as a group/gang, to each port individually, or have an arbitrary number of gangs of one or more ports. A hub indicates whether or not it supports power switching by the setting of the Logical Power Switching Mode field in wHubCharacteristics. If a hub supports per-port power switching, then the power to a port is turned on when a SetPortFeature(PORT_POWER) request is received for the port. Port power is turned off when the port is in the Powered-off or Not Configured states. If a hub supports ganged power switching, then the power to all ports in a gang is turned on when any port in a gang receives a SetPortFeature(PORT_POWER) request. The power to a gang is not turned off unless all ports in a gang are in the Powered-off or Not Configured states.

    Although a self-powered hub is not required to implement power switching, the hub must support the Powered-off state for all ports. Additionally, the hub must implement the PortPwrCtrlMask (all bits set to 1B) even though the hub has no power switches that can be controlled by the USB System Software.


    Переводя на русский, получается, что в стандарте USB уже прописана возможность управления питанием портов, с помощью т.н. Per-Port Power Switching (PPPS), но вот встретить устройство, которое бы поддерживало эту возможность не просто тяжело, а очень тяжело. Для реализации PPPS-функционала необходимы дополнительные компоненты (полевые транзисторы и обвязка), которые в целях экономии в хабы не устанавливаются.


    Чутко реагируя на запросы рынка некоторые производители указывают в спецификациях хабов функцию PPPS, но на деле дальше надписи на коробке дело не идет. И в принципе, придраться тяжело, ведь многие чипы внутри хабов эту функцию поддерживают, но вот реализовать ее без дополнительных переключателей (транзисторов) невозможно (чаще всего USB порты напрямую подключены к линии +5V).


    Я даже разобрал специально несколько маленьких USB-хабов, которые планировал использовать совместно c A5-V11 роутером. Внутри оказались: чип GL850G и горяче любимый китайцами FE1.1s. Естественно внутри обнаружились только сами контроллеры с минимумом деталей. Ввиду миниатюрного размера платы поместить даже навесным монтажом транзистор и примкнувшие к нему детали тяжело. Пришлось это успокоится. Хотя, в зависимости от чипа, если в даташите встречается упоминание о over-current detection and Individual or ganged power control, то можно провести операцию по smart-изации такого устройства по методу описанному в статье. Товарищ использовал комбинацию из транзистора и кучки резисторов для включения функции PPPS в своем хабе.


    Схема переделки и внешний вид устройства
    image
    image

    Также читая документацию, ловишь себя на том, что в ней нет-нет да и встречается упоминание о том, что режим управления портами можно реализовать, добавив дополнительно в схему какой-нибудь AIC1526-0 или MIC2026 (Dual-channel power distribution switch).


    Схемы из даташитов не дадут соврать


    Часть основная или переходим к сути


    Обуреваемый невеселыми мыслями по поводу покупки китайских хабов с неизвестным функционалом ("кота в мешке") и невозможности предварительной их проверки, я нечаянно натолкнулся на статью, посвященную настройке openwrt для управления питанием USB-хаба, притом в качестве примера приведен тот самый, заброшенный и забытый D-Link DUB-H7 в сером корпусе.



    Изучив матчасть стало ясно, что на борту хаба помимо достаточно продвинутого контроллера Philips ISP1521BE есть и целая куча тех самых dual-channel power distribution switch AIC1528-0 для полноценного переключения питания. Хотя судя по даташиту, чип с минимальным обвесом сам может управлять питанием downstream портов (а еще там много чего, как оказалось, не реализовано, например индикация активности upstream порта с помощью технологии GoodLink, или хост USB 1.1 для корректной поддержки смеси 2.0 и 1.1 на downstream портах и т.д. и т.п.).


    Кстати, для тех, кто решится повторить пройденный мной путь, сразу скажу, что современные версии D-Link DUB-H7 (в черном глянцевом корпусе) уже не так полезны, как старички серого цвета.



    По информации с wikidevi.com (1,2,3,4) существует несколько ревизий данного хаба, с различным набором компонентов на борту, и соответственно с различным функционалом (А1/A5 — ISP1521BE 7-port, B1-2xGL854G 4-port, C1 — 2xGL850Z 4-port).


    Внимание на D-Link DUB-H7 обращено еще и потому, что помимо его неплохого функционала, это еще и самый доступный (как по цене, так и по распространенности) в наших краях вариант. Из моделей, которые могли упоминаться попутно с "Per-Port Power Switching" можно дополнительно отметить, например, такие:


    • Linksys USB2HUB4 USB 2.0 hub.
    • D-Link DFB-H7 Combo Hub
    • Elecom U2H-G4S
    • Sanwa Supply USB-HUB14GPH
    • Targus Inc. PAUH212
    • Hawking Technology UH214

    Мне искать упомянутые устройства не довелось, потому что когда-то повезло с версией ревизии A5. Правда сейчас, если бы пришлось покупать такой хаб, я бы постарался найти ревизию B1, потому что помимо управления питанием портов, чип, на котором она построена (GL854G) имеет внутри такую штуку, как Multi Transaction Translator.



    Важность наличия Multi Transaction Translator (MTT) в USB хабе


    Небольшое отступление для того, чтобы расказать, что такое этот Multi Transaction Translator (MTT) и почему он так важен и нужен. Передатчик операции (англ. transaction translator, TT) является важным компонентом любого высокоскоростного хаба, который обеспечивает связь между upstream и downstream портами концентратора, особенно в случае, когда эти порты работают на разных скоростях передачи данных. Фактически, TT отделяет низко- и среднескоростные устройства, от высокоскоростных (сугубо USB 2.0, например) и отвечает за работу на скоростях USB 1.1.


    Передатчик операции может быть двух видов — одинарным (англ. Single Transaction Translator, STT) или множественным (англ. Multiple Transaction Translator, MTT). В случае STT используется один передатчик для всех портов, а в случае MTT — у каждого порта свой передатчик. Понятно что первый вариант более дешевый и простой, откуда происходит и основной недостаток такого варианта — в случае подключения к хабу нескольких USB 1.1 портов все они будут работать через одно-единственное "бутылочное горлышко". Думаю можно представить что будет со скоростью обмена.



    Говоря простым языком, STT-хабы имеют ограничение на количество устройств, которыми можно пользоваться одновременно. В противном случае это чревато потерей пакетов из-за конфликтов в планировании передачи данных, перегрузкой хаба (особенно в случае использования активно обменивающихся данными устройств, вроде звуковых карт) и т.п. Поэтому лучше при выборе хаба сразу ориентироваться на устройства с MTT, а не искать потом причину нестабильности в работе. Если хаб уже имеется, и он, к несчастью, оказался с STT, то остается только внимательно проверить стандарты подключенных к хабу устройств и, по возможности, сократить количество подключенных USB 1.1 до одного.


    К сожалению, абсолютное большинство недорогих хабов, построенных на бюджетных чипах (fe1.1s, GL850G, и ISP1521BE моего A5 хаба) на борту имеют STT, более дорогие и продвинутые (GL852G, GL854G (B1 ревизия обсуждаемого D-link DUB-H7), GL3520, VL812, VL813, SMSC USB2514) работают под управлением MTT.


    Проверить тип передатчика операции можно либо прочитав даташит на чип (но часто китайцы не могут или не хотят сообщать марку чипа), либо подключив хаб к компьютеру с *nix и выполнив команду lsusb -v и найдя кусок служебной информации, относящийся к исследуемому хабу (по названию). В строке DeviceProtocol будет указано либо Single TT либо Multi TT. Ясно, что покупать лучше только с Multi :)


    Описание характеристик хаба выданное командой lsusb

    Bus 001 Device 005: ID 2001:f103 D-Link Corp. DUB-H7 7-port USB 2.0 hub
    Couldn't open device, some information will be missing
    Device Descriptor:
    bLength 18
    bDescriptorType 1
    bcdUSB 2.00
    bDeviceClass 9 Hub
    bDeviceSubClass 0 Unused
    bDeviceProtocol 1 Single TT
    bMaxPacketSize0 64
    idVendor 0x2001 D-Link Corp.
    idProduct 0xf103 DUB-H7 7-port USB 2.0 hub
    bcdDevice 1.00
    iManufacturer 0
    iProduct 0
    iSerial 0
    bNumConfigurations 1
    Configuration Descriptor:
    bLength 9
    bDescriptorType 2
    wTotalLength 25
    bNumInterfaces 1
    bConfigurationValue 1
    iConfiguration 0
    bmAttributes 0xe0
    Self Powered
    Remote Wakeup
    MaxPower 0mA
    Interface Descriptor:
    bLength 9
    bDescriptorType 4
    bInterfaceNumber 0
    bAlternateSetting 0
    bNumEndpoints 1
    bInterfaceClass 9 Hub
    bInterfaceSubClass 0 Unused
    bInterfaceProtocol 0 Full speed (or root) hub
    iInterface 0
    Endpoint Descriptor:
    bLength 7
    bDescriptorType 5
    bEndpointAddress 0x81 EP 1 IN
    bmAttributes 3
    Transfer Type Interrupt
    Synch Type None
    Usage Type Data
    wMaxPacketSize 0x0001 1x 1 bytes
    bInterval 12


    При запуске команды lsusb -v -t можно увидеть симпатичную иерархическую структуру подключенных usb-устройств.



    Вместо lsusb можно использовать утилиту hwinfo с ключем --usb (ее желательно предварительно установить через sudo apt-get install hwinfo). Тогда вывод информации о usb устройствах будет выглядеть немного иначе:


    Информация выдаваемая hwinfo

    lab@lab-G:~$ hwinfo --usb
    23: USB 00.0: 10a00 Hub
    [Created at usb.122]
    Unique ID: zFuK.sOcBcpBDhs4
    Parent ID: k4bc.9T1GDCLyFd9
    SysFS ID: /devices/pci0000:00/0000:00:1d.7/usb1/1-8/1-8:1.0
    SysFS BusID: 1-8:1.0
    Hardware Class: hub
    Model: "D-Link DUB-H7 7-port USB 2.0 hub"
    Hotplug: USB
    Vendor: usb 0x2001 "D-Link"
    Device: usb 0xf103 "DUB-H7 7-port USB 2.0 hub"
    Revision: "1.00"
    Driver: "hub"
    Driver Modules: "usbcore"
    Speed: 480 Mbps
    Module Alias: "usb:v2001pF103d0100dc09dsc00dp01ic09isc00ip00in00"
    Config Status: cfg=new, avail=yes, need=no, active=unknown
    Attached to: #21 (Hub)


    В общем, кратенько с особенностями работы низкоскоростных устройств разобрались и теперь самое время перейти к программной части.


    Управляем питанием USB-портов


    Cкажу сразу, найти способ реализации функционала PPPS в среде Windows мне не удалось (хотя бы из праздного интереса). Максимум — включить/отключить устройство с помощью утилиты devcon. Буду рад, если кто-то из читателей поправит и дополнит. А пока же все процедуры проводятся на примере Ubuntu (в случае openwrt – алгоритм аналогичен, хотя в последних trunk-ах она уже должна быть включена в состав "дистрибутива").


    Итак, возможность Per-Port Power Switching (PPPS) или "попортового переключения питания" реализуется на хабах с аппаратной поддержкой этой функции с помощью программы hub-ctrl или ее потомка uhubctrl. Рассмотрю их по-очереди.


    HUB-CTRL


    Программа написана японским борцом за независимость инженером 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:



    Кстати, программа hub-ctrl может выступать в качестве своеобразного "пробника" usb-хаба на факт наличия в нем способности к управлению питанием портов. Достаточно ее запустить с ключом -v. Получаем список имеющихся в системе поддерживаемых хабов (строка INFO) и состояние портов (в моем случае все порты выключены).


    lab@lab-G:~/hub$ sudo ./hub-ctrl -v
    Hub #0 at 001:006
    INFO: individual power switching.
    WARN: Port indicators are NOT supported.
    Hub Port Status:
    Port 1: 0000.0000
    Port 2: 0000.0000
    Port 3: 0000.0000
    Port 4: 0000.0000
    Port 5: 0000.0000
    Port 6: 0000.0000
    Port 7: 0000.0000

    А вот так будет выглядеть конфигурация, когда все порты включены:


    lab@lab-G:~/hub$ sudo ./hub-ctrl -v
    Hub #0 at 001:006
    INFO: individual power switching.
    WARN: Port indicators are NOT supported.
    Hub Port Status:
    Port 1: 0000.0100 power
    Port 2: 0000.0100 power
    Port 3: 0000.0100 power
    Port 4: 0000.0100 power
    Port 5: 0000.0100 power
    Port 6: 0000.0100 power
    Port 7: 0000.0100 power

    Чтобы включить какой-то из портов нужно выполнить команду sudo ./hub-ctrl -h 0 -P 1 -p 1, где -h указывает какой хаб используем (0-й в моем случае), -P говорит какой порт (1-й порт в моем случае), а -p указывает на состояние (0-выключен, 1-включен).



    Чтобы получить конфигурацию как на картинке выше, понадобилось последовательно выполнить следующие команды (для изначально отключенных портов):


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


    Соответственно, не сложно написать скрипт, который заставит for fun мигать светодиоды в нужной последовательности. Примеры таких вещей уже есть и успешно функционируют:
    азбука Морзе на usb-хабе, елочные гирлянды и т.д. и т.п. Мне вот из возможностей hub-ctrl не хватило функции циклического включения для реализации своих сиюминутных светотехнических фантазий (чтобы не тратить время на написание скрипта ну и т.п.). Этот досадный недостаток устранен в преемнике — uhubctl.


    UHUBCTL


    Программа uhubctl представляет из себя оптимизированный аналог hub-ctrl и обладает некоторыми косметическими отличиями (ну и конечно же поддерживает большее количество устройств).


    С uhubctl работают:

    Теоретически, утилита может быть скомпилирована для запуска в среде windows, но… Но пока взаимодействует она с утройствами через драйвер winusb.sys, который не может обращаться напрямую к хабу. Также в программе заявлена поддержка USB 3.0 (хабов USB 3.0 поддерживающих Per-Port Power Switching, кстати, намного больше чем хабов USB 2.0 с аналогичным функционалом). При работе с USB 3.0 хабом, подключенным к USB 3.0 upstream-порту, программа определяет его как два независимых виртуальных хаба: USB 2.0 и USB 3.0, а уже сами USB-устройства будут подключены к одному из них в зависимости от их возможностей и скорости соединения. Соответственно, для управления такими устройствами программа по-умолчанию включает/отключает питание на виртуальных хабах (перевести утилиту в ручной режим можно добавив в команду запуска ключ -е).


    Важно: некоторую путаницу может вызвать система адресации для USB-портов (она схожа для hub-ctrl и uhubctl). При работе использует тот же метод адресации аналогичный таковому в ядре Linux: b-x.y.z, где b — номер шины USB, а x, y, z — номера портов цепочки узлов, начиная с корневого USB-хаба для данной шины. Если имеется больше чем один управляемый USB-хаб, определить правильные параметры можно запустив uhubctl с параметром -l (location). Отмечу, что эта адресация является полустабильной — она не изменится, если вы отключите и подключите USB-устройства обратно к одному и тому же физическому порту.


    Алгоритм компиляции программы аналогичен алгоритму для hub-ctrl. За тем только исключением, что дополнительно нужно установить библиотеку libusb-1.0 (версия 1.0.12 или позднее) привычной командой sudo apt-get install libusb-1.0-0-dev, а затем скомпилировать бинарик командой make.


    Синтаксис запуска программы следующий


    uhubctl -a off -p 2


    Эта команда отключает питание (-a off, или -a 0) на порту 2 (-p 2). Поддерживаемые команды off/on/cycle (или 0/1/2). Ключ cycle отключает питание, выжидает некоторое время (определяется ключом -d) и включает его обратно. Т.е. теперь хаб запросто для мигания может заменить микроконтроллер.


    Что из этого всего следует, или Выводы


    А следует из этого то, что "секрет" в старом хабе от D-Link все-такие есть. Использование описанной технологии (PPPS) вполне обосновано при необходимости удаленного управления массивом устройств, подключенных к шине USB. Более того, способ этот уже используется для отключения жестких дисков, веб-камер и GSM-модемов (таких как на картинке):


    image

    Хотя, что касается модемов и упомянутого мной D-link DUB-H7, то есть люди, которые подвергают сомнению работоспособность такой связки (при работе с программой hub-ctrl).


    Причина заключается в том, что...

    "… эксперименты с использованием Dlink DUB H-7 показали, что hub-ctrl -p 0 понижает напряжение только до уровня 1.47V. При этом после вставки модема в такой "выключенный порт" светодиод не моргает, однако файлы /dev/ttyUSBx для данного модема в системе появляются. Они даже могут быть открыты. Однако запись команд и чтение ответов из этого порта не заканчиваются успехом."


    Описанные в статье утилиты (lsusb, hwinfo, hub-ctrl) могут выступать отличным подспорьем при выборе очередного USB-хаба, особенно, если нет доступа к просмотру внутреннего устройства. На хабре уже описывались пользовательские идеи и ожидания от идеальных usb-хабов (здесь и здесь). Описанные алгоритмы проверки существующих хабов, на мой взгляд, отлично дополнят и разбавят описанные авторами подходы. Ну и так, вдогонку, герой моей статьи (D-link DUB-H7 ver. A5) на мой взгляд очень неплохо выглядит с точки зрения схемотехнических решений. На сим, пожалуй, откланяюсь :)



    P.S. Вдогонку вопрос к членам хабра-сообщества, у которых вдруг совершенно случайно завалялся такой же как у меня D-link DUB-H7 в сером корпусе.



    Что за детали установлены на обведенных позициях (а может быть кто-то даже видел схему)? Особенно интересуют элементы RP1...RP2 (подозреваю на резисторную сборку из 0-х cопротивлений).


    Дополнение: если вдруг кому-то понадобится дамп прошивки микросхемы EEPROM 24C02, то выглядит он вот так:



    Поддержать автора
    Поделиться публикацией

    Похожие публикации

    Комментарии 33

      +1
      RP обычно обозначаются резисторы или перемычки для настройки. Как в старых материнках перемычки-джамперы. D1 похоже диод защиты от переполюсовки, вместо которого стоит просто перемычка. ESD1-8 по моему скромному мнению какие-то сборки для защиты от статики
        +1
        Знать бы еще, что там за сборки. Программа hub-ctrl пишет «WARN: Port indicators are NOT supported.» По даташиту на процессор хаба ноги к которым должны были бы быть припаяны сборки, как раз таки отвечают за «Port indicator support».
        Диод D1 похоже аналогичный D2 (SS12). А вот что ставится в качестве статической защиты около USB (никогда не встречал такого в хабах)?
          +1
          внутри у сборок защиты от статики насколько я знаю несколько скоростных диодов и пара резисторов. Насчет port indicator support к сожалению ничего не подскажу)
            +1
            diller61 не подбросите ссылку на такую ESD-сборку, чтоб хотя бы знать что искать?
              +2
                +3
                image
                  +1
                  Спасибо!
                  Судя по расположению контактных площадок на хабе, там скорее всего ставятся двунаправленные диоды, вроде таких
                    +1
                    Точнее, вроде таких (ultra low capacitance bidirectional ESD protection diode). Пруф ESD protection for USB 2.0 interfaces

                      0
                      Себе в дополнение — отличная статья по электростатической защите USB-портов. Остановился я-таки на импульсных предохранителях PulseGuard (так как на хабе отсутствуют элементы ESD для линий D+/D-)
                      image
          +1
          Пользуюсь много лет таким же хабом. На обведенных местах ничего нет, все так же, как на вашей фотографии.
            +1
            Печаль :( Попробовать что ли впаять наугад резисторную сборку… Думается мне 0-номинала, потому что идут дорожки напрямую к светодиодам, а те уже со своими резисторами.
            Еще кстати контроллер поддерживает индикатор активности upstream-порта. Нога отвечающая за это висит в воздухе. Все что надо — чинуть на нее светодиод да 300 Ом резистор.
              +1
              Кстати, с обратной стороны платы у меня посадочные площадки под предохранители. Так как я решил «реставрировать» хаб всеми недостающими компонентами — впаял туда самовосстанавливающиеся предохранители на номинальный ток 0,5А (насколько хватило Чип&Дип-а, на 5 штук :( )
              0
              Аналогично есть шт 5 таких хабов.ревизия 1.7 2003 года. на указанных местах так-же ничего нет. возможна на более ранних что-то и было.
              +1
              При надобности делаю себе 3-х портовые хабы из TUSB2036 с ключами TPS2041B и защитой.
              Не пробовали японскую программу на таких контроллерах?
                +1
                Судя по даташиту, ваш контроллер «Switching and Overcurrent Reporting Is Provided Ganged
                or Per Port», т.е. теоретически работать должен. Поробуйте hub-ctrl запустить с ключом -v и будет видно поддерживается ли контроллер. Возможно придется накинуть напряжение на 26 контакт для активации функции, ибо «When EXTMEM (pin 26) is high, EEDATA/GANGED selects between ganged or per-port power overcurrent detection for the downstream ports.»
                +1
                Тот самый D-Link DUB-H7 в черном глянцевом корпусе, ревизия B1 на 2xGL854G


                А вот на счёт Multi TT как-то непонятно
                Bus 001 Device 006: ID 05e3:0610 Genesys Logic, Inc. 4-port hub
                Device Descriptor:
                  bLength                18
                  bDescriptorType         1
                  bcdUSB               2.00
                  bDeviceClass            9 Hub
                  bDeviceSubClass         0 Unused
                  bDeviceProtocol         2 TT per port
                  bMaxPacketSize0        64
                  idVendor           0x05e3 Genesys Logic, Inc.
                  idProduct          0x0610 4-port hub
                  bcdDevice           77.32
                  iManufacturer           0 
                  iProduct                1 USB2.0 Hub
                  iSerial                 0 
                  bNumConfigurations      1
                  Configuration Descriptor:
                    bLength                 9
                    bDescriptorType         2
                    wTotalLength           41
                    bNumInterfaces          1
                    bConfigurationValue     1
                    iConfiguration          0 
                    bmAttributes         0xe0
                      Self Powered
                      Remote Wakeup
                    MaxPower              100mA
                    Interface Descriptor:
                      bLength                 9
                      bDescriptorType         4
                      bInterfaceNumber        0
                      bAlternateSetting       0
                      bNumEndpoints           1
                      bInterfaceClass         9 Hub
                      bInterfaceSubClass      0 Unused
                      bInterfaceProtocol      1 Single TT
                      iInterface              0 
                      Endpoint Descriptor:
                        bLength                 7
                        bDescriptorType         5
                        bEndpointAddress     0x81  EP 1 IN
                        bmAttributes            3
                          Transfer Type            Interrupt
                          Synch Type               None
                          Usage Type               Data
                        wMaxPacketSize     0x0001  1x 1 bytes
                        bInterval              12
                    Interface Descriptor:
                      bLength                 9
                      bDescriptorType         4
                      bInterfaceNumber        0
                      bAlternateSetting       1
                      bNumEndpoints           1
                      bInterfaceClass         9 Hub
                      bInterfaceSubClass      0 Unused
                      bInterfaceProtocol      2 TT per port
                      iInterface              0 
                      Endpoint Descriptor:
                        bLength                 7
                        bDescriptorType         5
                        bEndpointAddress     0x81  EP 1 IN
                        bmAttributes            3
                          Transfer Type            Interrupt
                          Synch Type               None
                          Usage Type               Data
                        wMaxPacketSize     0x0001  1x 1 bytes
                        bInterval              12
                Hub Descriptor:
                  bLength               9
                  bDescriptorType      41
                  nNbrPorts             4
                  wHubCharacteristic 0x00e0
                    Ganged power switching
                    Ganged overcurrent protection
                    TT think time 32 FS bits
                    Port indicators
                  bPwrOn2PwrGood       50 * 2 milli seconds
                  bHubContrCurrent    100 milli Ampere
                  DeviceRemovable    0x00
                  PortPwrCtrlMask    0xff
                 Hub Port Status:
                   Port 1: 0000.0100 power
                   Port 2: 0000.0100 power
                   Port 3: 0000.0100 power
                   Port 4: 0000.0100 power
                Device Qualifier (for other device speed):
                  bLength                10
                  bDescriptorType         6
                  bcdUSB               2.00
                  bDeviceClass            9 Hub
                  bDeviceSubClass         0 Unused
                  bDeviceProtocol         0 Full speed (or root) hub
                  bMaxPacketSize0        64
                  bNumConfigurations      1
                Device Status:     0x0001
                  Self Powered
                
                Bus 001 Device 005: ID 05e3:0610 Genesys Logic, Inc. 4-port hub
                Device Descriptor:
                  bLength                18
                  bDescriptorType         1
                  bcdUSB               2.00
                  bDeviceClass            9 Hub
                  bDeviceSubClass         0 Unused
                  bDeviceProtocol         2 TT per port
                  bMaxPacketSize0        64
                  idVendor           0x05e3 Genesys Logic, Inc.
                  idProduct          0x0610 4-port hub
                  bcdDevice           77.32
                  iManufacturer           0 
                  iProduct                1 USB2.0 Hub
                  iSerial                 0 
                  bNumConfigurations      1
                  Configuration Descriptor:
                    bLength                 9
                    bDescriptorType         2
                    wTotalLength           41
                    bNumInterfaces          1
                    bConfigurationValue     1
                    iConfiguration          0 
                    bmAttributes         0xe0
                      Self Powered
                      Remote Wakeup
                    MaxPower              100mA
                    Interface Descriptor:
                      bLength                 9
                      bDescriptorType         4
                      bInterfaceNumber        0
                      bAlternateSetting       0
                      bNumEndpoints           1
                      bInterfaceClass         9 Hub
                      bInterfaceSubClass      0 Unused
                      bInterfaceProtocol      1 Single TT
                      iInterface              0 
                      Endpoint Descriptor:
                        bLength                 7
                        bDescriptorType         5
                        bEndpointAddress     0x81  EP 1 IN
                        bmAttributes            3
                          Transfer Type            Interrupt
                          Synch Type               None
                          Usage Type               Data
                        wMaxPacketSize     0x0001  1x 1 bytes
                        bInterval              12
                    Interface Descriptor:
                      bLength                 9
                      bDescriptorType         4
                      bInterfaceNumber        0
                      bAlternateSetting       1
                      bNumEndpoints           1
                      bInterfaceClass         9 Hub
                      bInterfaceSubClass      0 Unused
                      bInterfaceProtocol      2 TT per port
                      iInterface              0 
                      Endpoint Descriptor:
                        bLength                 7
                        bDescriptorType         5
                        bEndpointAddress     0x81  EP 1 IN
                        bmAttributes            3
                          Transfer Type            Interrupt
                          Synch Type               None
                          Usage Type               Data
                        wMaxPacketSize     0x0001  1x 1 bytes
                        bInterval              12
                Hub Descriptor:
                  bLength               9
                  bDescriptorType      41
                  nNbrPorts             4
                  wHubCharacteristic 0x00e0
                    Ganged power switching
                    Ganged overcurrent protection
                    TT think time 32 FS bits
                    Port indicators
                  bPwrOn2PwrGood       50 * 2 milli seconds
                  bHubContrCurrent    100 milli Ampere
                  DeviceRemovable    0x00
                  PortPwrCtrlMask    0xff
                 Hub Port Status:
                   Port 1: 0000.0507 highspeed power suspend enable connect
                   Port 2: 0000.0100 power
                   Port 3: 0000.0100 power
                   Port 4: 0000.0100 power
                Device Qualifier (for other device speed):
                  bLength                10
                  bDescriptorType         6
                  bcdUSB               2.00
                  bDeviceClass            9 Hub
                  bDeviceSubClass         0 Unused
                  bDeviceProtocol         0 Full speed (or root) hub
                  bMaxPacketSize0        64
                  bNumConfigurations      1
                Device Status:     0x0001
                  Self Powered
                

                  +1
                  Ну в даташите на GL854G — MTT. В bDeviceProtocol «TT per port». В моем старичке в bDeviceProtocol написано «Single TТ», т.е. один на все порты. В вашем же случае, на каждый порт — свой отдельный TT. Нормально :)
                  +1

                  Off Возможно кто то ищет как сбросить USB порт на RPI не переподключая устройство к USB — решение https://raspberrypiandstuff.wordpress.com/2017/08/04/rtl_433-on-a-raspberry-pi-made-bulletproof/

                    +1
                    Как раз вчера искал и нашёл, что устройство можно закрыть и открыть для сброса, а также магическими словами в /sys/<…>/usb1/power можно в любом Linux поменять режим питания устройства, то есть выключить и включить попробовать.
                      0
                      А можно по-подробнее, или со ссылкой. Мои поиски привели к решению с usb-ctrl. Хотя может быть у нас разные задачи.
                    +3
                    Я очень давно делал комп с Linux, который должен всегда быть на связи через GPRS модем (другой связи там мне было). Был какой-то хуавей, кажется от мегафона. Проблема в том, что он раз в сутки или чаще вис, и программное отключение контактов USB 2 и 3 (2.5В) не помогало. Нужно было его физичиески отключить от 5 вольт. Я взял обычную мышку, чтобы система определяла ее как USB устройство и давала возможность управлять контактами 2.5В (5В управлять нельзя они подаются постоянно), диодный ключ, припаял его вместо светодиода на мышке, а ключ уже управлял подачей 5В на модем, тоже был впаян в схему. Даже в корпус это все собрал. Monit + простенький скрипт, и все, пропал инет, програмно отключаем мышку, диодный ключ отключет модем, и все подключаем обратно. Говорят мое решение 5 лет проработало, пока комп не демонтировали.
                      0
                      нормальный вариант, хотя не уверен, что usb-мышь будет дешевле arduino с aliexpress. Но в плане монтажа, корпус мыши однозначно выигрышный :)
                        0
                        Очень интересно, а как вы управляли мышью? всегда казалось что она работает только на выход.
                          0
                          Насколько я понял тут D+/D- отключается. В отличие от хабов c ppps, где рвется питание (или «типа» рвется, до 1,47 в)
                            0
                            А как потом мышка будет работать? Если USB отвалился?)
                              0
                              Возможно все делается с использованием упомянутой мной в статье утилиты devcon (в Windows).
                              — Для Windows последовательность такая:
                              а)узнаем VID/PID в диспетчере устройств
                              б)отключаем устройство (в CMD): devcon disable «USB\VID_xxxx&PID_yyyy»
                              в)включаем устройство (в CMD): devcon enable «USB\VID_xxxx&PID_yyyy»
                              — В UNIX команда: echo suspend > /sys/bus/usb/devices/1-9/power/level говорит устройству перейти в режим энергосбережения. Питание при этом не снимается.
                              Нашел вот такой скрипт даже:
                              #!/bin/sh
                              echo «Выключение питания»
                              echo suspend > /sys/bus/usb/devices/1-9/power/level
                              sleep 10
                              echo «Включение питания»
                              echo on > /sys/bus/usb/devices/1-9/power/level
                        0
                        Помню был у меня черный хаб и я его любил. Но в нем сгорел один элемент. После чего он стал работать только за зарядное устройство. Я хотел его перепаять, но так и не нашел его по маркировке…
                          0
                          Ну фотку можно прикрепить, чтобы прикинуть что за элемент. Дерзайте :)
                          Я свой практически выбросил, в качестве компенсации решил ему обновить конденсаторы и допаять недостающие детали :)
                          +1
                          Очень хорошая статья. Заставила иначе взглянуть на старый хлам из дальнего ящика. Автору плюс в карму.
                            0
                            AndyRadist Спасибо. Удивительно, что вещь может пролежать 10 лет и внезапно так вот всплыть. Но к сожалению, порадоваться за свою прозорливость не могу, взял когда-то первое попавшееся и самое дешевое. Повезло видимо, потому что сейчас под те же критерии попадет откровеннейший хлам :(
                            Кстати «серый» D-link DUB-H7 еще популярен у СarPC-строителей за свою морозостойкость и способность к нормальному старту в промерзшем салоне авто…
                              +1
                              Вот за CarPC подтверждаю, несколько лет у меня в машине честно отслужил. После смены машины, в процессе каких-то экспериментов случайно спалил. Но только наполовину: 1-4 порты работают, 5-7 — нет. Очень стойкий оловянный солдатик хаб оказался. Ещё бы знать в те времена про возможность управления питанием отдельных портов. Спсибо за статью
                                0
                                Gorynch: cпасибо за отзыв. Попробуйте заменить силовые ключи на которых сидят порты 5-7 (AIC1528-0)
                                  0
                                  Спсибо за совет, попробую

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое