Компьютерный мастер - Allcorp66

Начнем с минимума:
include 18f2455 -- библиотека для используемого МК
--
enable_digital_io () -- переключение всех входов на цифровой режим
--
alias Button is pin_B7 -- раз уж у нас подключена кнопка, объявим ее
pin_B7_direction = input -- кнопка у нас работает на вход
--
-- одна строчка - и у нас есть все необходимое для работы с USB CDC
include usb_serial -- бибилотека для работы с usb
--
usb_serial_init () -- --инициализируем USB CDC
forever loop -- основной цикл, выполняется постоянно
usb_serial_flush () -- обновление usb. Данная процедура выполняет все необходимые
-- действия для поддержания соединения с ПК
end loop

Скомпилировав данный код, записав полученный HEX файл в МК при помощи бутлоадера и запустив устройство можно будет наблюдать как в системе опрделится новое устройство: Виртуальный сom-порт.

Теперь, когда устройство уже работает, научим его общаться.

Для чтения принятого байта существует функция usb_serial_read( byte) :boolean. При наличии полученного байта она заносит его в указанную переменную и возвращает true , иначе возвращает false .

Для отправки байта существует процедура usb_serial_data . Она замаскирована под переменную, потому для отправки байта достаточно присвоить ей значение отправляемого байта.

Объявим переменную размером в байт до основного цикла, в основном цикле будем проверять наличие полученных байт, и при их наличии отправлять их обратно.

include 18f2455
--
enable_digital_io ()
--
alias Button is pin_B7
pin_B7_direction = input
--
--
include usb_serial
--
usb_serial_init ()
var byte ch -- объявляем переменную
forever loop -- основной цикл
usb_serial_flush ()
if (usb_serial_read (ch )) then -- если байт получен, он будет записан в ch
usb_serial_data = ch -- отправляем полученный байт обратно
end if
end loop

Компилируем, зажимаем кнопку, передергиваем питание, запуская бутлоадер, меняем прошивку, запускаем.
Устройство снова определилось в системе, теперь нам нужен софт, дабы протестировать работу устройства.

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


И нам в ответ приходит то, что мы отправили. Значит, все работает как надо.

Софт

Итак, наш микроконтроллер умеет принимать байты и тут же отправлять их обратно. Теперь напишем свой софт для общения с ним (я буду использовать Delphi).

Создаем новый проект, раскидываем по форме необходимые компоненты:
SpinEdit1 - для указания номера порта
Button1 - для установки соединения
Button2 - для разрыва соединения
SpinEdit2 - для ввода байта в десятичном виде
Button3 - для отправки байта
Memo1 - для вывода принятой информации.

Как уже было сказано выше, с com-портом нужно работать так же, как и с обычным текстовым файлом: используя функции CreateFile, WriteFile и ReadFile.

Дабы не вдаваться в подробности, возьмем готовую библиотеку для работы с com-портом: ComPort.

Вешаем на каждую кнопку необходимую задачу и получаем конечный код:

unit Unit1;

interface

Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics , Controls, Forms,
Dialogs, StdCtrls, Spin,ComPort;

Type
TForm1 = class (TForm)
SpinEdit1: TSpinEdit;
Button1: TButton;
Button2: TButton;
SpinEdit2: TSpinEdit;
Button3: TButton;
Memo1: TMemo;
procedure OnRead(Sender: TObject; ReadBytes: array of Byte );
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
Port: TComPort;
public
{ Public declarations }
end;

var
Form1: TForm1;
num: integer;
implementation

Procedure TForm1.Button1Click(Sender: TObject);
begin
Port:= TComPort.Create(SpinEdit1.Value, br115200); //создаем соединение
Port.OnRead:= OnRead; //создаем поток чтения принятых данных
Button2.Enabled:= true ; //активируем кнопку закрытия соединения
end;

Procedure TForm1.Button2Click(Sender: TObject);
begin
Port.Free; //закрываем соединение
Button2.Enabled:= false ; //отключаем кнопку
end;

Procedure TForm1.Button3Click(Sender: TObject);
begin
if Button2.Enabled then Port.Write();
end;

Procedure TForm1.FormDestroy(Sender: TObject);
begin
if Button2.Enabled then
Port.Free;
end;

Procedure TForm1.OnRead(Sender: TObject; ReadBytes: array of Byte );
var
i:integer;
begin
for i:= Low(ReadBytes) to High(ReadBytes) do //проходим по массиву принятых байт
begin
Memo1.Text:= Memo1.Text + "." +InttoHex(ReadBytes[i],2); //добавляем его HEX значение в окно
inc(num); //считаем колв-о принятых байт
end;
if num > 10 then begin
Memo1.Lines.Add("" ); //переносим строку
num:= 0;
end;
end;

Запускаем, устанавливаем соединение, отправляем байты:

Вот и готов наш самый простой терминал для работы с самым простым usb-устройством.

Как видно, чтение и запись происходит динамическими массивами байт.

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

include 18f2455
--
enable_digital_io ()
--
alias Button is pin_B7
pin_B7_direction = input
--
--
include usb_serial
--
usb_serial_init ()
var byte ch
var byte i -- объявляем вторую переменную
forever loop -- основной цикл
usb_serial_flush ()
if (usb_serial_read (ch )) then -- если байт получен выполняем необходимые действия
case ch of -- перебираем номер байта
0 : usb_serial_data = 0xff
1 : usb_serial_data = Button -- отправка состояния кнопки
OTHERWISE block -- если получено что-то иное
for 16 using i loop -- отправляем 10 байт с данными
usb_serial_data = ch +i -- от ch до ch+15
end loop
end block
end case
end if
end loop

Дополнительные возможности

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

Упрощение отправки данных

Отправлять информацию по одному байту - не всегда удобно. Очень часто может пригодиться библиотека print . Она содержит процедуры по отправке данных всевозможной длины всевозможными форматами: byte,hex,dec,bin,boolean что может упростить вывод данных в программе.
>include print
...
var dword data
print_dword_hex (usb_serial_data , data )

Название всех команд можно посмотреть в файле библиотеки.

Ожидание подключения к ПК

Если перед стартом основного цикла микроконтроллера необходимо предварительно установить соединение с ПК, то можно дописать перед ним строчки
while (usb_cdc_line_status () == 0x00 ) loop
end loop

Привязываем к устройству номер порта

Если оставить все как есть, система при каждом новом подключении будет выделять первый свободный номер порта. А это значит что за ним придется всегда следить.
Для того, что бы этого не происходило, необходимо устройству присвоить уникальное значение серийного номера до подключения библиотеки usb:
Номер может быть любой длины и содержать различные символы.
const byte USB_STRING3 =
{
24 , -- длина массива
0x03 , -- bDescriptorType
"0" , 0x00 ,
"1" , 0x00 ,
"2" , 0x00 ,
"3" , 0x00 ,
"4" , 0x00 ,
"5" , 0x00 ,
"6" , 0x00 ,
"7" , 0x00 ,
"8" , 0x00 ,
"9" , 0x00 ,
"X" , 0x00
}

Меняем имя устройства на свое

Поменять имя устройства, видимое в системе до установки драйверов можно объявив массив с именем, как и серийный номер, это необходимо сделать до подключения библиотеки USB.
const byte USB_STRING2 =
{
28 , --
0x03 , -- bDescriptorType
"D" , 0x00 ,
"e" , 0x00 ,
"m" , 0x00 ,
"o" , 0x00 ,
" " , 0x00 ,
"B" , 0x00 ,
"o" , 0x00 ,
"a" , 0x00 ,
"r" , 0x00 ,
"d" , 0x00 ,
" " , 0x00 ,
"=" , 0x00 ,
")" , 0x00
}

Но увы, после установки драйверов устройство поменяет имя на указанное в.inf файле, потому поменяем имя и там


DESCRIPTION=«Demo CDC»

Организуем автоподключение устройства

Увы, никаких прямых путей выполнить данную задачу нет, потому придется исхитриться.

Прежде всего необходимо присвоить своему устройству уникальное значение производителя и продукта, дабы легко определять его среди сотен других стандартных CDC-прошивок.
VID и PID выдаются за денюжку, потому пойдем по пуути китайцев: втихую возьмем себе заведомо свободные значения.

Прошивка:
В прошивке необходимо объявить две переменные до подключения библиотеки USB

const word USB_SERIAL_PRODUCT_ID = 0xFF10
const word USB_SERIAL_VENDOR_ID = 0xFF10

Вместо FF10 можно вставить любые два слова (2 байта). Конечный результат содержится в прилагаемом архиве.

Драйвера:
Так как драйвера не предназначены для нашей комбинации VID и PID, допишем наши значения в.inf файл вручную:


%DESCRIPTION%=DriverInstall, USB\VID_FF10&PID_FF10


%DESCRIPTION%=DriverInstall, USB\VID_FF10&PID_FF10

Софт:
Для отлова событий подключения\отключения устройства подключим библиотеку ComponentUSB. Не считаю нужным пояснять каждую строчку: все изменения можно увидеть в прилагаемом проекте.

Результат

На скриншоте сложно разглядеть, но кнопка отправки активна только в момент наличия подключенного устройства, при этом каждые 50мс программа подает запрос на получение состояния кнопки (что, впрочем, неправильно, потому как нажатие кнопки должно обрабатываться на МК).

Как видно, организовать обмен данными между МК и ПК через USB - не самое сложное занятие. Полученное соединение можно использовать не только для конечынх целей: оно так же подходит для отладки программы. Ведь отправить на компьютер результаты расчетов, текущие состояния регистров и переменных куда нагляднее, чем моргать парой светодиодов азбукой морзе.

И напоследок: советую заглянуть в исходный код лампы настроения. Там можно найти довольно-таки хороший вариант обработки принимаемых данных для организации удобного протокола обмена.

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

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

USB-Flash Drive (флешка, флэшка) — устройство для накопления и хранения информации. Переданные устройству данные располагаются и хранятся во флэш-памяти. Для получения информации usb флешку необходимо подключить к телевизору (Smart), компьютеру, планшету или любому другому считывающему устройству.

К основным недостаткам USB флэш-накопителя можно отнести ограниченный цикл записи/стирания, но хранящуюся в устройстве можно считать бесконечное количество раз. Цикл перезаписи современными стандартами на сегодняшний день ограничен от 10000 и до 100000 раз. Если взять во внимание минимальный цикл перезаписи (10000) то может показаться, что для эксплуатации такое количество более чем достаточно. Но на самом деле это не так.

Представьте себе ситуации, когда вы интенсивно используете флэшку перезаписывая на ней данные по нескольку раз в день. Согласитесь, что при такой эксплуатации, такое количество циклов (10000) для обновления информации уже не кажется таким уж большим. Хотя, справедливости ради, стоит сказать, что для рядового пользователя флэш-накопитель с минимальным ограничением перезаписи прослужит немало времени.

К сожалению не все USB накопители отрабатывают свой положенный срок честно. Как правило, виной этому производители мало известных фирм и компании с неизвестным происхождением, которые не соблюдают технологических норм при создании постоянного запоминающего устройства (ПЗУ). Очень часто наши китайские «друзья», которые любят делать подделки именитых брендов, не соблюдают технологию (не качественные детали) и создают дешевые накопительные устройства, которые раньше положенного времени выходят из строя.

На что нужно обратить внимание при выборе USB-флэш-накопителя.

  • Производитель (компания).Чтобы свести к минимуму преждевременный выход из строя USB-флэш-накопителя, делайте свой выбор в пользу зарекомендовавших себя компаний, которые работаю на рынке не один год. Например, это могут быть такие компании как: Kingston, Transcend, Corsair, Apacer…
  • Так же при выборе usb-флэш-накопителя обратите внимание на каком типе памяти она построена. Хорошо если в ней установлена флэш-память типа NAND, потому что именно этот тип памяти может выполнить около 100000 циклов записи/стирания информации.

В основе USB флэш-накопителя находиться типа NAND и небольшой микроконтроллер со встроенным ROM или RAM. Флэш-память (Flash Memory) относится к классу EEPROM (Electrically Erasable Programmable Read-Only Memory) — электрически стираемое перепрограммируемое запоминающее устройство ПЗУ или ЭСППЗУ.

Основное достоинство этого устройства в том, что оно энергонезависимо, а значит ему не нужно электричество для хранения данных. Стоит сказать, что основная особенность EEPROM в том, что хранящуюся информацию в устройстве (mini SD, MMC, SD, USB-флешка…) можно считать бесконечное количество раз, а вот количество записи к сожалению ограничено (мы уже с вами говорили о том ).

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

  • Тип ячеек памяти.В рядовых флэшках (USB-Flash-Drive) используют два типа ячеек памяти MLC и SLC. Как правило более дешевые модели USB флэш-накопителей комплектуют MLC (Multi-level cell — многоуровневые ячейки памяти)ячейками, которые могут выдержать около 10 тысяч циклов. Ну и как вы уже догадались SLC (Single-level cell — одноуровневые ячейки памяти) ячейками комплектуют более дорогие модели, которые выдерживают до 100000, а то и более циклов записи/стирания.

Принцип работы USB -флеш-накопителя и его компоненты.

Как я уже писал выше, что в основе USB-накопителя лежит флэш-память типа NAND или NOR. В свою очередь флэш-память содержит в себе кристалл кремния на котором размещены полевые транзисторы с плавающими и управляющими изолированными затворами. Стоит сказать, что полевые транзисторы имеют сток и исток. Так вот плавающий затвор транзистора способен удерживать заряд (электроны).

Во время записи данных на управляющий затвор подается положительное напряжение и некоторая часть электронов направляется (двигается) от стока к истоку, отклоняясь к плавающему затвору. Часть электронов преодолевает тонкий слой изолятора и проникают в плавающий затвор, где и остаются на продолжительный срок хранения. Время хранения информации измеряется годами, но так или иначе оно ограничено.

Устройство USB flash довольно компактны, мобильны и дают возможность подключиться к любому компьютеру, который имеет USB-разъем. На что только не идут производители чтобы угодить потенциальным покупателям совмещая USB накопитель со всевозможными брелками, украшениями, игрушками и авторучками…

Устройство USB Flash накопителя состоит из следующих электронных компонентов:

  1. Разъем USB.
  2. Микроконтроллер.
  3. Контрольные точки.
  4. Чип (микросхема) флэш-памяти.
  5. Кварцевый резонатор.
  6. Светодиод.
  7. Переключатель (защита от записи).
  8. Место для микросхемы памяти (дополнительное место).

Компоненты и симптомы не стабильной работы USB Flash накопителя.

  1. PCB — это многослойная печатная плата, которая служит основой для всех размещенных (распаянных) деталей электроники. Имеет следующие типичные неисправности: некачественно выполненный монтаж деталей электроники при деформации (изгибы, удары) платы приводит к внутренним разрывам около проводников и нестабильной работе usb-флэш накопителя.
  2. USB разъем — предназначен для подключения флэш-накопителя к устройствам чтения. При некачественном монтаже разъем отрывается от дорожек и в месте пайки. Не так давно я сталкивался с данным явлением.
  3. Микроконтроллер — микросхема, в обязанности которой входит управление памятью типа NAND и передача информации. Содержит в себе данные о производителе и типе памяти, а также хранит в себе необходимую служебную информацию для правильного функционирования флэш-накопителя. По вине контроллера чаще всего происходит выход из строя флэш-накопителя.
  4. Симптомы характеризующие его выход из строя: флэш-накопитель определяется как «неизвестное устройство», показывает не правильный размер (объем) накопителя или просит вставить чистый диск в устройство чтения. Причиной выхода из строя контроллера (сгорает) — служит некачественное питание, плохая работа стабилизатора и неправильное извлечение флэш-накопителя.
  5. Микросхема памяти типа NAND — это энергонезависимая память, которая отвечает за хранение информации. По истечении N-го количества времени, при сбое или повреждении в памяти могут образоваться поврежденные блоки (бэд блоки). Возможны и другие причины появления испорченных блоков, в которые больше не представляется возможным записывать/считывать информацию. Устранить такую неисправность можно с помощью узкоспециализированных программ, что в конечном итоге уменьшит объем памяти, но восстановит работоспособность.
  6. Кварцевый резонатор — используется для построения опорной частоты, которая необходима для функционирования логики контроллера и флэш-памяти. При выходе из строя, USB флэш-накопитель определяется как «неизвестное устройство» или не определяется вовсе(не видит считывающее устройство).

Преимущества USB-флешек:

  • Небольшой размер, вес, портативность.
  • Накопитель можно подключить к любому устройству считывания (практически везде есть USB).
  • Практически нет влияния от внешней окружающей среды (пыль, царапины, загрязненность).
  • USB флешка может работать в широком диапазоне температур.
  • Малые габариты позволяют хранить большой объем информации.
  • Низкое энергопотребления.
  • В сравнении с жестким дискам, она устойчивее к внешним воздействиям, вибрациям и ударам.
  • Удобство подключения к устройству.
  • Высокая скорость доступа к данным.

Недостатки USB-флешек:

  • Ограниченное число циклов записи и стирания перед выходом из строя.
  • Ограниченный срок автономного хранения данных.
  • Скорость записи и чтения ограничены пропускной способностью шины USB и самой флеш-памяти.
  • Чувствительны к радиации и электростатическому разряду (обычно наблюдается в быту, чаще всего зимой).

В заключении статьи предлагаю Вам посмотреть тематическое видео по производству USB Flash накопителей на заводе Kingston Production.

Сегодня USB вытеснил практически все другие интерфейсы для подключения компьютерной периферии (смотри врезку «Внешние интерфейсы – конкуренты USB»), залогом чему стали его неоспоримые преимущества.

■ Распространенность. Любой компьютер, выпущенный в последние годы, оснащен одним или несколькими портами USB (на современных настольных ПК их до 12, на подавляющем большинстве ноутбуков – 3–4). Выбор же USB-устройств просто огромен.

■ Простота в использовании. USB – идеальное воплощение принципа Plug and Play. Устройства с этим интерфейсом можно подключать и отключать во время работы компьютера. Современные операционные системы сразу же распознают USB-устройства и подгружают необходимые драйверы. На многих компьютерах для повышения удобства доступа порты USB размещены на фронтальной или боковой стороне корпуса. К тому же перепутать разъемы и неправильно подключить периферию невозможно.

■ Высокая пропускная способность. У интерфейса USB 2.0 она составляет 480 Мбит/с. Копирование файла размером 700 Мб на накопитель, подключенный к порту USB, займет не более 20 секунд.

■ Обеспечение питания. Порт USB не только служит для подключения периферии, но и может «подкармливать» гаджеты с низким энергопотреблением, к примеру, мыши, клавиатуры, флэшки и даже 2,5-дюймовые жесткие диски. Напряжение питания по шине USB равно 5 В при силе тока до 500 мА. Этого, конечно, недостаточно для периферийных устройств со сравнительно высоким энергопотреблением, таких как принтеры или внешние жесткие диски форм-фактора 3,5”. Поэтому они комплектуются собственными блоками питания, подключаемыми непосредственно к розетке электросети.

ПРОСТО И ЛЕГКО

Связующим центром для всех USB-устройств является компьютер. Только с ним они могут «общаться» напрямую. Такое соединение получило название «точка-точка».

При первом подключении USB-устройство автоматически обнаруживается операционной системой, после чего она осуществляет поиск нужного драйвера. При этом действует правило: чем новее версия используемой операционной системы, тем выше вероятность того, что пользователю не придется устанавливать драйвер самостоятельно. К примеру, Windows XP и Vista автоматически распознают флэш-накопители, кард-ридеры и внешние жесткие диски и регистрируют их в качестве съемных дисков. Необходимые для этих устройств драйверы входят в дистрибутив Windows и всегда находятся «под рукой» у системы. Windows Vista к тому же располагает дополнительными драйверами для наиболее распространенных моделей принтеров, сканеров, игровых клавиатур и других устройств.

СОВЕТ

За редким исключением, USB-гаджеты могут обмениваться данными между собой только при посредничестве компьютера. В этом случае ПК играет роль так называемого USB-хоста. Он запрашивает у каждого устройства, подключенного по USB и называемого клиентом, информацию о наличии необходимых для передачи данных, после чего организует «диалог». Передавать файлы «по собственной инициативе» клиентам запрещено. Данный метод, называемый опросом, хотя и отнимает часть системных ресурсов, однако делает возможным создание простых и, как следствие, недорогих USB-устройств.

Типы USB-разъемов

Существуют два типа разъемов и штекеров USB: тип А используется для подключения USB-устройств к ноутбукам и настольным компьютерам. Разъемом типа B оснащаются периферийные USB-устройства. Существует несколько вариантов разъема второго типа: собственно В, Mini-В и Micro-В.

Тип А. Коннектор типа А подключается к USB-разъему типа А компьютера или USB-хаба. Некоторые принтеры и многофункциональные устройства также оснащены разъемом типа А – для подключения фотокамер.

Тип B. Коннектор типа В подключается к соответствующему USB-разъему, которым обычно оснащаются крупные периферийные устройства, такие как МФУ, принтеры и сканеры.

Mini-USB (тип В). USB-устройства более скромных размеров, например цифровые фотокамеры, КПК или сотовые телефоны, оснащаются более миниатюрным вариантом разъема типа В, называемым Mini-USB (или, правильнее, Mini-B).

Micro-USB (тип В). Существует USB-разъем еще более компактный, чем Mini-В – это разъем Micro-B. Им чаще всего могут похвастаться мобильные телефоны.

Прямая связь двух USB-гаджетов возможна с помощью технологии On-The-Go. Ее использование позволит выводить на печать изображения без посредничества компьютера или напрямую обмениваться музыкальными файлами между MP3-плеерами.

ПРЕИМУЩЕСТВА КОНКУРЕНТОВ

Интерфейсы USB, eSATA и FireWire отличаются друг от друга, прежде всего, по скорости передачи данных (см. врезку «Пропускная способность USB, eSATA и FireWire в сравнении»).

Внешние интерфейсы – конкуренты USB

FireWire. Интерфейс для подключения видеокамер и внешних жестких дисков. Стандарт FireWire 800 предусматривает работу на больших скоростях, чем стандарт USB 2.0, однако сегодня он теряет свою актуальность.

SATA и eSATA. Наряду с интерфейсом SATA, используемым для подключения внутренних жестких дисков, существует eSATA для подключения внешних дисковых накопителей. Передача данных по eSATA осуществляется почти в четыре раза быстрее, чем по USB 2.0. Пожалуй, eSATA – единственный интерфейс, имеющий явное преимущество перед USB и не собирающийся сдавать позиции.

PS/2. Этот некогда стандартный интерфейс для подключения устройств ввода с приходом USB постепенно уходит в прошлое. Фиолетовый разъем PS/2 традиционно предназначен для клавиатуры, зеленый – для мыши.

Параллельный порт. До того как USB получил широкое распространение, параллельный порт был традиционным интерфейсом для подключения принтеров и сканеров. Теперь он встречается все реже.

Игровой порт (MIDI-порт). К игровому порту раньше подключали джойстики или музыкальные MIDI-клавиатуры. Сегодня подобные устройства используют для подключения USB-разъем, так что MIDI-порты встречаются редко.

Последовательный порт. Последовательный порт (СОМ-порт), к которому ранее подключали мышь и модем, сегодня на домашнем ПК абсолютно бесполезен. Данный интерфейс используется в промышленности – для управления специальными машинами.

Внешний SCSI-интерфейс. Раньше, наряду с распространенными сегодня внешними жесткими дисками с интерфейсом IDE, часто использовались накопители с интерфейсом SCSI, которые сегодня актуальны лишь для серверных систем.

■ eSATA служит для подключения внешних жестких дисков, а с недавних пор – и некоторых моделей флэшек. В отличие от USB и FireWire, во внешних жестких дисках с интерфейсом eSATA не требуется преобразования данных, что исключает дополнительное звено, тормозящее взаимодействие с ПК. Поэтому скорость у подобных жестких дисков находится на уровне встроенных в компьютеры винчестеров. Если вам необходима максимальная производительность внешних устройств, то eSATA – наилучшее решение.■ FireWire служит в первую очередь для подключения к ПК видеокамер и некоторых моделей жестких дисков. Актуальная версия FireWire 800 существенно быстрее интерфейса USB 2.0 (800 против 480 Мбит/с). Но устройства с интерфейсом Fire Wire обычно дороже, чем аналогичные с USB.

Пропускная способность USB, eSATA и FireWire в сравнении


Если вы планируете купить внешний жесткий диск, то вам предстоит выбрать один из нескольких возможных интерфейсов его подключения, которые имеют разную пропускную способность: наивысшую скорость передачи данных обеспечивает eSATA, следом идет FireWire 800 и замыкает эту гонку USB 2.0. Но у последнего есть свой козырь: разъем USB присутствует на любом компьютере.

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

СТАНДАРТЫ USB

■ USB 1.1. Компьютеры, выпущенные до 2002 года, предоставляют в распоряжение пользователя интерфейс USB 1.1. Передача данных по этому стандарту осуществляется достаточно медленно. Теоретическая пиковая пропускная способность составляет 12 Мбит/с (или 1,5 Мб/с). Для устройств ввода – клавиатуры и мыши – этого вполне достаточно.

На заметку. Более ранняя версия, USB 1.0, не получила распространения, так и оставшись на бумаге. Готовые изделия, соответствующие этому стандарту, в продажу не поступали.

■ USB 2.0. Компьютеры и ноутбуки, выпущенные после 2003 года, как правило, оснащены портами USB 2.0. Максимальная скорость в сравнении со стандартом 1.1 заметно возросла и составила 480 Мбит/с (или 60 Мб/с). Хотя на практике достигнуть такого уровня пропускной способности не удается.

Более высокую пропускную способность обеспечивают устройства USB 2.0, отмеченные логотипом «USB 2.0 Hi-Speed». Если же на коробке или корпусе устройства указано «USB 2.0 Full-Speed», это означает, что данные будут передаваться на скорости стандарта USB 1.1.

«ЗАМЕДЛЕННОЕ ДЕЙСТВИЕ»


Если Windows сама не определит подключенное USB-устройство, драйвер для него придется устанавливать самостоятельно (как правило, его можно найти на диске, входящем в комплект поставки USB-устройства). Купив принтер или МФУ с интерфейсом USB, не спешите сразу подключать его: вначале загляните в руководство пользователя и ознакомьтесь с порядком установки, чтобы понять, нужно ли инсталлировать ПО или имеющегося в ОС будет достаточно. В противном случае Windows может установить драйвер с меньшим набором функций или вовсе распознает устройство неверно.

Еще одно преимущество USB-хаба заключается в том, что его можно установить в удобном для вас месте. Это избавит от необходимости каждый раз лезть под компьютерный стол в поисках нужного порта, чтобы подключить USB-коннектор. Кроме того, если для подключения устройства не хватает длины USB-кабеля, хаб может выступать в роли удлинителя.Проще всего это сделать с помощью так называемых USB-разветвителей (USB-хабов). Эти маленькие «коробочки» доступны по цене от 100 руб. Занимая всего один USB-разъем компьютера, такое устройство предоставляет взамен, как правило, четыре (и более) порта. Теоретически использование USB-хабов позволяет подключить к одному компьютеру до 127 устройств USB.

Необходимо учесть, что существует два типа хабов.

■ Активный. В качестве источника электроэнергии он использует отдельный блок питания, который входит в комплект поставки хаба. USB-порты такого разветвителя способны обеспечивать максимальную для этого интерфейса силу тока, поэтому к активным хабам можно подключать даже такие «прожорливые» устройства, как внешние жесткие диски.

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

USB по сети

Сетевой USB-хаб Belkin Components позволяет подключить до пяти USB-устройств, которые будут взаимодействовать с компьютером по сети. С помощью WLAN-маршрутизатора можно организовать для них беспроводное соединение.

КАКОВА МАКСИМАЛЬНАЯ ДЛИНА КАБЕЛЯ USB

Альтернативой хабу может считаться плата расширения, устанавливаемая в слот PCI материнской платы ПК. При ее использовании в вашем распоряжении окажется несколько дополнительных разъемов USB (как правило, четыре). Подобные платы можно приобрести по цене от 300 руб. Недостаток: дополнительные порты USB будут расположены на задней стенке системного блока.

Максимальная длина стандартного кабеля USB составляет 5 метров. Если этого недостаточно, потребуются специальные удлинители (после каждого 5-метрового участка необходим своего рода ретранслятор с автономным питанием, в роли которого, кстати говоря, может выступать и USB-хаб). С их помощью можно достигнуть длины соединения, равной 25 метрам. Использование так называемых USB Line Extender (стоимостью 1000 руб. и более; это устройство представляет собой USB-адаптер и хаб, которые соединены стандартным сетевым кабелем) позволит преодолевать расстояние и в 60 метров.

Что означают логотипы USB

На упаковке большинства USB-устройств красуется один или несколько приведенных ниже логотипов. Их наличие указывает на то, что устройство соответствует техническим требованиям, описанным в спецификациях и документах некоммерческой организации USB Implementers Forum. Если вам встретится обозначение, которого нет в нашем списке, будьте осторожны: возможно, вы имеете дело с низкосортной продукцией «третьих фирм», которые, возможно, не поддерживают заявленных характеристик.

НЕМНОГО О WIRELESS USB

Wireless USB – это новый стандарт, призванный сделать возможной беспроводную связь по шине USB. Бесконечные провода на и под столом благополучно ушли бы в прошлое, если бы принтеры, сканеры, внешние жесткие диски и MP3-плееры смогли обмениваться данными с компьютером без использования кабеля. Эта новая технология, предлагаемая USB Imple menters Forum, поможет реализовать эту мечту.

Новый USB-кабель

«Традиционный» USB-кабель состоит из четырех проводов. Два из них осуществляют передачу данных, два других используются для электропитания. Для нового высокоскоростного режима работы USB версии 3.0 четырех проводов уже недостаточно, поэтому новый кабель будет иметь четыре дополнительные линии для данных: первая пара будет служить для приема, вторая – для передачи. Преимущество: в отличие от USB 2.0 прием и передача данных будут осуществляться одновременно и на максимальной скорости. Кабель USB 3.0 будет оснащен новым коннектором с пятью дополнительными контактами.

В качестве примера рассмотрим, как можно одновременно подключить обычные USB-принтер и сканер, используя Wireless USB. Совсем без проводов в этом случае обойтись все же не удастся: оба устройства придется соединить кабелями с беспроводным USB-хабом, который «от их имени» будет общаться с компьютером. При этом в ПК должен быть установлен соответствующий беспроводной USB-адаптер. В данном случае принтер и сканер будут определяться системой как устройства, подключенные к компьютеру традиционным способом.

Стоит принять во внимание тот факт, что максимальную скорость передачи в 480 Мбит/с беспроводной интерфейс USB обеспечивает только в том случае, если расстояние между хабом и компьютером не превышает трех метров. На большем расстоянии пропускная способность Wireless USB снижается. Если на пути беспроводного канала связи встретятся преграды, например стена, передача данных будет невозможна.

На заметку. Альтернативой решениям Wireless USB являются USB-хабы, подключаемые к локальной сети. Их можно подключить к WLAN-маршрутизатору, в результате чего также станет возможно беспроводное соединение USB-устройств и компьютера.

НОВЫЕ ВОЗМОЖНОСТИ USB 3.0

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

■ Пропускная способность. На практике USB 2.0 обеспечивает передачу данных на максимальной скорости, едва превышающей 30 Мб/с. Это ограничивает возможности многих устройств, прежде всего внешних дисковых накопителей, которые способны работать на скорости, превышающей указанную в 2–4 раза. В USB 3.0 пропускная способность вырастет сразу в 10 раз и достигнет уровня 5 Гбит/с. Для этой цели USB 3.0 оснащается более сложной технологией передачи данных, при которой для трансляции одного байта требуется не 8, а 10 бит. Поэтому реальный скоростной предел при передаче данных составит приблизительно 500 Мб/с. Однако даже таких результатов добиться вряд ли получится – камнем преткновения станут скоростные возможности внешних устройств (тех же накопителей), которые по скорости значительно отстают от возможностей USB 3.0.

■ Разъемы. Одной из основных задач, стоящих перед разработчиками нового стандарта, – сохранение совместимости разъемов USB 3.0 и 2.0. В результате вы легко сможете подключить устройство USB 2.0 к разъему USB 3.0. Но тому, кто стремится к максимальной скорости, все же придется приобрести новые кабели (см. врезку «Новый USB-кабель»). Они устроены сложнее и будут стоить дороже, чем аналогичные кабели USB 2.0. Кроме того, не все типы разъемов получат обратную совместимость со старым стандартом USB 2.0. Если в случае коннекторов USB типа А удалось обойтись малой кровью, «вписав» пять новых контактов в уже имеющуюся конструкцию разъема, то с коннекторами USB типа B, и уж тем более Micro-B, все оказалось куда сложнее. В этом случае пришлось менять конструктив разъема, по сути разбив его на две части: первая – для сохранения совместимости с предыдушими стандартами, представляет собой «старый» порт USB 2.0, вторая – объединяет пять новых линий, появившихся в USB 3.0. Таким образом, коннекторы этих типов не могут быть подключены к порту USB 2.0.

■ Питание. Разъемы USB 3.0 поддерживают большую силу тока, чем все предыдущие версии USB: 900 вместо прежних 500 мА. Это важно, к примеру, при использовании внешних жестких дисков.

■ Энергосбережение. В USB 2.0 хост должен был постоянно проводить опрос подключенных устройств, выясняя нет ли у них новой порции данных, поэтому все они должны были быть постоянно активными. Отказ от такого циклического опроса в USB 3.0 позволит использовать режим энергосбережения.

В настоящий момент один из самых популярных интерфейсов — это безусловно USB. Девайсов, которые его используют, просто огромное количество. Это и мышки, и клавиатуры, и принтеры, и сотовые телефоны, и много чего ещё. В отличии от стремительно исчезающего RS-232, USB встречается во всех современных компьютерах, ноутбуках, телефонах… так что, если мы хотим создавать действительно универсальные девайсы, придётся нам этот интерфейс изучать. Вот прямо сейчас и начнём, а заодно, по ходу изучения, попытаемся сами посоздавать каких-нибудь USB-девайсов.

Итак, USB (universal serial bus) — универсальная последовательная шина . Большинство USB-устройств соответствуют спецификациям 1.1 и 2.0. В спецификации 1.1 определены две скорости передачи информации: LS (low speed) — низкая скорость, 1,5 Мбит/с и FS (full speed) — полная скорость, 12 Мбит/с. В редакции 2.0 к ним добавлена ещё и высокая скорость HS (high speed), 480 Мбит/с. Не так давно вышла ещё спецификация — 3.0, но устройства, поддерживающие этот стандарт, пока не очень распространены, поэтому и бог с ней.

Физические устройства на шине USB бывают трёх типов : хост-контроллер , хаб и конечное устройство .

Хост-контроллер — это главный управляющий шиной USB . Именно он обеспечивает связь устройств, подключенных к шине, с компьютером (с ОС и с клиентским ПО). Любые сеансы обмена данными может начинать только хост-контроллер, остальные устройства молчат в тряпочку, пока хост-контроллер к ним не обратится.

Контроллер взаимодействует с ОС через драйвер хост-контроллера (HCD — host controller driver) . Этот драйвер привязан к конкретной модели хост-контроллера. Только он знает какие данные, в какие регистры и в каком порядке пихать в хост-контроллер, а также откуда какие данные брать, чтобы хост-контроллер сделал то, чего от него хотят.

Со стороны ОС шиной USB управляет ещё один драйвер — USBD (universal serial bus driver) . Ему совершенно пофиг, как там конкретно реализован хост-контроллер и где у него какие регистры (для этого есть HCD), USBD решает общие (неспецифические для конкретного хост-контроллера) вопросы: взаимодействие с клиентским ПО, нумерация устройств на шине, их конфигурирование, распределение питания и пропускной способности шины и так далее. Это, можно сказать, своеобразный диспетчер, который осуществляет общий контроль над шиной и её взаимодействие с внешним миром (с клиентским ПО).

Хост-контроллер — птица гордая и пугливая, поэтому непосредственно ни с кем из подданных он не разговаривает. Для общения с подданными у него есть специальные помощники — хабы (их ещё иногда называют концентраторами).

Хабы — это устройства, которые позволяют физически подключить устройства USB к шине. Они предоставляют порты для подключения, ретранслируют трафик от хост-контроллера к конечным устройствам и обратно, отслеживают состояние и физически управляют электропитанием портов. У хабов есть один восходящий (upstream) порт, — это тот порт, который подключен по направлению к хост-контроллеру, и несколько нисходящих (downstream) портов, — это порты, к которым подключаются конечные устройства. Хабы можно каскадировать, подключая к нисходящему порту хаба ещё один хаб. Самый главный хаб, интегрированный с хост-контроллером, называется корневым хабом (он же — корневой концентратор или root hub ).

Другими словами можно сказать, что у хаба есть две основных задачи: 1) создать хост-контроллеру иллюзию, что он непосредственно разговаривает с подключенным к хабу устройством; 2) наблюдать за своим сегментом шины (за девайсами, подключенными к нисходящим портам), сообщать «наверх» обо всех изменениях и, если надо, — подключать и отключать питание портов.

Конечные устройства — это все те полезные устройства, которые мы подключаем к шине USB (флэшки, принтеры, мышки и т.д.)

Нужно сказать, что физические устройства и логические устройства — это не всегда одно и тоже . Существуют, например, такие конечные устройства (называемые составными — compound devices ), которые содержат внутри себя хаб, к которому подключено ещё несколько устройств. Несмотря на то, что в этом случае хаб и все, подключенные к нему устройства, запакованы в один корпус, с точки зрения логики шины это будут совершенно разные устройства.

Для логических конечных устройств обычно используют термин «функции» . Таким образом, с точки зрения логики шины, устройства на ней можно разделить на хабы и функции (и неважно, запакованы ли они в один корпус или нет). Каждое логическое устройство на шине имеет уникальный адрес (1-127), присваеваемый ему хостом при подключении.

Исходя из описанного выше, получается, что физическая топология шины USB — дерево (ну, потому что хабы можно каскадировать), а логическая топология — звезда, центром которой является хост-контроллер. Физическая и логическая топологии шины USB показаны на рисунке ниже.

Логическое устройство представляет собой набор так называемых конечных точек (endpoints или просто EP) . Физически, конечные точки — это просто разные буферы в логическом устройстве USB, через которые происходит обмен данными с хостом. Логичный вопрос — а зачем нам иметь несколько буферов? Ну, просто потому что удобно для разных задач иметь разные буферы. Устройство же у нас может выполнять параллельно несколько разных задач. (Минимум две — отслеживать команды управления от хоста и делать что-то полезное.) У этих разных задач могут могут быть разные степени важности, требования к надёжности, своевременности и скорости доставки данных и, наконец, источники и потребители пересылаемой информации также могут быть разные (источником и потребителем полезной инфы обычно является клиентский драйвер, в то же время всякая управляющая инфа ему обычно нафиг не нужна).

Поскольку для решения описанных выше проблем недостаточно иметь просто разные буферы для разной передаваемой информации, то в дополнение к этому придумали ещё кое-что.

Во-первых, придумали 4 различных типа передач. Для каждой конечной точки должно быть определено, каким из этих типов передач с ней нужно общаться. Типы передач в USB существуют следующие:

  1. изохронные передачи (isochronous transfers). Они предназначены для передачи потоковых данных в реальном времени. Такие передачи гарантируют время доставки, но не гарантируют, что все данные будут доставлены. Если во время передачи происходит ошибка, то данные просто теряются. Кроме того, для передач такого типа должно быть предварительно согласовано, какую часть пропускной способности шины эта передача будет занимать. Изохронные передачи имеют наивысший приоритет и имеют право занять до 90% пропускной способности канала. Передачи этого типа используются, например, для видеокамер, или колонок. Никого ведь не устроит, если звук в колонках будет лагать. Лучше уж потерять часть данных, но слушать песню не рывками, а непрерывно.
  2. прерывания (interrupts). Этот тип предназначен для спонтанных небольших сообщений, но с гарантированным временем обслуживания и гарантированной доставкой. Примером может служить USB клавиатура. Мы можем нажать на кнопку в любой момент (может 3 часа не нажимали, а может так и заклацали клавой каждую секунду). Пока мы спим за компом — и передавать ничего не надо. Но как только мы всё же щелканули по кнопкам — будьте любезны, сообщите об этом куда следует и желательно побыстрее.
  3. передача массивов данных (bulk data transfers). Для этого типа нет никаких гарантий по скорости, единственное в чём можно быть уверенным — что данные дойдут в целости и сохранности (когда-нибудь, гы-гы). Такие передачи имеют самый низкий приоритет, но зато им ничего не надо согласововать, — сколько останется свободной от других типов передач ширины канала — столько они и займут. Не останется вообще — будут ждать, когда канал освободится. Такие передачи можно использовать для обмена данными с устройствами, которым некуда спешить, например, с принтерами. Представьте, что вы отправили на печать USB-принтеру фотку и одновременно слушаете музыку в USB-колонках. Согласитесь ли вы, чтобы фотка напечаталась на 3 секунды раньше, но при этом начал лагать звук в колонках? Вероятнее всего нет, так ведь. Пусть лучше данные принтеру передаются медленнее, но зато музыка играет непрерывно, без всяких дёрганий.
  4. управляющие передачи (control transfers). Это передачи типа запрос-ответ. С помощью них передаются комады управления устройствами. Тут важна не только безошибочная передача, но и получение ответа о результатах выполнения команды. Кроме того, поскольку эти передачи являются служебными, то им гарантировано 10% пропускной способности канала.

Вернёмся к нашим конечным точкам. Для того, чтобы отличить одну точку от другой, — конечные точки, должны иметь уникальный номер. Но это не всё. Кроме номера, каждая конечная точка имеет ещё и направление. IN — если точка предназначена для передачи данных хосту, OUT — если точка предназначена для приёма данных от хоста. Точки с одинаковыми номерами, но с разными направлениями передачи данных — это разные с точки зрения логики шины конечные точки.

Единственное исключение — конечная точка EP0. У неё вообще особый статус. Она является служебной и предназначена для общего управления устройством (конфигурирование, настройка и т.д.). Кроме того, эта конечная точка двунаправленная и она должна обязательно присутствовать в любом USB-устройстве.

Исходя из всего вышеописанного, для идентификации какой-то конечной точки на шине, нам нужно знать адрес устройства, к которому относится конечная точка, её номер в устройстве и направление передачи данных через эту точку.

Поскольку устройство не всегда делает абсолютно всё на что оно только способно, да и способов решения одной и той же задачи оно может иметь несколько, то обычно нет необходимости задействовать абсолютно все конечные точки. Поэтому придумали такие понятия, как интерфейс , конфигурация и альтернативные установки. Интерфейс объединяет конечные точки, предназначенные для решения какой-либо одной задачи . Наборы используемых одновременно интерфейсов называются конфигурациями . Альтернативные установки позволяют включать или отключать какие-то входящие в конфигурацию конечные точки, в зависимости от способа решения задач для которых предназначена эта конфигурация.

Самих конфигураций и альтернативных установок у каждой из этих конфигураций для одного логического устройства может существовать несколько, но в каждый момент времени только один из этих наборов может быть активен. Причём хост должен знать, какой именно набор активен и в соответствии с этим обеспечивать связь с входящими в этот набор конечными точками. Остальные конечные точки, не входящие в активный набор, не будут доступны для связи.

Поясню, что значит «обеспечивать связь с конечными точками». Для связи клиентского ПО с каждой активной конечной точкой хост создаёт коммуникационный канал (communication pipe ). Клиентское ПО, которое хочет пообщаться с конечной точкой, должно отправить к соответствующему каналу пакет запроса ввода/вывода (IRP — input/output request packet) и ждать уведомления о завершении его обработки. В IRP указывается только адрес буфера, куда надо складывать или откуда брать данные и длина передачи. Всё остальное за вас сделает хост и обслуживающие его драйвера (USBD и HCD)

Почитав вот этот пост и сопутствующую ему дискуссию, я решил попробовать внести ясность в то, что такое USB Power Delivery и как это работает на самом деле. К сожалению у меня сложилось впечатление, что большинство участников дискуссии воспринимают 100 ватт по USB слишком буквально, и не до конца понимают что за этим стоит на уровне схематики и протоколов.

Итак, кратко – основные пункты:

  • USB PD определяет 5 стандартных профилей по электропитанию – до 5V@2А, до [email protected]А, до 12V@3А, до 12-20V@3А и до [email protected]А
  • Кабели и порты для Power Delivery сертифицируются и имеют дополнительные пины в разьеме
  • Тип кабеля и его соответствие профилю определяются автоматически через дополнительные пины и определение типа USB коннектора (микро, стандарт, A, B и т.д.)
  • Обычные USB кабели (не Power Delivery) сертифицируются только по первому профилю до 5V@2A
  • При подключении распределяются роли, между тем кто дает ток (Source / Источник ) и кто потребляет (Sink / Приемник )
  • Источник и Приемник обмениваются сообщениями по специальному протоколу, который работает параллельно традиционному USB
  • В качестве физического носителя протокол использует пару – VBus / GND. Именно поэтому Power Delivery не зависит от основного USB протокола и обратно совместим с USB 2.0 и 3.0
  • Используя сообщения, источник и приемник могут в любой момент времени меняться ролями, изменять силу тока и/или напряжение, уходить в спячку или просыпаться, и т.д.
  • По желанию устройства могут поддерживать управление PD через традиционные USB запросы, дескрипторы и т.д.
Под катом - детали.

О кобелях Про кабели

USB Power Delivery работает с шестью типами коннекторов:

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

  1. USB 3.0 PD Standard-A <-> USB 3.0 PD Standard-B plug
  2. USB 3.0 PD Standard-A <-> USB 3.0 PD Micro-B plug
  3. USB 3.0 PD Micro-A <-> USB 3.0 PD Micro-B plug
  4. USB 3.0 PD Micro-A <-> USB 3.0 PD Standard-B plug
  5. USB 2.0 PD Standard-A <-> USB 2.0 PD Standard-B plug
  6. USB 2.0 PD Standard-A <-> USB 2.0 PD Micro-B plug
  7. USB 2.0 PD Micro-A <-> USB 2.0 PD Micro-B plug
  8. USB 2.0 PD Micro-A <-> USB 2.0 PD Standard-B plug
Отдельно стоит заметить что спецификация прямо запрещает извращения с несколькими коннекторами на одной из сторон соединительного кабеля, что достаточно логично, учитывая токи до 100 ватт. С другой стороны использование переходников и адаптеров не возбраняется при условии что они соответствуют профилю электропитания, и не закорачивают экран кабеля на его землю.

Про порты

После сертификации 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 также требует чтобы и в источнике и в приемнике были реализованы схемы определения падения/скачка напряжения, а так же методы определения разряженной батареи для случаев когда одна из сторон не может запитаться от своего внутреннего источника.

В качестве алгоритмов для определения разряженной батареи предлагаются следующее. Если одна из сторон выставляет сопротивление в 1кОм между экраном и землей, это свидетельствует о том что ее батарея разряжена. В такой ситуации другая сторона берет на себя роль источника и начинает отдавать минимальные 5В, чтобы дать через VBus питание противной стороне и начать обмен сообщениями по протоколу USB PD.

Как уже упоминалось ранее, для обмена сообщениями USB PD протокол использует линию VBus. Ниже приведена блок-схема, определяющая ключевые функциональные элементы передатчика:

И соответственно такая же блок-схема для приемника:

Сериализированная кодировка 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.

Протокол

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

Заголовок сообщения имеет фиксированную длину 16 бит и состоит из следующих полей:

Сообщения бывают двух видов – управляющие (control) и информационные (data).

Управляющие сообщения
Контрольные сообщения состоят только из заголовка и CRC. Количество объектов данных для таких сообщений всегда устанавливается в 0. Типы управляющих сообщений USB PD представлены в таблице ниже:

Отдельно следует упомянуть что поля вида tSourceActivity , tSinkRequest и т.д. - это константы, значения которых глобально заданы самой спецификацией в отдельной главе. Сделано это потому что они определялись опытным путем в результате прототипирования, и найденные оптимальные значения просто подставили в отдельную главу, чтобы не рыскать по всей спецификации.

Информационные сообщения
Данный вид сообщений предназначен для получения детальной информации об источнике или приемнике, а также для передачи запрашиваемых характеристик электропитания – сила тока, напряжение и т.д. Информационные сообщения всегда содержат ненулевое значение в поле ”Number of Data Objects”.

Спецификация определяет четыре вида информационных сообщений:

  • Power Data Objec t (PDO) – используется для описания характеристик порта источника или требований приемника
  • Request Data Object (RDO) – используется портом приемника для установки соглашения по характеристикам электропитания
  • BIST (Built In Self Test) Data Object (BDO) – используется для тестирования подключения на соответствие требованиям спецификации для физического соединения
  • Vendor Data Object (VDO) – используется для передачи нестандартной, дополнительной или иной проприетарной информации определяемой производителем оборудования и выходящей за рамки спецификации USB PD.
Виды информационных сообщений кодируются в поле ”Message Type” заголовка сообщения следующим образом:

Сообщение о характеристиках
Порт источника всегда обязан сообщать свои характеристики приемнику путем передачи серии 32-битных объектов PDO. Информация переданная посредством этих объектов используется для определения возможностей источника, в том числе включая возможность работать в режиме приемника.
Сообщения о характеристиках представляются в виде одного или нескольких объектов следующих за заголовком:

Сообщения о характеристиках передаются:

  • От источника к приемнику через определенный временной интервал, при непосредственном подключении кабеля. Источник должен продолжать посылать сообщения на протяжении одной минуты после подключения до тех пор пока не будет установлено успешное соглашение по электропитанию, либо приемник не вернет RDO с флагом Capability Mismatch – несоответствие характеристик.
  • От источника к приемнику с целью принудительного переустановления соглашения по электропитанию или смены характеристик.
  • В ответ на управляющие сообщения Get_Source_Cap или Get_Sink_Cap
Каждый объект PDO должен характеризовать отдельный элемент электропитания, входящего в состав устройства на максимально допустимых для него значениях напряжения. Например, встроенная батарея 2.8-4.1V, стационарный блок питания 12V и т.д. Все элементы электропитания должны поддерживать как минимум 5V и соответственно каждый источник должет иметь хотя бы один PDO соответствующий профилю с характеристиками 5V.

PDO соответствующий элементу с постоянным типом электропитания 5V всегда должен идти первым в цепочке объектов.

Структура объекта PDO:

Для каждого типа электропитания предлагаются различные характеристики.

Постоянный тип электропитания, напряжение постоянное. Источник должен иметь хотя бы один такой элемент:

Программируемый тип электропитания, напряжение может регулироваться путем запросов в пределах между минимальным и максимальным:

Вариативный тип электропитания, напряжение может изменяться в заданных пределах абсолютного минимума и абсолютного максимума, но не может регулироваться:

Батарея , данный тип используется для обозначения батарей которые могут быть напрямую подключены к линии VBus:

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

Данный запрос имеет два типа, в зависимости от адресуемого типа элемента электропитания, переданного в сообщении о характеристиках источника. Для запросов к элементу электропитания постоянного или вариативного типа, либо батареи поля ”Operating Current / Power” и ”Total Current / Prog Voltage” интерпретируются одним путем, а для запросов к элементу программируемого типа – другим путем, так как в этом случае запрашивается и напряжение, и сила тока.

Структура объекта 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 через запросы USB, в случае если устройство поддерживает Power Delivery класс, спецификация предлагает команды, которые могут использоваться для передачи PD запросов и объектов посредством USB, то есть через шину данных. Сводная таблица дана ниже:

Заключение

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

Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
ПОДЕЛИТЬСЯ: