Usb load что это
Этот USB-тестер недавно стал частенько мелькать в комментариях под обзорами и я решил взять версию с беспроводным подключением к ПК (UM24C). Есть еще версия без Bluetooth-модуля, которая стоит чуть дешевле (UM24). Брал в официальном магазине производителя на Алиэкспрессе.
Заодно взял электронную нагрузку на 15Вт. Нагрузку продают в двух версиях — industrial grade и civil grade. Разница между индустриальной и гражданской версиями только в вентиляторе — гражданская версия идет с вентилятором на подшипнике скольжения, а индустриальная — на подшипнике качения, который шумит меньше и служит дольше.
Получил я их вот в такой коробке из пенопласта, чего до этого не встречал в заказах из Китая:
Внутри коробки два свертка — тестер и нагрузка, обмотанные в тонну пупырки:
Размотав пупырку, я обнаружил вот такую жестяную коробку, запаянную в полиэтилен (на фото он уже без полиэтилена):
В коробке была картонная вставка с названием модели и ссылкой на ПО и сам тестер вставленный в форму из пеноматериала:
Нагрузка же была упакована попроще — просто полижили в пакетик:
Лицевая и обратная сторона тестера были в защитной пленке. На лицевой стороне USB-тестера расположился экран с диагональю 1.44" и разрешением 128х128 пикселей. Сверху и снизу по две кнопки для управления тестером.
Обратная сторона пустует.
Откручиваем 4 винтика, снимаем панельку из оргстекла и видим обратную сторону платы, отвечающей за связь с компьютером:
Снимаем коммуникационную плату и видим основную:
Но сначала присмотримся к коммуникационной плате: на ней присутствуют красный светодиод (в самом низу), 4 подпружиненных контакта для связи с основной платой, LDO регулятор напряжения HM5333B (выходное напряжение 3.3В) и синяя плата, которая и отвечает за связь через Bluetooth (она отсутствует в версии UM24). На ней посередине расположилась микросхема Bluetooth HID системы на чипе BEKEN BK3231, которая совместима с Bluetooth 3.0 (в ранних версиях — Bluetooth 2.1), а по краю — интегрированная антенна.
На основной плате видны контактные площадки, на которые садятся подпружиненные контакты коммуникационной платы, 4 кнопки, USB и Micro USB входы, USB выход, LDO регулятор напряжения Magi Tech 7133H (выходное напряжение 3.3В), операционный усилитель Microchip MCP6002I.
… а командует всем оркестром микроконтроллер STMicroelectronics STM8S005K6, который имеет 32Кб памяти для программного кода и 128 байт для сохранения данных.
Спецификации UM24C
• дисплей: 1.44", 128х128, цветной, углы обзор близки к 180º
• входные порты: USB Type A male, Micro USB Type B female
• выходной порт: USB Type A female
• напряжение: 4.50-24.00В
• сила тока: 0-3.000А
• разрешение отображения напряжения: 0.01В
• разрешение отображения силы тока: 0.001А
• точность измерения напряжения: ± (0.2% + 1 цифра)
• точность измерения силы тока: ± (0.8% + 3 цифры)
• поддержка Qualcomm Quick Charge: QC 2.0 и QC 3.0
• 10 ячеек памяти для сохранения измеренной емкости и энергии
• функция измерения сопротивления Micro USB кабеля
• ручной выбор порога начала измерения: 0.00-0.30А
• отображение температуры, сопротивления подключенной нагрузки, мощности
• отображение графиков напряжения и силы тока
• отображение напряжения на линиях данных USB порта, текущего режима работы
• автовыключение экрана: 1-9 минут, выкл.
• яркость экрана: 0-5 (6 уровней)
• отображение температуры: в градусах Цельсия или Фаренгейта
• встроенная справка
• поворот экрана на 90º/180º/270º
• беспроводное двухстороннее Bluetooth подключение к ПК (SPP — Serial Port Profile)
• управление с ПК
При включении если удерживать нажатой одну из кнопок, откроется потайное меню, где 3 пункта: китайский язык, английский язык и обнуление памяти. Для выбора нужно отпустить кнопку на соответствующем пункте (устройство само переходит от пункта к пункту) или не отпускать пока не высветится рабочий экран. Экранов-страничек семь. Устройство автоматически включается на последнем активном экране.
Заставка при включении отображается около секунды:
На первом экране отображаются напряжение, сила тока, измеренная емкость, энергия, сопротивление нагрузки, мощность, температура и номер текущей ячейки памяти:
В верхней части высвечивается полоска с семью точками, одна из которых больше остальных для индикации активного экрана. Внизу кнопки HELP и NEXT, обозначающие функции кнопок, расположенных рядом с этими надписями. Две остальные кнопки при долгом удерживании поворачивают экран на 90º по часовой стрелке или против. При коротком нажатии на кнопку HELP выводится справка с назначениями кнопок. Содержание справки и функции кнопок различаются в зависимости от активного экрана. Для возвращения на рабочий экран нужно еще раз нажать на HELP. При повороте экрана назначения кнопок «поворачиваются» вместе с экраном.
Коротким нажатием на NEXT переходим к следующему экрану. На втором экране кроме напряжения, силы тока, температуры и ячейки памяти отображается напряжение на линиях данных USB-порта и текущий режим (unknown, QC2.0 или QC3.0).
На третьем экране высвечиваются измеренная емкость, энергия, длительность измерения, порог начала измерения и текущее состояние (красный REC означает, что сила тока ниже порога и измерение приостановлено, а зеленый REC — измерение продолжается). Для изменения порога нужно удерживать нажатой кнопку NEXT и короткими нажатиями выбрать нужное значение (0.00-0.30А). Выход из режима выбора осуществляется также длинным нажатием на NEXT.
Четвертый экран — измерение сопротивления Micro USB кабеля (или USB удлинителя). Сначала мигает первая картинка, что означает, что тестер надо подключить к USB порту без кабеля, настроить ток на 1.000А и удерживать нажатой NEXT пока не начнет мигать вторая картинка. Затем нужно отключить тестер от USB порта, подключить к тому же порту зарядки через кабель Micro USB (или USB удлинитель), настроить ток на 1.000A и снова удержать нажатой NEXT, пока ниже не отобразиться измеренное сопротивление. В принципе можно измерить при любом токе, даже необязательно, чтоб он был одинаковым на обоих этапах, но все-таки рекомендуется измерять при 1.000А. При попытке произвести первый шаг измерения через Micro USB кабель, в итоге отображается Test Error!
Пятый и шестой экраны — графики напряжения и силы тока:
Седьмой экран — настройки. Можно настроить время выключения экрана (1-9 минут или постоянно включен), яркость подсветки (0-5) и формат температуры (Цельсий/Фаренгейт).
Подключение к ПК
Активируем Bluetooth, находим UM24C, вводим пароль 1234 для сопряжения.
… переходим по ссылке, скачиваем UM24-UM24C+file+01.08.zip, распаковываем и устанавливаем ПО. После запуска программы на тестере перестает мигать красный светодиод и горит постоянно:
В программе выбираем нужный COM порт, жмем Connect и на экране тестера в верхнем правом углу появляется значок Bluetooth:
Интерфейс программы UM24C PC Software V1.2:
Интерфейс состоит из одного-единственного окна, в котором отображаются все данные, измерения, содержание ячеек памяти, а также кнопки и ползунки управления. Можно делать все то же, что описывалось выше, только используя мышку и не листая семь экранов. Правым кликом мышки на графиках открывается контекстное меню:
AutoScale X, перед которым стоит галочка, означает отображение графика с нулевого считывания, иначе будет выводится график на основании последних 60-и считываний. Графики обновляются постоянно, если подключение активно. Одно считывание примерно соответствует 0.55 секунде. Заменить считывания секундами нельзя, что по-моему очень серьезное упущение. Copy Data копирует изображение 360x286 в буфер обмена, которое при вставке в графическом редакторе выглядит вот так:
Export Data To Clipboard копирует данные в буфер обмена в виде текстовой информации, которая при последующей вставке в текстовом редакторе выглядит вот так:
Export Data To Excel сразу открывает таблицу с данными в Microsoft Excel:
Export Simplified Image открывает окошко выбора параметров сохранения картинки:
Можно выбрать формат (.bmp, .eps, .emf) и назначение (буфер обмена или файл на диске), также можно скрыть сетку отметив галочкой Hide Grid. Разрешение — 360х286. Ниже сохранный график с сеткой и без:
На графиках цвет тока красный, а напряжения — зеленый. Менять цвет нельзя. Совместить графики — тоже. Также нельзя увеличить размеры и детализацию изображений, но все же это лучше, чем смотреть на экране тестера без возможности сохранения.
Электронная нагрузка
Нагрузку, как я уже говорил, брал в более дорогой версии «индустриального класса» с вентилятором на подшипнике качения.
На лицевой стороне расположились потенциометр BOCHEN 3296 W102 (1kΩ), два LDO регулятора напряжения M5350B, подключенных параллельно, и красный светодиод, который горит во время работы:
Также есть контакты для опционального выключателя для вентилятора. При использовании выключателя автоматическое включение/выключение вентилятора (при достижении 40ºC) перестает работать.
На обратной стороне разместились составной транзистор Дарлингтона STMicroelectronics TIP122 (прикручен к радиатору без термопасты), операционный усилитель STMicroelectronics LM358 и термистор для автоматического включения-выключения вентилятора. Также есть две площадки с подписями USB+ и USB- для пайки дополнительных крокодилов.
Спецификации, согласно производителю:
• рабочее напряжение: 3.7-13В
• диапазон по току: 0.15-3.00A
• мощность: 15Вт (для продолжительной работы)
Начнем с того, что нагрузка способна обеспечить ток гораздо ниже 0.15А, а точнее начиная с нуля. Вентилятор потребляет около 90мА, поэтому при работе вентилятора — начиная с 90мА. Нагрузка также легко работает при напряжении 24.5В (выше не пробовал) и мощности до 35Вт, правда как долго проработает — неизвестно.
Тесты
Тестировал я самым точным, что у меня есть под рукой — мультиметром BSIDE ZT102 с самодельными щупами-крокодилами из чистой меди и медных проводов с сечением 1.5мм2. Также использовал самодельный USB male to female удлинитель с разрывом для измерения силы тока (контакты от порта до порта соединены медной проволокой 1.5мм2 и залиты эпоксидкой).
Для начала проверка мультиметра в режиме измерения напряжения на ИОНе (Analog Devices AD584LH):
Чтоб не захламялть обзор тонной фоток, я просто сделал две таблицы с результатами:
В таблицах самые стабильные результаты, но, скажем при смене напряжения с 15 до 17.5, разница кратковременно может достигать 0.04-0.06В, очень редко — 0.1В, а при измерении тока — до 0.004А, очень редко — до 0.008А.
Заключение
И USB тестер, и нагрузка более чем оправдали мои ожидания, но не обошлось без минусов. И так,
Плюсы UM24C:
+ поддержка QC2.0/3.0
+ отображение напряжения на линиях данных
+ измерение сопротивления кабелей
+ вход Micro USB
+ хороший экран и 4 кнопки
+ Bluetooth модуль для подключения к ПК
+ возможность строить и сохранять графики, управлять с ПК
+ очень хорошая точность для домашнего использования
Минусы:
— работа с графиками в ПО требует доработки (!)
— нет триггера QC2.0/QC3.0
— нет поддержки MTK PE и прочих подобных режимов от Samsung, Huawei и тд.
— ПО не работает под Windows XP (ну это лично для меня большой минус)
Плюсы нагрузки:
+ по всем параметрам превосходит спецификации, причем намного
+ действительно почти бесшумный вентилятор
+ доп. контакты для пайки крокодилов и выключателя
+ автовключение вентилятора
Минусы:
— регулятор потенциометра не очень удобен при выборе тысячной доли ампера, но это придирки с моей стороны:)
Ну и в конце видеоверсия обзора, где можно увидеть сами девайсы на руках, измерение сопротивления кабеля, изменение настроек и прочее:
В обзоре пойдёт речь о специфическом устройстве EBD-USB от ZKEtech, которое представляет из себя электронную нагрузку с функцией логирования. Такое устройство может понадобится как для тестирования купленного БП, так и для снятия показаний заряда\разряда аккумуляторов вашего устройства.
Бродя по просторам интернета, я заметил в продаже электронную нагрузку. Так как я искал нечто подобное, то перешёл по ссылке. Улыбнувшись миниатюрному вентилятору и не найдя потенциометра для управления нагрузкой, я уже было закрыл ссылку, но взгляд упал на надпись «ZKE». Я слышал ранее об этих ребятах, они выпускают грамотные устройства для тестирования аккумуляторов и зарядных устройств и гордятся своим универсальным ПО.
После изучения характеристик и прочтения пары обзоров оказалось, что устройство вышло недавно и получилось очень даже функциональным. Оно не только может выступать в качестве нагрузки, но и работать в режиме записи показаний напряжения и тока в линии, это если вам интересно увидеть как заряжается ваш смартфон. А, если применить паяльник, то можно подключать устройство для исследования заряда\разряда различных аккумуляторов.
К сожалению, но информации о устройстве не так и много. Официальный сайт имеется, но он, как вы понимаете, на китайском и очень скудный на информацию.
Я даже зарегистрировался на ThanksBuyer, но решил не рисковать и купить на Али, что мне помогло получить устройство за 15 предновогодних дней. Заказал 12 декабря, получил 27 декабря, шло через EMS China ePacket. (Заказал в ThanksBuyer другую железяку от ZKE, но они её до сих пор не отправили.)
Устройство пришло ко мне в шикарной упаковке. Картонная коробка габаритами с литровый пакет сока была под завязку забита пупырчатым полиэтиленом. К сожалению, при подготовке к празднованию Нового Года весь мусор был выброшен, так что фото не будет. Но продавцу за расторопность и упаковку я высказал свою благодарность.
Как устройство выглядит.
Как устройство подключается.
или
Схема устройства не сложная. Практически всё видно на фото. Шунт, ОУ OP213E, контроллер STM8S003F3P и PL 2303 для USB интерфейса. Увеличивайте фото и рассматривайте.
Технические характеристики:
Порты — USB 2.0
Мощность нагрузки — 25W
Измеряемое напряжение — 0.05-13.50V
Измеряемый ток — 0.05-4.000A
Напряжение питания 5V (micro USB)
Поддержка протоколов QC2.0, QC3.0, MTK-PE
Программное обеспечение.
В репозитории можно найти архив с английской версией программы EB V1.8 и драйвером на PL 2303 USB контроллер. После подключения устройства по micro USB и запуска соответствующего ПО — тестовый стенд готов. Далее нужно выбрать нужный порт устройства, в моём случае это COM12. После чего переключить устройство в режим «D-CC» либо «Meter».
Программа универсальна и поддерживает несколько устройств (нет возможности проверить).
Программа поддерживает калибровку устройства
Умеет указывать пределы графика, позволяет менять цвета оформления.
Предусматривает общение с источником питания для переключения питания по протоколам MTK PEP и QC 2.0 \ QC 3.0
Для QC 3.0 таблица напряжений выглядит так:
D- 0.0v D+ 0.6v = 5V out
D- 0.6v D+ 3.3v = 9V out
D- 0.6v D+ 0.6v = 12V out
D- 3.3v D+ 3.3v = 20V out
Я проверял осциллографом, никакой передачи данных кроме подачи напряжений не происходит.
Программа умеет измерять в двух режимах. Single Test и Auto Test.
В режиме Single Test вы выбираете тип измерений (D-CC или Meter), указываете нужный вам ток, ограничение по напряжению и времени.
В режиме Auto Test вы выбираете начальный ток, конечный ток, граничное напряжение, шаг изменения (в амперах и секундах\минутах).
Сохранение измерений.
Программа программа предлагает на выбор
— Save Curve сохраняет график в виде YY-MM-DD-HH-MM-SS-EBD-USB.bmp
— Save Picture сохраняет график с таблицей под ним в виде YY-MM-DD-HH-MM-SS-EBD-USB.bmp
— Save Data сохраняет график в виде YY-MM-DD-HH-MM-SS-EBD-USB-1-1.csv
Проверка работы на повербанке Orico Q1.
Повербанк идеален в данном случае, так как он под рукой и он умеет QC 2.0 (на вход и выход).
Заодно проверю его максимальные характеристики.
5V
9V
12V
Таблицу составлять не буду, просто укажу минимальные и максимальные данные:
старт 0.7A 5.09V стоп 2.46A 4.58V
старт 0.7A 8.67V стоп 2.21A 8.46V
старт 0.7A 11.5V стоп 1.7A 11.1V
И немножечко сравним показания с показаниями самого точного (в наличии у меня) тестера
Нагрев устройства.
Транзистор IRLZ44N вполне равномерно прижимается к радиатору через тонкую термопрокладку, а вентилятор очень тихий. Для проведения тестов я не подумал взять что-то, что выдаёт 4А на порту, так что буду греть током в 2.3А. Радиаторчик хлипкий и много от него ждать не стоит. При удобном случае я его сменю на что-то приличное. Так что тест провожу «для галочки». Измерения проводились термопарой на металлической части корпуса транзистора.
Температура окружающей среды на момент тестирования — 23С.
Температура полевика за минуту поднялась до 47С.
Через 15 минут она поднялась до 54С и удерживалась в этих пределах.
Устройство нагревается на 31 градус при 11.4W. Если в вашей комнате 35С и вы тестируете на всю катушку (25W) в течении продолжительного времени, тогда можно задуматься о смене радиатора.
Обновление прошивки устройства.
Производитель предлагает такую возможность в своём ПО, но не в моём случае. Закладка [Firmware update] не активна.
А теперь немножечко о последствиях бездумного использования.
У устройства EBD-USB есть режим работы измерения линии питания, (подразумевается, что ваша нагрузка включена в USB выход устройства). В этом случае вам ничего не стоит с задумчивым видом подать 9 или 12 вольт с зарядного на вашу нагрузку. Естественно, что это событие будет иметь последствия при очень странном сочетании:
— зарядное умеет QC 2.0 \ QC 3.0 \ MTK PEP
— потребитель не поддерживает QC 2.0 \ QC 3.0 \ MTK PEP
— вы соединили их сквозь EBD-USB
— устройство в режиме «D-CC»
— вы выбрали закладку «USB quick charge» и клацаете почём зря
Если устройство в режиме «Meter», то ПО игнорирует ваши нажатия на кнопки в меню «USB quick charge». Но мне и в этом режиме пару раз удалось переключить питание!
Резюме:
— программе требуются права администратора
— большое количество режимов тестирования
— ПО обновляется, есть список изменений
— в любом режиме измерений подсчитывает Capacity (mAh) и Power (mW)
— грамотная схемотехника, точные показания
— тестирование всего одного порта
— не всегда удобно вставлять габаритное устройство в испытуемые устройства
— теоретическая возможность спалить испытуемое устройство, договорившись за него с зарядным
— шум вентилятора минимален
— миниатюрный радиатор
— поддержка только USB 2.0
P.S. В обзоре повербанка Orico Q1 меня упрекали в том, что я не достаточно пристально протестировал технологию QC 2.0. И ещё не нравилась цена на повербанк. Так в этом обзоре я окончательно дотестировал повербанк. И завтра (ссылка висит на главной Ali) (07.01.2016), кроме всего прочего, на него будет цена $20.99. Надеюсь, теперь я вас удовлетворил?
Почитав вот этот пост и сопутствующую ему дискуссию, я решил попробовать внести ясность в то, что такое USB Power Delivery и как это работает на самом деле. К сожалению у меня сложилось впечатление, что большинство участников дискуссии воспринимают 100 ватт по USB слишком буквально, и не до конца понимают что за этим стоит на уровне схематики и протоколов.
Итак, кратко – основные пункты:
О кобелях Про кабели
USB Power Delivery работает с шестью типами коннекторов:
- USB 3.0 PD Standard-A USB 3.0 PD Standard-B plug
- USB 3.0 PD Standard-A USB 3.0 PD Micro-B plug
- USB 3.0 PD Micro-A USB 3.0 PD Micro-B plug
- USB 3.0 PD Micro-A USB 3.0 PD Standard-B plug
- USB 2.0 PD Standard-A USB 2.0 PD Standard-B plug
- USB 2.0 PD Standard-A USB 2.0 PD Micro-B plug
- USB 2.0 PD Micro-A USB 2.0 PD Micro-B plug
- USB 2.0 PD Micro-A USB 2.0 PD Standard-B plug
Про порты
После сертификации USB PD порты маркируются следующим образом:
Данное лого информирует о версии USB (2.0 или 3.0 SuperSpeed), а также о профилях электропитания которые поддерживает данный порт. Значение ”I” означает потребляемый профиль, необходимый для полноценного функционирования устройства, а значение «О» то какой профиль порт может предоставить. Примеры маркировки портов:
- Первый порт поддерживает USB2. Он может давать питание по Профилю 1 ( 2A@5V) и использует Профиль 3 ( 5V@2A или 12V@3A) для полноценного функционирования. Например порт для планшета или нетбука.
- Второй порт поддерживает USB2. Он может давать питание по Профилю 2 (2A@5V или 12V@1.5A) и использует Профиль 4 ( 5V@2A или 12V@3A или 20V@3A) для полноценного функционирования. Например порт для ноутбука или лаптопа.
- Третий порт поддерживает USB3. Он только дает питание по Профилю 1 (5V@2A). Сам он по VBus не запитывается. Например порт десктопа, монитора, телевизора, и т.д.
- Четвертый порт поддерживает USB3. Как и в первом примере он может давать питание по Профилю 1 (5V@2A) и сам требует питание по Профилю 3 для полноценного функционирования (5V@2A или 12V@3A). Пример придумайте сами :)
Физический канал
USB PD определяет принципиальную схему физической организации соединения посредством кабеля следующим образом:
Как видно из схемы, USB PD также требует чтобы и в источнике и в приемнике были реализованы схемы определения падения/скачка напряжения, а так же методы определения разряженной батареи для случаев когда одна из сторон не может запитаться от своего внутреннего источника.
И соответственно такая же блок-схема для приемника:
Сериализированная кодировка 4b5b и декодировка 5b4b подразумевает что все данные по шине, кроме преамбулы пакета, передаются пятибитными последовательностями в соответствии c таблицей кодировки, определяемой стандартом. Каждая такая последовательность кодирует либо одну из 16 цифр (0x00..0x0F), либо сигналы начала / синхронизации / сброса и конца пакета. Таким образом передача одного байта занимает 10 бит, 16-битного слова – 20 бит и 32-битного двойного слова – 40 бит и т.д.
Логический канал
USB PD протокол основывается на последовательных парах типа запрос-ответ. Запросы и ответы пересылаются с использованием пакетов. Пакеты состоят из преамбулы (фаза подготовки к передаче), начала пакета SOP (три сигнала Sync-1 и завершающий Sync-2 в кодировке 4b5b), заголовок, 0..N байт полезной нагрузки, контрольной суммы (CRC-32) и сигнала конца пакета (одиночный сигнал EOP):
Как было упомянуто выше, преамбула не кодируется в 4b5b. SOP, CRC и EOP кодируются 4b5b на физическом уровне, заголовок и полезная нагрузка кодируются на уровне логического протокола.
Сброс шины производится путем посылки трех сигналов RST1 и завершающего сигнала RST2, в соответствии с кодировкой 4b5b.
Протокол
Отдельно следует упомянуть что поля вида tSourceActivity, tSinkRequest и т.д. — это константы, значения которых глобально заданы самой спецификацией в отдельной главе. Сделано это потому что они определялись опытным путем в результате прототипирования, и найденные оптимальные значения просто подставили в отдельную главу, чтобы не рыскать по всей спецификации.
- Power Data Object (PDO) – используется для описания характеристик порта источника или требований приемника
- Request Data Object (RDO) – используется портом приемника для установки соглашения по характеристикам электропитания
- BIST (Built In Self Test) Data Object (BDO) – используется для тестирования подключения на соответствие требованиям спецификации для физического соединения
- Vendor Data Object (VDO) – используется для передачи нестандартной, дополнительной или иной проприетарной информации определяемой производителем оборудования и выходящей за рамки спецификации USB PD.
PDO соответствующий элементу с постоянным типом электропитания 5V всегда должен идти первым в цепочке объектов.
Структура объекта PDO:
Для каждого типа электропитания предлагаются различные характеристики.
Постоянный тип электропитания, напряжение постоянное. Источник должен иметь хотя бы один такой элемент:
Программируемый тип электропитания, напряжение может регулироваться путем запросов в пределах между минимальным и максимальным:
Вариативный тип электропитания, напряжение может изменяться в заданных пределах абсолютного минимума и абсолютного максимума, но не может регулироваться:
Батарея, данный тип используется для обозначения батарей которые могут быть напрямую подключены к линии VBus:
Структура объекта RDO:
На мой взгляд данной информации достаточно, чтобы получить хорошее представление о принципах работы USB Power Delivery. Я сознательно не стал углубляться в дебри, связанные с таймерами, счетчиками и обработкой ошибок.
Взаимодействие с традиционным USB
Как уже было упомянуто выше, Power Delivery – это самостоятельная подсистема, которая функционирует параллельно и независимо от канонического USB. Тем не менее, в случаях когда устройства реализуют оба протокола – и USB и Power Delivery, спецификация рекомендует реализацию т.н. System Policy Manager или SPM, компонента который может контролировать оборудование USB PD посредством традиционных запросов USB.
Для систем с поддержкой SPM, спецификация рекомендует предоставить PD информацию посредством специальных типов USB дескрипторов. Не считаю нужным в них детально углубляться, просто перечислю их названия:
- Power Delivery Capability Descriptor, является составной частью BOS дескриптора и сообщает о том поддерживает ли устройство зарядку батареи через USB, поддерживает ли оно стандарт USB PD, может ли оно выступать источником питания, и может ли оно быть приемником. Кроме того данный дескриптор содержит информацию о количестве портов-источников, портов-приемников и версии поддерживаемых спецификаций USB Battery Charging и Power Delivery.
- Battery Info Capability Descriptor, требуется для всех устройств заявивших батарею в качестве одного из элементов электропитания. Содержит информацию о названии, серийном номере и производителе батареи, ее емкости, а также о пороговых значениях тока в заряженном и разряженом состоянии.
- PD Consumer Port Capability Descriptor, требуется для всех устройств которые заявили поддержку хотя бы одно порта-приемника. Содержит информацию о поддержке стандартов Power Delivery и Battery Charging, минимальное и максимальное напряжение, операционную мощность, максимальную пиковую мощность и максимальное время, которое оно может эту пиковую мощность потреблять
- PD Provider Port Capability Descriptor, требуется для всех устройств которые заявили поддержку хотя бы одного порта-источника питания. Содержит информацию о поддержке стандартов Power Delivery и Battery Charging, а так же список всех PDO объектов, характеризующих элементы электропитания доступных устройству.
- PD Power Requirement Descriptor, требуется для всех устройств-приемников поддерживающих USB PD. Каждое устройство должно возвращать хотя бы один такой дескриптор в составе дескриптора конфигурации. Этот дескриптор должен идти сразу после первого дескриптора интерфейса. В случае когда их несколько, он должен идти после каждого первого дескриптора интерфейса функции, если используется IAD, или в случае композитного устройства без IAD, непосредственно после каждого дескриптора интерфейса, и до endpoint дескрипторов.
Заключение
Надеюсь что данным постом я подогрел интерес публики к USB Power Delivery. Скромно замечу, что автор имеет непосредственное отношение к данной спецификации, поэтому готов ответить на любые вопросы по Power Delivery в частности и USB в общем.
Всех приветствую. Сегодня хочу поделиться опытом и всё-таки по-моему внятно объяснить про такой, на первый взгляд, простой стандарт для USB 2.0 хост-контроллера.
Изначально можно представить себе что USB 2.0 порт — это всего лишь 4 пина, по двум из которых просто передаются данные(Как, к примеру, COM-порт), но самом деле всё не так, и даже совсем наоборот. USB-контроллер в принципе не даёт нам возможности передавать данные как через обычный COM-порт. EHCI — довольно замысловатый стандарт, который позволяет обеспечить надежную и быструю передачу данных от софта до самого девайса, и в обратную сторону.
Возможно, вам пригодиться эта статья, если, к примеру, вы не имеете достаточных навыков написания драйверов и чтение документации к хардвейру. Простой пример: хотите написать свою ОС для мини-ПК, дабы какая-нибудь винда или очередной дистрибутив линукса не загружали железо, и вы использовали всю его мощь исключительно в своих целях.
Станет ли стандарт USB4 повсеместным
Да, но не в ближайшие годы. Главная проблема заключается в том, что USB4 отстал от старта внедрения портов Type-С в гаджетах разных производителей.
Для поддержки USB4 потребуется полное обновление всех линеек выпускаемых продуктов и аксессуаров к ним.
Ни одна компания не будет стремиться к массовой поддержке USB4, вместо этого произойдет плавный планомерный переход на новую технологию. Это может затянуться на 5-7 лет.
В любом случае USB4 должен привести к единому знаменателю большое количество используемых сегодня USB стандартов и соответствующих им портов.
Стандарт USB4 позволит установить минимальную скорость передачи данных на уровне 20 Гб/с. Это будет касаться как гаджетов, так и аксессуаров (кабелей, переходников, внешних накопителей).
Внедрение USB4 сделает возможным двустороннюю зарядку гаджетов. Например, PowerBank может заряжать ноутбук и ноутбук сможет заряжать “банку” без переключения портов и кабелей.
Поддержка USB4 перенесет крутую фишку Apple в другие компьютеры. Сейчас MacBook можно подключать к монитору с Type-С портом, через который будет выводиться изображение и передаваться заряд на компьютер.
Повсеместное внедрение USB4 позволит делать это с любым компьютером и любым монитором.
Что такое EHCI
Что же, давайте начнем. EHCI — Enhanced Host Controller Interface, предназначен для передачи данных и управляющих запросов USB-устройствам, и в другую сторону, а в 99% случаев — является связующим звеном, между каким-либо софтом и физическим устройством. EHCI работает как PCI-устройство, а соответственно использует MMIO(Memory-Mapped-IO) для управления контроллером(да-да, я знаю, что некоторые PCI-девайсы используют порты, но тут я всё обобщил). В документации от Intel описан лишь принцип работы, и никаких намеков на алгоритмы, написанные хотя бы на псевдокоде, нет вовсе. EHCI имеет 2 типа MMIO-регистров: Capability и Operational. Первые служат для получения характеристик контроллера, вторые же — для его управления. Собственно, прикреплю саму суть связи софта и EHCI контроллера:
Каждый EHCI контроллер имеет несколько портов, каждому из которых могут быть подключены какие-либо USB-устройства. Так же, прошу заметить, что EHCI является улучшенной версией UHCI, который так же был разработан Intel на несколько годов раньше. Для обратной совместимости любой UHCI/OHCI контроллер, который имеет версию ниже, чем EHCI, будет компаньоном к EHCI. К примеру, у вас есть USB-клавиатура(А большинство клавиатур года так до сих пор были именно такими), которая работает на USB 1.1(заметим, что максимальная скорость работы USB 1.1 — 12 мегабит в секунду, а FullSpeed USB 2.0 имеет пропускную способность аж в 480 мбит/сек), а у Вас имеется компьютер с USB 2.0 портом, при подключении клавиатуры к компьютеру хост-контроллер EHCI как ни как будет работать с USB 1.1. Данная модель показана на следующей схеме:
Так же на будущее хочу сразу предупредить, что Ваш драйвер может работать не правильно из-за такой вот нелепой ситуации: вы инициализировали UHCI, а после чего EHCI, при этом добавили два одинаковых устройства, поставили в регистр порта бит Port Owner Control, после чего UHCI перестал работать, из-за того, что EHCI автоматически перетягивает порт на себя, а порт на UHCI перестаёт откликаться, эту ситуацию надо отслеживать.
Так же, давайте рассмотрим схему, показывающую саму архитектуру EHCI:
Справа написано про очереди — о них чуть позже.
Что такое EHCI
Что же, давайте начнем. EHCI — Enhanced Host Controller Interface, предназначен для передачи данных и управляющих запросов USB-устройствам, и в другую сторону, а в 99% случаев — является связующим звеном, между каким-либо софтом и физическим устройством. EHCI работает как PCI-устройство, а соответственно использует MMIO(Memory-Mapped-IO) для управления контроллером(да-да, я знаю, что некоторые PCI-девайсы используют порты, но тут я всё обобщил). В документации от Intel описан лишь принцип работы, и никаких намеков на алгоритмы, написанные хотя бы на псевдокоде, нет вовсе. EHCI имеет 2 типа MMIO-регистров: Capability и Operational. Первые служат для получения характеристик контроллера, вторые же — для его управления. Собственно, прикреплю саму суть связи софта и EHCI контроллера:
Каждый EHCI контроллер имеет несколько портов, каждому из которых могут быть подключены какие-либо USB-устройства. Так же, прошу заметить, что EHCI является улучшенной версией UHCI, который так же был разработан Intel на несколько годов раньше. Для обратной совместимости любой UHCI/OHCI контроллер, который имеет версию ниже, чем EHCI, будет компаньоном к EHCI. К примеру, у вас есть USB-клавиатура(А большинство клавиатур года так до сих пор были именно такими), которая работает на USB 1.1(заметим, что максимальная скорость работы USB 1.1 — 12 мегабит в секунду, а FullSpeed USB 2.0 имеет пропускную способность аж в 480 мбит/сек), а у Вас имеется компьютер с USB 2.0 портом, при подключении клавиатуры к компьютеру хост-контроллер EHCI как ни как будет работать с USB 1.1. Данная модель показана на следующей схеме:
Так же на будущее хочу сразу предупредить, что Ваш драйвер может работать не правильно из-за такой вот нелепой ситуации: вы инициализировали UHCI, а после чего EHCI, при этом добавили два одинаковых устройства, поставили в регистр порта бит Port Owner Control, после чего UHCI перестал работать, из-за того, что EHCI автоматически перетягивает порт на себя, а порт на UHCI перестаёт откликаться, эту ситуацию надо отслеживать.
Так же, давайте рассмотрим схему, показывающую саму архитектуру EHCI:
Справа написано про очереди — о них чуть позже.
Capability регистры
По смещению 2 лежит регистр HCIVERSION — номер ревизии данного HC, который занимает 2 байта и содержит BCD версию ревизии (что такое BCD можно узнать из википедии).
По смещению +4 лежит регистр HCSPARAMS, его размер — 2 слова, он содержит структурные параметры устройства и его биты показывают следующее:
- Бит 16 — Port Indicators — доступные световые индикаторы для подключенных USB-устройств.
- Биты 15:12 — номер контроллера-компаньона, который присвоен данному контроллеру
- Биты 11:8 — количество портов у компаньон-контроллера
- Бит 7 — Port Routing Rules — показывает, как данные порты привязаны к компаньон-портам
- Бит 4 — Port Power Control — показывает, надо ли включать питание каждому порту, 0 — питание подаётся автоматически
- Биты 3:0 — количество портов у данного контроллера.
- По смещению +8 лежит регистр HCCPARAMS — показывает параметры совместимости, его биты значат следующее:
- Бит 2 — доступность асинхронной очереди,
- Бит 1 — доступность периодической (последовательной) очереди
- Бит 0 — 64-битная совместимость
Регистры EHCI контроллера
Для начала хочется еще раз уточнить, что через данные регистры вы будете управлять вашим устройством, поэтому они очень важны — да и без них программирование EHCI невозможно.
Для начала вам надо получить адрес MMIO, который выдан данному контроллеру, по смещению +0x10 будет лежать адрес наших долгожданных регистров. Есть одно но: сначала идут Capability регистры, а только после них — Operational, поэтому по смещению 0(от предыдущего адреса, который мы получили по смещению 0x10 относительно начала MMIO нашего EHCI) лежит один байт — длина Capability-регистров.
Последовательный список
Последовательный(Периодичный, Pereodic) список устроен следующим образом:
Как видно на схеме, обработка начинается с получения нужного фрейма из фрейм листа, каждый его элемент занимает 4 байта и имеет следующую структуру:
Как видно на картинке, адрес очереди/трансфер дескриптора выровнен по границе 32 байта, бит 0 означает то, что хост-контроллер не будет обрабатывать данный элемент, биты 3:1 показывают тип того, что будет обрабатывать хост-контроллер: 0 — изосинхронный TD(iTD), 1 — очередь, 2 и 3 в данной статье я рассматривать не буду.
Чем отличается USB4 от USB 3.2
Именно USB 3.2 gen 2х2 является последней распространенной ревизией используемого универсального стандарта. С ним и сравним новый USB4.
Максимальная скорость передачи данных вырастет в два раза. USB 3.2 может выдавать до 20 Гб/с, а USB4 – до 40 Гб/с.
Используемый сегодня стандарт позволяет через один порт выводить изображение на один монитор с разрешением до 4K. Новый USB4 сможет передавать по одному порту картинку сразу для двух 4K дисплеев.
Одновременной с передачей сигнала на два монитора USB4 позволит передавать данные и осуществлять зарядку гаджета.
Еще новый стандарт включает поддержку внешних видеокарт eGPU.
Стандарт USB4 по многим параметрам схож с Thunderbolt 3. Вот только поддержка Thunderbolt 3 есть не во всех USB 3.2 девайсах, а для USB4 это уже необходимый минимум .
Голова очереди
Голова очереди(Queue Head) имеет следующую структуру:
Queue Head Horizontal Link Pointer — указатель на следующую очередь, биты 2:1 имеют следующие значения в зависимости от типа очереди:
Endpoint Capabilities/Characteristics — характеристики очереди:
- Биты 26:16 содержат максимальный размер пакета для передачи
- Бит 14: Data Toggle Control — показывает, где хост-контроллер должен брать изначальное значение Data Toggle, 0 — игнорирует бит DT в qTD, сохраняет бит DT для головы очереди.
- Бит 13:12 — характеристики скорости передачи:
- Биты 11:8 — номер конечной точки, к которой выполняется запрос
- Биты 6:0 — адрес устройства
- Биты 29:23 — номер Хаба
- Биты 22:16 — адрес Хаба
Переходим к самому интересному.
Что с обратной совместимостью
Основным приоритетом стандарта USB всегда была обратная совместимость. Не по форме коннектора, а по возможности соединять устройства с USB пусть даже при помощи переходников.
Официально USB4 будет совместим со всеми предшественниками вплоть до USB 2.0. При таком подключении потребуется переходник для соединения портов USB Type-A и USB Type-C, а передача данных будет осуществляться на максимальной скорости USB 2.0 (до 480 Мбит/с).
Устройства с портами Type-C и стандартами USB 3.1/3.2 будут работать без переходников, а максимальная скорость передачи данных достигнет 10 и 20 Гбит/с, соответственно.
Гаджеты с поддержкой USB4 будут требовать соответствующие кабели для достижения максимально возможной скорости передачи данных. Другими словами, все имеющиеся на сегодняшний момент “шнурки” или хабы Type-C не поддерживают скорости USB4 .
Насчет совместимости с Thunderbolt 3 не все так гладко. USB4 может иметь обратную совместимость с Thunderbolt 3, но это не является обязательным требованием.
Компания Intel с марта прошлого года предоставила возможность бесплатно использовать спецификации Thunderbolt 3, но за использование названия стандарта придется платить отчисления.
Любой производитель, который захочет рекламировать свое устройство с USB4 в качестве совместимого с Thunderbolt 3, будет обязан проходить сертификацию в Intel.
Скорее всего, общая масса устройств не будет полностью совместима с Thunderbolt 3, а некоторые совместимые гаджеты не будут рекламировать и официально объявлять такую возможность.
Отсутствие поддержки Thunderbolt 3 может сделать невозможным использование каких-либо общих фишек этих стандартов, вроде подключения eGPU или пары 4K-мониторов на один порт.
Как смогут питаться и заряжать гаджеты по USB4
Устройства с USB4 портами будут полностью поддерживать технологию USB Power Delivery (USB PD). Это значит, что через порт можно будет осуществлять питание потребителя до 100 Вт.
Вот основные особенности USB PD:
▪️ технология разделяет пять профилей электропитания: 5В 2А, 12В 1.5А, 12В 3А, 12-20В 3А и 12-20В 4-5А.
▪️ для поддержки технологии нужны не только два устройства с соответствующими портами, но и поддерживающий Power Delivery кабель с дополнительными контактами (обычные кобели смогут работать только по профилю 5В 2А)
▪️ при подключении совместимые устройства обмениваются данными по специальному протоколу, который работает параллельно с USB
▪️ источник и приемник могут “договариваться” об используемой силе тока и напряжении, отключать передачу энергии и даже меняться местами
Так при помощи USB Power Delivery можно получать быструю зарядку в зависимости от возможностей передатчика и потребностей приемника.
Технология USB PD уже применяется в технике Apple. Начиная с iPad Pro 12.9 2015 года выпуска, iPhone 8 и iPhone X все устройства поддерживают протокол Power Delivery при использовании оригинальных или MFI кабелей USB-C > Lightning.
Смартфоны Apple способны заряжать до 50% емкости аккумулятора за 30 минут, если подключать их к мощным адаптерам от MacBook или iPad на 18, 29, 30, 61 или 87 Вт.
Асинхронная очередь
Хост контроллер обрабатывает данную очередь только тогда, когда фрейм последовательный пустой, либо хост-контроллер обработал весь последовательный список.
Асинхронная очередь представляет собой указатель на очередь, где содержатся другие очереди, которые нуждаются в обработке. Схема:
Operation регистры
По смещению 0 лежит регистр USBCMD — командный регистр контроллера, его биты означают следующее:
- Биты 23:16 — Interrupt Threshold Control — показывает сколько микро-фреймов будет использоваться на один обычный фрейм. Чем больше, тем быстрее, но если больше 8 — то микро-фреймы будут обрабатываться с той же скоростью, что и для 8.
- Бит 6 — прерывание после каждой транзакции в асинхронной очереди,
- Бит 5 — используется ли асинхронная очередь,
- Бит 4 — использование последовательной очереди,
- Биты 3:2 — размер FrameList'a (о этом — дальше). 0 означает 1024 элемента, 1 — 512, 2 — 256, 3 — зарезервировано
- Бит 1 — устанавливается для выполнение сброса хост-контроллера.
- Бит 0 — Run/Stop
- Бит 15 показывает используется ли асинхронная очередь
- Бит 14 показывает используется ли последовательная очередь,
- Бит 13 — показывает, что обнаружена пустая асинхронная очередь,
- Бит 12 установлен в 1, если при обработке транзакции произошла ошибка, тогда хост-контроллер остановит выполнение всех очередей.
- Бит 4 установлен в 1, если произошла серьезная ошибка, хост-контроллер останавливает выполнение всех очередей.
- Бит 3 FrameList (Регистр) Rollover — ставится в 1, когда хост-контроллер обработал весь frameList.
- Бит 1 — USB Error Interrupt — генерировать ли прерывание при ошибках?
- Бит 0 — USB Interrupt — выставляется после успешной обработки транзакции, если в TD был установлен IOC
По смещению +8 лежит регистр USBINTR — регистр включения прерываний
Чтобы долго не писать, и тем более, Вам долго не читать, значения битов данного регистра можно посмотреть в спецификации, ссылка на неё будет оставлена внизу. Сюда я просто записываю 0, т.к. абсолютно не имею желания писать обработчики, мапить прерывания и т.п., так что это я считаю почти что абсолютно бессмысленным.
По смещению +12(0x0C) лежит регистр FRINDEX, в котором просто лежит текущий номер фрейма, при чем, хочу заметить, что последние 4 бита показывают номер микро-фрейма, в старшие 28 — номер фрейма (так же значение не обязательно меньше размера frameList'а, если вам нужен индекс — лучше брать его с маской 0x3FF(или же 0x1FF, и т.п.).
Регистр CTRLDSSEGMENT лежит по смещению +0x10, он показывает хост-контроллеру старшие 32 бита адреса листа фреймов.
Регистр PERIODICLISTBASE имеет смещение +0x14, в него вы можете положить младшие 32 бита листа фреймов, заметим, что адрес должен быть выравнен по размеру страницы памяти (4096).
Регистр ASYNCLISTADDR имеет смещение +0x18, в него вы можете положить адрес асинхронной очереди, заметим, что он должен быть выравнен по границе 32 байта, при этом должен находиться в первых четырех гигабайтах физической памяти.
Регистр CONFIGFLAG показывает, настроено ли устройство. Вы должны выставить бит 0 после завершения настройки устройства, он имеет смещение +0x40.
Перейдем к регистрам портов. Каждый порт имеет свой командно-статусный регистр, каждый регистр порта располагается со смещением +0x44 + (PortNumber — 1)*4, его биты значат следующее:
- Бит 12 — питание порта, 1 — питание подаётся, 0 — нет.
- Бит 8 — Port Rest — устанавливается для сброса устройства.
- Бит 3 — Port Enable/Disable Change — выставляется при изменении статуса «включенности» порта.
- Бит 2 — порт включен/не включен.
- Бит 1 — Изменение статуса подключения, ставится в 1, к примеру, если вы подключили, или отключили USB устройство.
- Бит 0 — статус подключения, 1 — подключено, 0 — нет.
Структуры передачи данных и запросов
Организация структуры для обработки запросов включает в себя очередь и трансфер дескрипторы(TDs).
На данный момент мы рассмотрим только 3 структуры.
qTD(Queue Element Transfer Descriptor)
Данный TD имеет следующую структуру:
Next qTD Pointer — указатель на продолжение очереди для обработки(для Horizontal Execution), бит 0 Next qTD Pointer'а показывает, то, что дальше нет еще одной очереди.
qTD Token — токен TD, показывает параметры передачи данных:
- Бит 31 — Data Toggle (об этом дальше)
- Биты 30:16 — количество данных для передачи, после завершения транзакции их значение уменьшается на количество переданных данных.
- Бит 15 — IOC — Interrupt On Complete — вызвать прерывание после завершения обработки дескриптора.
- Биты 14:12 показывают номер текущего буфера, в который/из которого производиться обмен данными, об этом далее.
- Биты 11:10 — допустимое количество ошибок. Данная таблица показывает, когда счетчик количества ошибок уменьшается:
Какая скорость передачи данных у USB4
Уже сейчас известно минимум о трех минимальных скоростных пределах стандарта USB4.
Самый скромный показатель – 10 Гб/с. Такая скорость станет минимальным порогом USB4 и будет нужна исключительно для работы в режиме обратной совместимости с портами предыдущих поколений.
В организации USB-IF заявили, что разъемов с такой низкой скоростью и сертификацией USB4 быть не должно.
Скорее всего, нижним порогом скорости будет 20 Гб/с. На данный момент производители называют этот стандарт USB4 Gen 2×2.
Максимальную скорость у первого поколения протокола зафиксируют на уровне 40 Гб/с. Сейчас такой стандарт принято называть USB4 Gen 3×2.
Скорее всего, к началу продаж моделей с USB4 названия поколений приведут к более понятному для покупателей формату.
Почему мы ждем USB4 в новых iPhone и MacBook
Компания Apple является первопроходцем во многих сферах. Именно купертиновцы первыми из производителей компьютеров массово перешли на использование Type-С портов.
Все началось с 12-дюймового MacBook в 2015 году, а позже вся профессиональная линейка MacBook Pro избавилась от других разъемов на корпусе в пользу Type-C.
Еще в 2018 году новый разъем появился в iPad Pro и все ждали переход с Lightning на Type-С в линейке iPhone прошлой осенью. Вероятно, тогда Кук и компания притормозили, чтобы выдать iPhone сразу с поддержкой USB4.
Оснащать свои гаджеты новой фишкой можно начать уже с июня (на новых Mac) или с сентября (на iPhone 12).
Во-первых, купертиновцам пора устанавливать одинаковые порты во всех выпускаемых гаджетах. Начать лучше с самого продаваемого устройства – iPhone.
Сейчас есть Lightnung и Type-C, но разъемы USB отличаются параметрами в зависимости от устройства. Где-то это банальные USB 3, где-то с поддержкой Thunderbolt 2 или 3. Логичнее начать массовый переход на Type-С с USB4.
Во-вторых, наличие скоростного USB4 позволит максимально быстро переносить данные. Это касается как связки iPhone – Mac, так и пары смартфонов или планшетов. А еще, наконец-то, можно будет подключать iPhone к MacBook без покупки дополнительного “шнурка”.
В-третьих, наличие USB4 с технологией Power Delivery позволит заряжать от смартфона другие гаджеты. iPad уже давно так умеет.
Сам iPhone будет заряжаться настолько быстро, насколько позволит источник питания с Power Delivery.
Технология USB4 станет отличной фишкой как для обновленных MacBook, так для нового iPhone 12.
В закладки
Драйвер EHCI
Начнем с того, какие запросы может выполнять EHCI. Есть 2 типа запросов: Control — а-ля команд, и Bulk — к конечным точкам, для обмена данными, к примеру, абсолютное большинство флешек(USB MassStorage) использует тип передачи данных Bulk/Bulk/Bulk. Мышь и клавиатура для передачи данных тоже используют Bulk — запросы.
Инициализируем EHCI и настраиваем асинхронную и последовательные очереди:
Собственно, код для сброса порта в изначальное состояние:
Control-запрос к устройству:
Код обработки очереди:
И теперь запрос к конечной точке(Bulk-запрос)
Думаю, что тема достаточно интересная, в интернете на русском документаций, описаний и статей на эту тему почти нет, а если есть — очень размыто. Если интересна тема работы с железом и разработки ОС, то есть много чего рассказать.
В закладки
29 августа 2019 года некоммерческая организация USB-IF опубликовала новый стандарт универсальной последовательной шины USB4.
Обратите внимание, что название правильно пишется без пробела, в отличие от предыдущих версий.
Сейчас разберемся во всех особенностях нового стандарта и узнаем, чем он отличается от своего предшественника.
Читайте также: