Ite power delivery driver что это
Рынок подгоняет технологии. Разъём USB Type-C всё активнее входит в нашу жизнь, а за ним и стандарт USB Power Delivery. Например, компания компания Apple встроила поддержку USB Power Delivery во все свои основные продукты. Совсем недавно устройства для тестирования и анализа поддержки USB Power Delivery можно было пересчитать по пальцам. В основном это специализированные устройства с очень высокой ценой. Но с появлением молодой компании ChargerLAB всё быстро изменится. Как я поняли, её основали владельцы портала Chongdiantou — это популярный китайский портал, посвящённый теме питания гаджетов — всевозможные обзоры устройств (блоки питания, зарядные устройства, внешние аккумуляторы), тесты, разборы и пр. Эти ребята выпустили серию тестеров POWER-Z с поддержкой USB Power Delivery 3.0 (в том числе и Qualcomm Quick Charge 4.0). Тестеры могут выступать в роли триггеров для принудительной активации любых режимов USB Power Delivery. Вот сегодня о двух тестерах из серии я кратко вам и расскажу — KT001 и KM001.
Этот краткий обзор может быть полезен сервисным инженерам, тестировщикам, авторам обзоров гаджетов. Обычным потребителям обзор будет не очень понятен, да и не особо интересен. Лично мне эти тестеры нужны для дальнейших обзоров гаджетов (уже сейчас часть современных поддерживает USB Power Delivery, а с каждым днём их будет всё больше). Один из будущих обзоров — это масштабный обзор/гид по выбору кабелей USB Type-C <> USB Type-C известных и не очень китайских брендов.
Характеристики
Комплектация и внешний вид
Тестеры поставляются в коробках из мягкого картона.
В коробках жестяные боксы.
В боксах сами тестеры.
Модель KT001 крупнее. На обратных сторонах нанесена памятка по портам.
На торцах входы и выходы USB A.
На нижней грани KM001: USB Type-C (вход) до 5 А, micro-USB (вход) до 3 А, USB Type-C (выход) до 5 А. KT001: USB Type-C (вход) до 6 А, физический переключатель активации триггера USB PD.
На верхней грани KM001: micro-USB (независимое питание и подключение к компьютеру), три кнопки управления. KT001: USB Type-C (выход) до 6 А, рычажок управления (три положения).
В самих тестерах нет электронной нагрузки. Т.е. используйте ту, которая вам подходит в конкретной ситуации. Я пользуюсь такими бытовыми:
В обзоре я буду использовать внешний аккумулятор ZMI QB820 (его обзор я уже делал) и блок питания Xiaomi USB-C 45 Вт. Оба с поддержкой USB PD.
ChargerLAB POWER-Z KT001
На основном экране можно переключаться между разными типами отображения (3 вида с разным набором данных). Делается это одинарным нажатием на рычажок.
Если нажать и удерживать рычажок на главном экране, то откроется меню настроек.
Возврат или отмена осуществляется двойным нажатием рычажка.
Если на главном экране нажать рычажок вправо, то откроется меню сохранённых измерений и графиков. Я на этом не буду останавливаться, т.к. для этих целей лучше подходит компьютерное ПО тестера, а ещё лучше ПО нагрузки с компьютерным управлением. Если удерживать рычажок в правом положении, то можно вращать отображение (4 стороны) для удобства.
Если удерживать рычажок в левом положении на главном экране, то можно запустить процедуру тестирования сопротивления кабелей. Нужно просто следовать подсказкам на экране, какое именно физическое действие нужно выполнить на конкретном этапе.
Если нажать влево на главном экране, то откроется меню тестирования поддержки технологий быстрой зарядки и управление триггерами.
Вот для примера автоматический тест поддержки функций быстрой зарядки (кроме USB PD, они в отдельном меню) для ZMI QB820:
При необходимости можно активировать триггер для поддерживаемых функций.
Функция анализа USB PD отобразит версию и поддерживаемые режимы работы. Принудительно (триггер) можно активировать любой режим.
Тестер умеет строить графики напряжения и силы тока. Частота опроса до 100 раз в секунду (можно менять), т.е. в некоторых случаях даже вполне подходит для измерения пульсаций.
При подключении к компьютеру все данные можно снимать с помощью специальной программы для KT-тестеров. В этой же программе можно обновлять прошивку тестера.
Ну, и важный компонент программы — сниффер USB PD. Можно анализировать «общение» между USB PD устройствами.
ChargerLAB POWER-Z KM001
Этот тестер немного проще. Переключение между режимами работы и отображением осуществляется двумя правыми кнопками. Левая кнопка выбора, вызова дополнительных функций текущего режима, настроек режима и пр.
Есть режим отображения графика напряжения и силы тока. Частота опроса на выбор до 100 раз в секунду.
Анализ функций быстрой зарядки не очень информативный. Для QC 2.0 и 3.0 доступны триггеры.
Можно посмотреть информацию по доступным режимам USB PD.
И тут же принудительно включать для них триггер.
При подключении к компьютеру все данные можно снимать с помощью специальной программы. Программы для KM001 и KT001 разные. В этой же программе можно обновлять прошивку тестера.
А вот сниффер можно активировать только за дополнительную плату. И он на китайском языке.
Физический уровень
Пример двоичной частотной манипуляции (BFSK)
Такой вид передачи довольно помехоустойчив, так как помеха искажает в основном амплитуду сигнала, а не частоту. В последней редакции стандарта USB PD 3.0 BFSK больше не используется, и описание этого механизма передачи исключено из спецификации.
В последней на текущий момент ревизии 3.0 USB Power Delivery поддерживается только Biphase Mark Code (BMC). Передача данных происходит по одному из СС-контактов. Информационный обмен идёт в режиме полудуплекс с предотвращением коллизий и с 4b5b-кодированием для баланса постоянного тока.
BMC представляет собой версию манчестерского кодирования. Логический 0 соответствует отсутствию переключения в середине битового интервала, логическая 1 – наличию переключения. На границе интервалов переключение происходит всегда. Частота сигнала составляет 300 kHz ± 10 %.
Пример Biphase Mark Coding (BMC)
Когда используется Power Delivery, и что происходит при установлении соединения между блоком питания и устройством
В прошлый раз я рассказывал про минимальный набор компонентов, который может быть включён в устройство для поддержки базовых функций USB-C. Но бывают ситуации, когда этих базовых возможностей недостаточно – например, нужно использовать несколько профилей напряжения, чтобы блок питания от одного устройства подходил к другому. Или же есть необходимость подстроить сами профили. Или просто нужна бОльшая мощность питания (в случае с USB-C доступный максимум – 15 Вт). Во всех этих ситуациях на помощь придёт стандарт Power Delivery. Он, например, используется в линейке зарядных устройств Apple – профили с бОльшим напряжением доставляют бОльшую мощность к устройству и позволяют его быстро заряжать. В нашем смарт-экране SberPortal есть узлы, которые требуют значительной мощности питания – прежде всего это высокопроизводительная система на кристалле (SoС) и акустика. Один только звук требует около 30 Вт. Поэтому при разработке устройства пришлось усложнить систему питания и реализовать Power Delivery. Об этом стандарте и пойдёт ниже речь.
Также разберёмся в его особенностях и посмотрим, как со временем изменился способ передачи данных в стандарте. А ещё я расскажу и покажу с помощью анализатора протокола, что происходит при установлении подключения в устройствах, на примере ноутбука с Power Delivery. Затем посмотрим, как мы реализовали PD в нашем смарт-экране SberPortal.
Варианты аппаратной реализации USB Type-C, или Когда не требуется Power Delivery
Когда мы в SberDevices делаем новое устройство, работаем над его аппаратной частью, перед нами встаёт вопрос выбора интерфейсов. Важным моментом при выборе является их доступность и совместимость с другими устройствами.
В своих устройствах мы не могли пройти мимо интерфейса USB-C. Помимо того, что он очень популярен в современных девайсах, он серьёзно расширил функциональность USB по сравнению со своими предшественниками. Давайте расскажу о нём поподробнее.
Краткий обзор особенностей USB TYPE-C
Стандарты USB существуют много лет, развиваются и совершенствуются по мере увеличения технологических потребностей и возможностей. Несмотря на свою универсальность, которая следует из аббревиатуры, привычный USB перестал удовлетворять по объему своей функциональности. В частности, не может решить задачу по обеспечению питания многих современных устройств, потребление которых серьёзно увеличилось. Первая версия USB TYPE-C появилась в 2013 году. Помимо возможностей USB 2.0 и USB 3.0, USB-C стал поддерживать существенно более энергоёмкие профили питания, а также альтернативные режимы работы. В альтернативных режимах контакты разъёма используются для передачи данных высокоскоростных стандартов, таких как Display Port, Thunderbolt, HDMI, Mobile High-Definition Link (MHL). Недавно была опубликована новая реализация стандарта — USB4, которая также ориентируется на спецификацию USB-C.
Описание и назначение контактов разъёма
Разъём включает в себя 24 контакта. Такое большое число контактов по сравнению с привычными разъёмами USB связано как с добавлением новых контактов, расширяющих функциональность, так и с дублированием контактов на противоположную часть разъёма. Так группы сигналов USB 2.0 и USB 3.0 задублированы, разъем стал симметричным, поэтому теперь его можно вставлять любой стороной.
Рассмотрим группы сигналов USB-C соединителя:
Группа | Цепи |
---|---|
Питание | VBUS (4 контакта), GND (4 контакта) |
USB 2.0 | DP (2 контакта), DN (2 контакта) |
USB 3.0 | TX1+, TX1-, TX2+, TX2-, RX1+, RX1-, RX2+, RX2- |
Конфигурационные контакты | CC1, CC2 |
Дополнительные (Альтернативный режим) | SBU1, SBU2 |
Видно, что под питание заложено 4 пары контактов. Это намекает на то, что через разъём стала возможна доставка существенно большей энергии для питания устройства. Через контакты питания возможна передача до 100 Ватт в нагрузку.
Профили питания доступные через USB TYPE-C:
USB 2.0 | 5 В 500 mA |
USB 3.0/USB 3.1 | 5 В 900 mA |
USB BC 1.2 | 5 В, до 1.5 А |
USB Type-C Current 1.5A | 5 В 1.5 A |
USB Type-C Current 3.0A | 5 В 3.0 A |
USB Power Delivery | до 20 В, до 5A |
Режим питания зависит от того, какая функциональность USB-C используется. Появившиеся контакты CC позволяют установить требуемый режим питания и открывают некоторые дополнительные возможности, но об этом позже.
Чтобы иметь возможность использовать профиль питания с большим током, при установке соединения нужно воспользоваться конфигурационными контактами CC.
Конфигурационные контакты СС
С помощью конфигурационных контактов CC (Configuration channel) происходит подключение двух устройств, установка параметров соединения, профилей питания, а также информационный обмен протокола USB Power Delivery. Функционально CC1- и CC2-пины решают следующие задачи:
Источник (он же DFP) подтягивает линии CC к плюсу через резисторы Rp или использует источники тока. Потребитель (UFP) в свою очередь через резисторы Rd подтягивает линии CC к минусу.
Выставляя определённый номинал Rp (или создавая определённый ток на линии СС), host сообщает, какой ток для питания устройства он может обеспечить. Измеряя падение напряжения на Rd, потребитель понимает, какой Rp используется на противоположном конце и, следовательно, определяет ток питания, который может обеспечить host. Без использования USB Power Delivery по такой схеме возможно установить соединение c током до 3А с единственно возможным напряжением 5В.
Экономичный вариант реализации без USB PD
Как видно выше, спецификация USB-C поддерживает широкий спектр стандартов передачи данных и профилей электропитания, но это не означает, что разработчик обязан использовать всю функциональность. Минимальный набор USB TYPE-C может включать в себя USB 2.0 с контактами CC и единственным напряжением питания 5V. В такой конфигурации можно обеспечить потребителю до 15 Вт (5 В, 3А), что значительно больше, чем может дать стандартный порт USB 3.0 – 4,5 Вт (5В, 900 мА).
Чтобы реализовать логику подключения между DFP и UFP, можно использовать микросхему контроллера конфигурации CC, например, PTN5150. Этот вариант значительно проще и дешевле навороченных контроллеров, поддерживающих USB Power Delivery. Структурная схема выглядит так:
Как видно, основные узлы представляют собой: монитор напряжений на СС контактах, набор источников тока, резисторов для переключения состояния выводов, модуль управления ролями устройства.
Микросхема имеет интерфейс I2C, с его помощью можно определить или изменить роль устройства (DFP, UFP, DRP).
Когда выбирается роль DFP, устройство предполагается как Power Source, для которого есть возможность выбрать 3 профиля питания. После выставления соответствующих бит в регистре управления, происходит подключение соответствующего источника тока на линию CC.
Ток на СС-линии | Режим питания |
---|---|
80 uA | 5V / 0.9 A |
180 uA | 5V / 1.5 A |
330 uA | 5V / 3 A |
В случае определения микросхемы в качестве UFP, контакты CC подключаются через резистор 5,1 кОм на землю. Монитор измеряет падение напряжения на этом резисторе и в статусный регистр заносится текущий режим питания.
Также возможно установить роль Dual Role Power (DRP), в этом режиме микросхема последовательно изменяет состояние СС-контактов от “pull-up Rp” до “pull-down Rd” и обратно до тех пор, пока не будет установлено соединение. Соединение возможно только между одним источником (Power Source) и одним потребителем (Power Sink). Таким образом, когда микросхема находится в режиме DRP и монитор напряжения CC-контактов замечает понижение напряжения на противоположном конце (подключён “pull-down Rd”), устройство понимает, что подключено к Sink, и начинает играть роль Source. Такой режим полезен в том случае, когда заранее неизвестно, в каком режиме должно работать устройство.
Рассмотрим пример использования контроллера
Кроме описанных выше СС-пинов и I2C-шины стоит отдельно отметить контакты ID, CON_DET, PORT. Контакт ID отображает режим, в котором в данный момент находится контроллер. Когда устройство определило себя в качестве DFP, ID примет значение LOW. Контакт CON_DET находится в HIGH, когда соединение установлено, LOW — в обратном случае. Эти два логических сигнала будем использовать далее для включения (когда мы DFP) и отключения (UFP) питания подключённого устройства.
Port — это вход, которым задаётся начальный режим устройства после включения питания. В случае, когда используется “pull-up”, контроллер становится DFP, если “pull-down” — UFP. Если нога осталась «висеть в воздухе», будет использоваться режим Dual Role, и устройство будет ждать подключения, чтобы определиться со своей ролью. Это состояние может быть изменено позднее, после конфигурирования по I2C или изменения уровня напряжения на PORT. Таким образом можно управлять режимами работы без использования I2C.
Нужно управлять питанием внешнего устройства, для этого можно воспользоваться дополнительной микросхемой логики и ключом.
Наша задача подавать питание на разъём USB-C только в том случае, когда к нам подключён UFP. ID в таком случае примет значение LOW, CON_DET — значение HIGH. Для того, чтобы открыть ключ высоким уровнем HIGH, надо реализовать функцию Y = CON_DET& (NOT ID). Таким образом, если снаружи подключён UFP, он от нас питается, если DFP, то напряжение на разъём не подаётся и не происходит конфликта двух источников.
В случае, если нет задачи менять роль устройства в процессе работы, а также не требуется определения ориентации кабеля, можно выполнить вариант проще, без микросхемы вообще. Допустим, ваше устройство играет строго одну роль — UFP/Power Sink, например, это флешка. В таком случае достаточно выводы СС1 и СС2 на разъёме подключить через 5,1 кОм на землю.
В случае, если ваше устройство играет только роль DFP/Power source и оно должно подключаться к устройству USB-C Dual Role, также можно обойтись резисторами. В этом случае подбираем номиналы в зависимости от напряжения источника, к которому подключаем резисторы.
Особенности Power Delivery
Power Delivery расширяет возможности USB-C, позволяет использовать повышенное, по сравнению с привычным USB, напряжение на контактах VBUS – 20 В (и, как мы увидим, даже выше). При использования стандартного кабеля USB-C возможна доставка потребителю до 60 Вт, а при использовании ECMA кабеля – до 100 Вт.
Важная особенность стандарта – наличие PDO (Power Delivery Objects). PDO представляет собой профиль питания с заданным напряжением и током. Таких профилей в PD-источнике должно быть больше, либо равно 2. Другими словами, в одном адаптере находится несколько источников питания, выбор нужного при этом делается потребителем. Обязательный профиль – 5V/3А. Благодаря этому допустимо подключение устройства-источника, в котором реализован полноценный PD, к потребителю, где выполнена только базовая функциональность USB-C (СС-логика). В таком случае источник установит на своем выходе 5V.
100 ватт по USB или как работает Power Delivery
Почитав вот этот пост и сопутствующую ему дискуссию, я решил попробовать внести ясность в то, что такое 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 или [email protected]) и использует Профиль 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 в общем.
Уровень протокола
Читайте также: