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.
Открываем порт с нужным номером и отправляем данные.
И нам в ответ приходит то, что мы отправили. Значит, все работает как надо.
Создаем новый проект, раскидываем по форме необходимые компоненты:
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;
implementationProcedure 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
>include print
...
var dword data
print_dword_hex (usb_serial_data , data )
Название всех команд можно посмотреть в файле библиотеки.
while (usb_cdc_line_status () == 0x00 ) loop
end loop
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
}
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
Драйвера:
Так как драйвера не предназначены для нашей комбинации VID и PID, допишем наши значения в.inf файл вручную:
%DESCRIPTION%=DriverInstall, USB\VID_FF10&PID_FF10
%DESCRIPTION%=DriverInstall, USB\VID_FF10&PID_FF10
Софт:
Для отлова событий подключения\отключения устройства подключим библиотеку ComponentUSB. Не считаю нужным пояснять каждую строчку: все изменения можно увидеть в прилагаемом проекте.
Как видно, организовать обмен данными между МК и ПК через USB - не самое сложное занятие. Полученное соединение можно использовать не только для конечынх целей: оно так же подходит для отладки программы. Ведь отправить на компьютер результаты расчетов, текущие состояния регистров и переменных куда нагляднее, чем моргать парой светодиодов азбукой морзе.
И напоследок: советую заглянуть в исходный код лампы настроения. Там можно найти довольно-таки хороший вариант обработки принимаемых данных для организации удобного протокола обмена.
В этой статье мы с Вами рассмотрим принцип работы и устройство USB-флешки, а также я расскажу об особенности USB-флэш-накопителя перед другими запоминающими устройствами. C появление USB-флэшки произошел некий переворот в ПЗУ устройствах и большое количество людей по всему миру оценило удобство транспортировки данных в компактном и емком флэш-накопителе, который к тому же устойчив к воздействиям окружающей среды.
Первым делом, я хотел бы дать определение флэш-накопителю, а уж потом рассказать о его особенности перед другими запоминающими устройствами.
USB-Flash Drive (флешка, флэшка) — устройство для накопления и хранения информации. Переданные устройству данные располагаются и хранятся во флэш-памяти. Для получения информации usb флешку необходимо подключить к телевизору (Smart), компьютеру, планшету или любому другому считывающему устройству.
К основным недостаткам USB флэш-накопителя можно отнести ограниченный цикл записи/стирания, но хранящуюся в устройстве можно считать бесконечное количество раз. Цикл перезаписи современными стандартами на сегодняшний день ограничен от 10000 и до 100000 раз. Если взять во внимание минимальный цикл перезаписи (10000) то может показаться, что для эксплуатации такое количество более чем достаточно. Но на самом деле это не так.
Представьте себе ситуации, когда вы интенсивно используете флэшку перезаписывая на ней данные по нескольку раз в день. Согласитесь, что при такой эксплуатации, такое количество циклов (10000) для обновления информации уже не кажется таким уж большим. Хотя, справедливости ради, стоит сказать, что для рядового пользователя флэш-накопитель с минимальным ограничением перезаписи прослужит немало времени.
К сожалению не все USB накопители отрабатывают свой положенный срок честно. Как правило, виной этому производители мало известных фирм и компании с неизвестным происхождением, которые не соблюдают технологических норм при создании постоянного запоминающего устройства (ПЗУ). Очень часто наши китайские «друзья», которые любят делать подделки именитых брендов, не соблюдают технологию (не качественные детали) и создают дешевые накопительные устройства, которые раньше положенного времени выходят из строя.
В основе USB флэш-накопителя находиться типа NAND и небольшой микроконтроллер со встроенным ROM или RAM. Флэш-память (Flash Memory) относится к классу EEPROM (Electrically Erasable Programmable Read-Only Memory) — электрически стираемое перепрограммируемое запоминающее устройство ПЗУ или ЭСППЗУ.
Основное достоинство этого устройства в том, что оно энергонезависимо, а значит ему не нужно электричество для хранения данных. Стоит сказать, что основная особенность EEPROM в том, что хранящуюся информацию в устройстве (mini SD, MMC, SD, USB-флешка…) можно считать бесконечное количество раз, а вот количество записи к сожалению ограничено (мы уже с вами говорили о том ).
Как правило на упаковке указывают и то и другое. Но и не редки случай, когда указывают только число циклов или тип памяти.
Как я уже писал выше, что в основе USB-накопителя лежит флэш-память типа NAND или NOR. В свою очередь флэш-память содержит в себе кристалл кремния на котором размещены полевые транзисторы с плавающими и управляющими изолированными затворами. Стоит сказать, что полевые транзисторы имеют сток и исток. Так вот плавающий затвор транзистора способен удерживать заряд (электроны).
Во время записи данных на управляющий затвор подается положительное напряжение и некоторая часть электронов направляется (двигается) от стока к истоку, отклоняясь к плавающему затвору. Часть электронов преодолевает тонкий слой изолятора и проникают в плавающий затвор, где и остаются на продолжительный срок хранения. Время хранения информации измеряется годами, но так или иначе оно ограничено.
Устройство USB flash довольно компактны, мобильны и дают возможность подключиться к любому компьютеру, который имеет USB-разъем. На что только не идут производители чтобы угодить потенциальным покупателям совмещая USB накопитель со всевозможными брелками, украшениями, игрушками и авторучками…
Устройство USB Flash накопителя состоит из следующих электронных компонентов:
Преимущества 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 существуют следующие:
Вернёмся к нашим конечным точкам. Для того, чтобы отличить одну точку от другой, — конечные точки, должны иметь уникальный номер. Но это не всё. Кроме номера, каждая конечная точка имеет ещё и направление. IN — если точка предназначена для передачи данных хосту, OUT — если точка предназначена для приёма данных от хоста. Точки с одинаковыми номерами, но с разными направлениями передачи данных — это разные с точки зрения логики шины конечные точки.
Единственное исключение — конечная точка EP0. У неё вообще особый статус. Она является служебной и предназначена для общего управления устройством (конфигурирование, настройка и т.д.). Кроме того, эта конечная точка двунаправленная и она должна обязательно присутствовать в любом USB-устройстве.
Исходя из всего вышеописанного, для идентификации какой-то конечной точки на шине, нам нужно знать адрес устройства, к которому относится конечная точка, её номер в устройстве и направление передачи данных через эту точку.
Поскольку устройство не всегда делает абсолютно всё на что оно только способно, да и способов решения одной и той же задачи оно может иметь несколько, то обычно нет необходимости задействовать абсолютно все конечные точки. Поэтому придумали такие понятия, как интерфейс , конфигурация и альтернативные установки. Интерфейс объединяет конечные точки, предназначенные для решения какой-либо одной задачи . Наборы используемых одновременно интерфейсов называются конфигурациями . Альтернативные установки позволяют включать или отключать какие-то входящие в конфигурацию конечные точки, в зависимости от способа решения задач для которых предназначена эта конфигурация.
Самих конфигураций и альтернативных установок у каждой из этих конфигураций для одного логического устройства может существовать несколько, но в каждый момент времени только один из этих наборов может быть активен. Причём хост должен знать, какой именно набор активен и в соответствии с этим обеспечивать связь с входящими в этот набор конечными точками. Остальные конечные точки, не входящие в активный набор, не будут доступны для связи.
Поясню, что значит «обеспечивать связь с конечными точками». Для связи клиентского ПО с каждой активной конечной точкой хост создаёт коммуникационный канал (communication pipe ). Клиентское ПО, которое хочет пообщаться с конечной точкой, должно отправить к соответствующему каналу пакет запроса ввода/вывода (IRP — input/output request packet) и ждать уведомления о завершении его обработки. В IRP указывается только адрес буфера, куда надо складывать или откуда брать данные и длина передачи. Всё остальное за вас сделает хост и обслуживающие его драйвера (USBD и HCD)
Почитав вот этот пост и сопутствующую ему дискуссию, я решил попробовать внести ясность в то, что такое USB Power Delivery и как это работает на самом деле. К сожалению у меня сложилось впечатление, что большинство участников дискуссии воспринимают 100 ватт по USB слишком буквально, и не до конца понимают что за этим стоит на уровне схематики и протоколов.
Итак, кратко – основные пункты:
Соответственно попарно допустимы следующие виды соединений
Данное лого информирует о версии USB (2.0 или 3.0 SuperSpeed), а также о профилях электропитания которые поддерживает данный порт. Значение ”I” означает потребляемый профиль, необходимый для полноценного функционирования устройства, а значение «О» то какой профиль порт может предоставить. Примеры маркировки портов:
Как видно из схемы, USB PD также требует чтобы и в источнике и в приемнике были реализованы схемы определения падения/скачка напряжения, а так же методы определения разряженной батареи для случаев когда одна из сторон не может запитаться от своего внутреннего источника.
В качестве алгоритмов для определения разряженной батареи предлагаются следующее. Если одна из сторон выставляет сопротивление в 1кОм между экраном и землей, это свидетельствует о том что ее батарея разряжена. В такой ситуации другая сторона берет на себя роль источника и начинает отдавать минимальные 5В, чтобы дать через VBus питание противной стороне и начать обмен сообщениями по протоколу USB PD.
Как уже упоминалось ранее, для обмена сообщениями USB PD протокол использует линию VBus. Ниже приведена блок-схема, определяющая ключевые функциональные элементы передатчика:
И соответственно такая же блок-схема для приемника:
Сериализированная кодировка 4b5b и декодировка 5b4b подразумевает что все данные по шине, кроме преамбулы пакета, передаются пятибитными последовательностями в соответствии c таблицей кодировки, определяемой стандартом. Каждая такая последовательность кодирует либо одну из 16 цифр (0x00..0x0F), либо сигналы начала / синхронизации / сброса и конца пакета. Таким образом передача одного байта занимает 10 бит, 16-битного слова – 20 бит и 32-битного двойного слова – 40 бит и т.д.
Как было упомянуто выше, преамбула не кодируется в 4b5b. SOP, CRC и EOP кодируются 4b5b на физическом уровне, заголовок и полезная нагрузка кодируются на уровне логического протокола.
Сброс шины производится путем посылки трех сигналов RST1 и завершающего сигнала RST2, в соответствии с кодировкой 4b5b.
Заголовок сообщения имеет фиксированную длину 16 бит и состоит из следующих полей:
Сообщения бывают двух видов – управляющие (control) и информационные (data).
Отдельно следует упомянуть что поля вида tSourceActivity , tSinkRequest и т.д. - это константы, значения которых глобально заданы самой спецификацией в отдельной главе. Сделано это потому что они определялись опытным путем в результате прототипирования, и найденные оптимальные значения просто подставили в отдельную главу, чтобы не рыскать по всей спецификации.
Спецификация определяет четыре вида информационных сообщений:
Сообщения о характеристиках передаются:
PDO соответствующий элементу с постоянным типом электропитания 5V всегда должен идти первым в цепочке объектов.
Структура объекта PDO:
Для каждого типа электропитания предлагаются различные характеристики.
Постоянный
тип электропитания, напряжение постоянное. Источник должен иметь хотя бы один такой элемент:
Программируемый
тип электропитания, напряжение может регулироваться путем запросов в пределах между минимальным и максимальным:
Вариативный
тип электропитания, напряжение может изменяться в заданных пределах абсолютного минимума и абсолютного максимума, но не может регулироваться:
Батарея
, данный тип используется для обозначения батарей которые могут быть напрямую подключены к линии VBus:
Данный запрос имеет два типа, в зависимости от адресуемого типа элемента электропитания, переданного в сообщении о характеристиках источника. Для запросов к элементу электропитания постоянного или вариативного типа, либо батареи поля ”Operating Current / Power” и ”Total Current / Prog Voltage” интерпретируются одним путем, а для запросов к элементу программируемого типа – другим путем, так как в этом случае запрашивается и напряжение, и сила тока.
Структура объекта RDO:
На мой взгляд данной информации достаточно, чтобы получить хорошее представление о принципах работы USB Power Delivery. Я сознательно не стал углубляться в дебри, связанные с таймерами, счетчиками и обработкой ошибок.
Для систем с поддержкой SPM, спецификация рекомендует предоставить PD информацию посредством специальных типов USB дескрипторов. Не считаю нужным в них детально углубляться, просто перечислю их названия: