Как убедиться, что флешка работает в USB 3.0?

    В современной IT-индустрии часто случается так, что заверения производителя устройства относительно его функциональности не соответствуют действительности. От скепсиса по этому поводу перейдем к решению конкретной технической задачи…


    Постановка задачи


    В нашей тестовой лаборатории оказался USB Flash накопитель Kingston DataTraveler 3.0. Согласно информации производителя, устройство поддерживает USB 3.0. Проверим, так ли это на самом деле, не разбирая флешку и не нарушая гарантию.

    Аппаратный тест


    Присмотревшись к разъему, за четырьмя «ближними» контактами, обеспечивающими поддержку USB 2.0, мы, как и ожидалось, обнаружили пять «дальних» контактов, используемых только в режиме USB 3.0 Super Speed. Измеряем сопротивление сигнальных линий USB 3.0 относительно земли, получаем значения, отличные от бесконечности. Вывод: контакты USB 3.0 физически присутствуют и не заканчиваются тупиком. Измерение выполнялось омметром на пределе, используемом для проверки полупроводниковых диодов. Для доступа к «дальним» контактам разъема USB 3.0 можно сконструировать переходник или воспользоваться тонким и длинным щупом, например иглой. Полученный результат является необходимым, но не достаточным условием функционирования устройства в режиме USB 3.0 Super Speed. Может случиться так, что сигнальные цепи заканчиваются терминирующими резисторами, но не подключены к контроллеру. Поэтому переходим к следующему тесту – программному.

    Программный тест


    Эксперимент выполняем на достаточно новой, еще не исследованной плате Tyan S5533, построенной на чипсете Denlow.

    Системная плата Tyan S5533

    Рис 1. Системная плата Tyan S5533 в ITX-формате

    Чтобы исключить влияние драйверов, запускаемых в сеансе операционной системы, наш тест будет «экстремально низкоуровневым», запускаться будем под DOS, а результаты контролировать путем просмотра дампа Memory Mapped I/O регистров контроллера USB.

    Последовательность действий такова.

    1) Воспользовавшись бета-версией утилиты USB.EXE разработки IC Book Labs, определим адрес блока конфигурационных регистров контроллера XHCI, в нашем примере это bus=0, device=14h, function=0. Также определим базовый адрес блока операционных регистров в пространстве Memory Mapped I/O, в нашем примере он равен F7500000h.

    image

    Рис 2. Результаты работы утилиты USB.EXE. Адрес блока конфигурационных регистров XHCI: bus=0, device=14h, function=0. Базовый адрес операционных регистров XHCI равен F7500000h.

    2) Как известно, в целях совместимости с программным обеспечением, не поддерживающим контроллер USB 3.0 XHCI, на данной платформе, по умолчанию, порты USB 3.0 обслуживаются контроллером USB 2.0 EHCI. Наша задача – перевести их в режим обслуживания контроллером USB 3.0 XHCI. Воспользуемся документацией Intel 8 Series / С220 Series Chipset Family Platform Controller Hub Datasheet и любой утилитой, позволяющей редактировать содержимое регистров системной логики.

    Программируем регистр USB 3.0 Port Routing Mask Register. Записываем по адресу bus=0, device=14h, function=0, register=0DCh байт со значением 0FFh.

    Программируем регистр USB 3.0 Port Super Speed Enable Register. Записываем по адресу bus=0, device=14h, function=0, register=0D8h байт со значением 0FFh.

    image

    Рис.3. Регистр USB 3.0 Port Routing Mask Register

    image

    Рис.4. Регистр USB 3.0 Port Super Speed Enable Register

    3) Считываем и расшифровываем согласно рис.5 и рис.6 исходное состояние нескольких битовых полей из младших 16-битов 32-битного регистра PORTSCNUSB3 до подключения устройства к исследуемому порту. Регистр находится по смещению 0570h от базового адреса блока операционных регистров контроллера, его адрес F7500000h+0570h=F7500570h

    Прочитанное значение = 02A0h = 0000.0010.1010.0000b
    D0=Current Connect Status=0. Устройство не подключено.
    D1=Port Enabled/Disabled=0. Порт не используется.
    D[13-10]=Port Speed=0000b. Скорость не определена.

    image

    Рис.5. Регистр USB 3.0 Port Status and Control Register, биты [4-0]

    image

    Рис.6. Регистр USB 3.0 Port Status and Control Register, биты [13-10]

    4) Подключаем USB 3.0 флэшку, затем повторно считываем регистр и расшифровываем те же битовые поля.

    Прочитанное значение = 1203h = 0001.0010.0000.0011b
    D0=Current Connect Status=1. Устройство подключено.
    D1=Port Enabled/Disabled=1. Порт используется.
    D[13-10]=Port Speed=0100b. Скорость равна 5.0 Gbit/S, режим USB 3.0 Super Speed работает.

    5) Для самоконтроля, подключаем USB 2.0 флэшку к тому же порту, затем повторно считываем регистр и расшифровываем те же битовые поля. Прочитанное значение = 02A0h, что соответствует отсутствию подключения. Так и должно быть, регистр PORTSCNUSB3 «не видит» USB 2.0 устройство, так как оно обслуживается другой подсистемой и статус подключения доступен посредством другого регистра – PORTSCNUSB2, рассмотрение которого выходит за рамки наших исследований.

    Резюме


    Испытуемая флэшка действительно поддерживает режим USB 3.0.

    Если формализовать и запрограммировать описанные действия в виде DOS-программы или UEFI-приложения, получится небольшая утилита, позволяющая быстро определить, в каком скоростном режиме работает USB устройство. Для упрощения нашего примера, мы реализовали его для частного случая – подсистемы USB платы Tyan S5533 и использования первого порта, поэтому адрес регистра PORTSCNUSB3 в нашем примере – константа. В общем случае, для того, чтобы программа была работоспособна на всех платформах, адрес регистра PORTSCNUSB3 должен вычисляться на основании содержимого полей XHCI Capabilities, в соответствии со спецификацией USB 3.0 XHCI. С другой стороны, достигнуть универсальности можно значительно проще и изящнее, используя UEFI-протоколы вместо прямого взаимодействия с регистрами контроллера.

    Источники информации




    UPD


    В качестве «подопытного кролика» использовался девайс Kingston DataTraveler 100 G3, объемом 16 GB:
    image

    UPD-II


    1. Дескрипторы устройств, доступные для просмотра с помощью различных информационных утилит индицируют потенциальные возможности устройства. Скоростной режим, установленный для USB порта при подключении устройства, не всегда соответствует возможностям, декларированным в дескрипторах.

    Устройство, декларирующее поддержку USB 3.0, может работать в режиме USB 2.0 из-за заводских недоработок, неисправного кабеля и многих других причин. При этом содержимое дескрипторов может указывать на поддержку режима USB 3.0.

    Спецификацией USB рекомендовано, чтобы устройство выдавало разный набор дескрипторов в зависимости от реальной установленной скорости. Но у нас нет гарантии, что эта рекомендация соблюдена разработчиками флешки.

    Конечно, содержимое дескрипторов устройства — это более достоверный источник информации, чем надпись на флешке и клятвы продавца. Но по причинам, указанным выше, достоверность отлична от 100 процентов.

    Именно стремление довести достоверность до 100% побудила нас на экстремально низкоуровневые исследования.

    2. Другой метод – проследить в диспетчере устройств, какой контроллер является родительским для флешки (USB 2.0 EHCI или USB 3.0 XHCI), также неэффективен, так как, согласно спецификации, контроллер USB 3.0 XHCI может поддерживать все виды устройств: от Low-Speed до Super Speed. Поэтому, из того, что для флешки родительским контроллером является xHCI не следует, что устройство работает в режиме Super Speed.

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 33

      +32
      Почему бы не записать туда большой файл, а потом не прочитать его оттуда, попутно измеряя скорость чтения?
        +15
        Месье не ищет легких путей.
          +1
          Тем более, что флэшка то может и поддреживать USB 3.0, но скорость ее будет низкая.
          Если зайти на usb-flash-drives.whoratesit.com/ и посмотреть результаты по флешкам Kingston DataTraveler 3.0 (автор не уточнил модель), то можно увидить разницу в 5-6 раз по скорости на разных моделях!
            +5
            Если скорость будет ниже, чем 33Мб/с, то уже не имеет значения, 3.0 там или 2.0
              0
              Судя по рейтингу, у используемого девайса показатель 34.7 MB/s. Но вопрос для нас был не в скорости обмена, а в функциональности — в поддержке протоколов.

              Спасибо, кстати, за рейтинг. В UPD добавлено изображение тестового устройства.
                +1
                Но вопрос для нас был не в скорости обмена, а в функциональности — в поддержке протоколов.

                Академически красивая статья. На практике есть много более простых подходов)))
                  0
                  Спасибо! Ниже только что опубликована мотивация, почему и зачем.
          +2
          Честно говоря, исследование производит сильное впечатление.

          Но предпочитаю заливать многогиговый видеофайл, беспрерывно глядя на показатель скорости передачи в файловом менеджере.

          Конечно, получается не настолько надёжно; но зато на порядок проще, чем в DOS перезагружаться.
            +3
            Да и присутствует некоторая медитативность в наблюдении за скоростью и прогрессбаром.
              +1
              + :)
              • UFO just landed and posted this here
                0
                предпочитаю заливать многогиговый видеофайл, беспрерывно глядя на показатель скорости передачи в файловом менеджере

                time $(cp file.avi /mnt/myfleshka && umount /mnt/myfleshka) же :-)
                +3
                Хаб «Интерфейсы». Ну-ну.
                Воспользуемся документацией Intel 8 Series / С220 Series Chipset Family Platform Controller Hub Datasheet

                Я аж на календарь посмотрел, но нет, не пятница.
                Ничего вроде lsusb -v перед этим на ум не пришло?

                Статье не хватает тега «садомазо».
                  0
                  Если у Вас есть накопитель USB 3.0, представьте, пожалуйста, результат работы lsusb -v, чтобы дать развернутый ответ.
                    0
                    Сейчас в ближайшем доступе вообще только Mac OS и без USB 3.0 портов.

                    lsusb -v показывает поле bcdUSB для устройств.
                    A device must report a value of 0300H in the bcdUSB field of its Device Descriptor


                    Сам не проверял, не на чем.
                      0
                      Не могу ответить за Linux, но в OSX:

                       ~ $ system_profiler SPUSBDataType
                      USB Hi-Speed Bus:
                           ...
                                  iPhone:
                      
                                    Product ID: 0x12a8
                                    Vendor ID: 0x05ac  (Apple Inc.)
                                    Version:  6.02
                                    Serial Number:
                                    Speed: Up to 480 Mb/sec
                                    Manufacturer: Apple Inc.
                                    Location ID: 0xfd120000 / 4
                                    Current Available (mA): 500
                                    Current Required (mA): 500
                                    Extra Operating Current (mA): 500
                      
                                  Bluetooth USB Host Controller:
                      
                                        Product ID: 0x821f
                                        Vendor ID: 0x05ac  (Apple Inc.)
                                        Version:  1.31
                                        Speed: Up to 12 Mb/sec
                                        Manufacturer: Apple Inc.
                                        Location ID: 0xfa113000 / 6
                                        Current Available (mA): 500
                                        Current Required (mA): 0
                      
                        0
                        Нагуглил вот такой вывод

                        Bus 010 Device 002: ID 0bc2:3332 Seagate RSS LLC Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 3.00

                        Но информации как-то очень мало. Нужно будет действительно попробовать.
                          +1
                          1. Дескрипторы устройств, доступные для просмотра с помощью различных информационных утилит индицируют потенциальные возможности устройства. Скоростной режим, установленный для USB порта при подключении устройства, не всегда соответствует возможностям, декларированным в дескрипторах.

                          Устройство, декларирующее поддержку USB 3.0, может работать в режиме USB 2.0 из-за заводских недоработок, неисправного кабеля и многих других причин. При этом содержимое дескрипторов может указывать на поддержку режима USB 3.0.

                          Спецификацией USB рекомендовано, чтобы устройство выдавало разный набор дескрипторов в зависимости от реальной установленной скорости. Но у нас нет гарантии, что эта рекомендация соблюдена разработчиками флешки.

                          Конечно, содержимое дескрипторов устройства — это более достоверный источник информации, чем надпись на флешке и клятвы продавца. Но по причинам, указанным выше, достоверность отлична от 100 процентов.

                          Именно стремление довести достоверность до 100% побудила нас на экстремально низкоуровневые исследования.

                          2. Другой метод – проследить в диспетчере устройств, какой контроллер является родительским для флешки (USB 2.0 EHCI или USB 3.0 XHCI), также неэффективен, так как, согласно спецификации, контроллер USB 3.0 XHCI может поддерживать все виды устройств: от Low-Speed до Super Speed. Поэтому, из того, что для флешки родительским контроллером является xHCI не следует, что устройство работает в режиме Super Speed.
                            0
                            Спасибо за разъяснения, было бы хорошо это в статье сразу написать, чтоб понятно было зачем всё так сложно.

                            Но в итоге получается что всё равно тестируется не конечное устройство, а связка конкретный хост-контроллер и конкретное устройство. Ведь недоработки могут быть и в контроллере теоретически. Либо недоработки в устройстве могут привести к тому, что с разными контроллерами будут установлены разные скоростные режимы.

                            Вот еще что нашел
                            /proc/bus/usb/devices output format:
                            
                            Legend:
                              d = decimal number (may have leading spaces or 0's)
                              x = hexadecimal number (may have leading spaces or 0's)
                              s = string
                            
                            
                            Topology info:
                            
                            T:  Bus=dd Lev=dd Prnt=dd Port=dd Cnt=dd Dev#=ddd Spd=dddd MxCh=dd
                            |   |      |      |       |       |      |        |        |__MaxChildren
                            |   |      |      |       |       |      |        |__Device Speed in Mbps
                            |   |      |      |       |       |      |__DeviceNumber
                            |   |      |      |       |       |__Count of devices at this level
                            |   |      |      |       |__Connector/Port on Parent for this device
                            |   |      |      |__Parent DeviceNumber
                            |   |      |__Level in topology for this bus
                            |   |__Bus number
                            |__Topology info tag
                            
                                Speed may be:
                                	1.5	Mbit/s for low speed USB
                            	12	Mbit/s for full speed USB
                            	480	Mbit/s for high speed USB (added for USB 2.0);
                            		  also used for Wireless USB, which has no fixed speed
                            	5000	Mbit/s for SuperSpeed USB (added for USB 3.0)
                            


                            У меня /proc/bus/usb отсутствует, но зато есть

                            root@server:~# cat /sys/bus/usb/devices/usb*/speed
                            480
                            480
                            12
                            


                            Как Вы думаете, можно этому доверять?
                              +1
                              С точки зрения производительности — вполне. Если судить с точки зрения функциональности, то информации недостаточно.
                              Предположительно, у Вас в эксплуатации достаточно новая, но не самая современная платформа, оснащенная контроллерами USB 1.1 и USB 2.0. High-Speed устройства скоммутированы на EHCI, а Full-Speed — на UHCI/OHCI (скорее всего, UHCI, так как вероятнее всего — это Intel). Для недоразумений места почти не осталось.
                              И тем не менее, какими бы могли быть сюрпризы в данной архитектуре USB?

                              Сценарий 1. Устройство с характеристикой 12 Mbit/s может оказаться два-нольным, но подключенным к USB 1.1 UHCI/OHCI по причине деградации контактов разъема или в силу плохого качества интерфейсного кабеля (косичек подключения разъемов на лицевой панели десктопа). Это легко определяется любым софтом, типа USB Info, UTLite etc., так как USB 2.0 устройство «отдает» два-нольные дескрипторы.

                              Сценарий 2. У Вас платформа типа Intel P55 или новее, но без встроенного в чипсет USB 3.0, реализованная не с помощью контроллеров-компаньонов 2.0+1.1, а с использованием архитектуры Rate Matching Hub. По сути, ситуация аналогична выше упомянутой, с той лишь разницей, что сложнее понять, почему устройство работает по Full-Speed. Но причины возможного даунгрейда прежние.

                              С появлением USB 3.0 количество вариантов увеличивается. Ничто не мешает китайскому производителю сделать два-нольную флешку, коммутируя ее автономный контроллер на пять ламелей разъема USB 3.0 (заглушив при этом четыре ламели USB 2.0). Девайс при этом будет подключен к xHCI-контроллеру на системной платформе, но не будет обеспечивать Super Speed, передавая данный по High-Speed. Такая ситуация очень cложно отслеживается. Особенно, если не загружена драйверная поддержка USB Flash. В силу того, что при корректной реализации платформы все USB 3.0 устройства до этого момента должны по умолчанию коммутироваться на USB 2.0 контроллер.
                      0
                      Интересно, зачем этой флешке 3.0, она как раз соответствует теоретическому максимуму USB 2.0
                      Speed3
                      16GB, 32GB, 64GB: 40MB/s read, 10MB/s write
                      То ли дело DataTraveler R3.0, у которой в виндовсе скорость чтения 70Мб, дос не нужен, чтобы увидеть, что она 3.0.
                        0
                        Флешка покупалась для того, чтобы проверить ряд возможностей новой и неисследованной платформы Tyan S5533. Подключение ее к EHCI на другой плате показало, что в дескрипторах указаны значения, соответствующие High Speed. Возникла идея, что при подключении к xHCI контроллер флешки должен выдавать другие дескрипторы, соответствующий Super Speed. Как говорится, идея нашлась, а осадочек остался :)
                        Пришлось рыть фундаментально.
                          0
                          Насколько я помню, теоретическая максимальная скорость USB 2.0 недостижима из-за высокой паузы между сигналами. На практике максимальная скорость раза в полтора меньше
                          +1
                          Еще один важный момент: содержимое дескрипторов USB устройства (которые доступны для просмотра средствами ОС или отдельными утилитами), используется для информирования программного обеспечения о поддерживаемых режимах и не используется в процедуре выбора скоростного режима порта. Последняя выполняется исключительно аппаратно, ведь чтение дескрипторов можно выполнить только после того, как скорость порта уже установлена. Именно поэтому существует вероятность «подлога» – декларации режима USB 3.0 для устройства, не поддерживающего этот режим. При этом такой «подлог» не приведет к нарушению работы устройства, поскольку дескрипторы не имеют прямого влияния на процедуру выбора скоростного режима. Из этого следует, что мы не можем полностью доверять содержимому дескрипторов.
                          • UFO just landed and posted this here
                              0
                              В USB 3.0 устройстве мы имеем олдскульный USB 2.0 интерфейс из 4-х сигналов (Дата+, Дата-, земля и питание) и пять линий для общения собственно по USB 3.0 (извините, напомню: RX+, RX- и TX+, TX- плюс земля). Недобросовестный производитель может использовать только сигналы USB2, затерминировав или оставив в воздухе сигналы из USB 3.0. Процесс распознавания флешки в этом случае будет выполняться только по интерфейсу USB 2.0.

                              Но? несмотря на это, флешка может обслуживаться контроллером XHCI (его USB2-подсистемой). Напомним, что контроллер XHCI состоит из двух подсистем: USB2.0 и USB3.0. Поэтому из того факта, что в диспетчере устройств родительским устройством является контроллер XHCI, не следует, что используется режим Super-Speed.
                              • UFO just landed and posted this here
                                  +1
                                  Один из вариантов реакции — переход в режим USB 2.0 с использованием "старых" сигнальных цепей USB 2.0.
                                  Даже в том случае, если контроллер откажется работать с устройством и не выполнит переход в режим
                                  USB 2.0 аппаратно, то это может сделать драйвер, изменив содержимое регистров Port Super Speed Enable
                                  (обнулив бит, соответствующий данному порту).

                                  Если мы тестируем, используя готовые драйвера и утилиты, то данный процесс от нас скрыт. Именно поэтому решено было работать напрямую с оборудованием.
                              0
                              Я может чего не понимаю но не проще ли сделать

                              dd if=bigfile of=/dev/sda1

                              и посмотреть на скорость записи?
                                0
                                Не всегда можно получить ответы на поставленные вопросы.
                                0
                                Спасибо за статью. Лишней данная публикация, не будет!
                                  0
                                  Столько времени прошло с момента публикации, но актуальность еще не утеряна? :)
                                    0
                                    Ну, знаете, актуальность определяется практикой. Есть запрос практики, вот и интерес. Тем более, что подача материала… располагает к прочтению, не однодневка.

                                Only users with full accounts can post comments. Log in, please.