Как работает USB-концентратор? Как работает USB Принцип работы usb интерфейса

Начнем с минимума:
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 (Universal Serial Bus - универсальная последовательная шина) появилась по компьютерным меркам довольно давно - версия первого утвержденного варианта стандарта появилась 15 января 1996 года. Разработка стандарта была инициировна весьма авторитетными фирмами - Intel, DEC, IBM, NEC, Northen Telecom и Compaq.

Основная цель стандарта, поставленная перед его разработчиками - создать реальную возможность пользователям работать в режиме Plug&Play с периферийными устройствами. Это означает, что должно быть предусмотрено подключение устройства к работающему компьютеру, автоматическое распознавание его немедленно после подключения и последующей установки соответствующих драйверов. Кроме этого, желательно питание маломощных устройств подавать с самой шины. Скорость шины должна быть достаточной для подавляющего большинства периферийных устройств. Попутно решается историческая проблема нехватки ресурсов на внутренних шинах IBM PC совместимого компьютера - контроллер USB занимает только одно прерывание независимо от количества подключенных к шине устройств.

Возможности USB следуют из ее технических характеристик:

    Высокая скорость обмена (full-speed signaling bit rate) - 12 Mb/s

    Максимальная длина кабеля для высокой скорости обмена - 5 m

    Низкая скорость обмена (low-speed signaling bit rate) - 1.5 Mb/s

    Максимальная длина кабеля для низкой скорости обмена - 3 m

    Максимальное количество подключенных устройств (включая размножители) - 127

    Возможно подключение устройств с различными скоростями обмена

    Отсутствие необходимости в установке пользователем дополнительных элементов, таких как терминаторы для SCSI

    Напряжение питания для периферийных устройств - 5 V

    Максимальный ток потребления на одно устройство - 500 mA

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

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

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

Предназначены только для подключения к периферийному устройству

Номер контакта

Назначение

Цвет провода

Здесь GND - цепь "корпуса" для питания периферийных устройств, VBus - +5V также для цепей питания. Шина D+ предназначена для передачи данных по шине, а шина D- для приема данных.

Кабель для поддержки полной скорости шины (full-speed) выполняется как витая пара, защищается экраном и может также использоваться для работы в режиме минимальной скорости (low-speed). Кабель для работы только на минимальной скорости (например, для подключения мыши) может быть любым и неэкранированным.

    Основные элементы USB . Физическая и логическая архитектура шины.

Шина USB (Universal Serial Bus, универсальная последовательная шина) появилась в начале 1996 года как попытка решения проблемы множественности интерфейсов. К тому времени персональные компьютеры (ПК) были оснащены большим количеством разнообразных внешних интерфейсов, полезных и необходимых, но обладающих одним недостатком: все они требовали своего специального разъема и, чаще всего, выделенного аппаратного прерывания (IRQ, Interrupt ReQuest).

Общая архитектура USB

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

Физическая и логическая архитектура USB

Физическая архитектура USB определяется следующими правилами:

o устройства подключаются к хосту;

o физическое соединение устройств между собой осуществляется по топологии многоярусной звезды, вершиной которой является корневой хаб;

o центром каждой звезды является хаб;

o каждый кабельный сегмент соединяет между собой две точки: хост с хабом или функцией, хаб с функцией илидругим хабом;

o к каждому порту хаба может подключаться периферийное USB-устройство или другой хаб, при этом допускаются до 5 уровней каскадирования хабов, не считая корневого.

Детали физической архитектуры скрыты от прикладных программ в системном программном обеспечении (ПО), поэтому логическая архитектура выглядит как обычная звезда, центром которой является прикладное ПО, а вершинами – набор конечных точек/ Прикладная программа ведет обмен информацией с каждой конечной точкой.

Составляющие USB

Шина USB состоит из следующих элементов:

    хост-контроллер (host controller) – это главный контроллер, который входит в состав системного блока компьютера и управляет работой всех устройств на шине USB. Для краткости мы будем писать просто хост. На шине USB допускается наличие только одного хоста. Системный блок персонального компьютера содержит один или несколько хостов, каждый из которых управляет отдельной шиной USB;

    устройство (device) может представлять собой хаб, функцию или их комбинацию (compound device);

    порт (port) – точка подключения;

    хаб (hub, другое название - концентратор ) – устройство, которое обеспечивает дополнительные порты на шине USB. Другими словами, хаб преобразует один порт (восходящий порт, upstream port) во множество портов (нисходящие порты, downstream ports). Архитектура допускает соединение нескольких хабов (не более 5). Хаб распознает подключение и отключение устройств к портам и может управлять подачей питания на порты. Каждый из портов может быть разрешен или запрещен и сконфигурирован на полную или ограниченную скорость обмена. Хаб обеспечивает изоляцию сигментов с низкой скоростью от высокоскоростных. Хаб может ограничивать ток, потребляемый каждым портом;

    корневой хаб (root hub) – это хаб, входящий в состав хоста;

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

    логическое USB-устройство (logical device) представляет собой набор конечных точек.

    Основные свойства USB -устройств и хабов.

Свойства USB-устройств

Спецификация USB достаточно жестко определяет набор свойств, которые должно поддерживать любое USB-устройство:

o адресация – устройство должно отзываться на назначенный ему уникальный адрес и только на него;

o конфигурирование – после включения или сброса устройство должно предоставлять нулевой адрес для возможности конфигурирования его портов;

o передача данных – устройство имеет набор конечных точек для обмена данными с хостом. Для конечных точек, допускающих разные типы передач, после конфигурирования доступен только один из них;

o управление энергопотреблением – любое устройство при подключении не должно потреблять от шины ток, превышающий 100 мА. При конфигурировании устройство заявляет свои потребности тока, но не более 500 мА. Если хаб не может обеспечить устройству заявленный ток, устройство не будет использоваться;

o приостановка – USB-устройство должно поддерживать приостановку (suspended mode), при которой его потребляемый ток не превышает 500 мкА. USB-устройство должно автоматически приостанавливаться при прекращении активности шины;

o удаленное пробуждение – возможность удаленного пробуждения (remote wakeup) позволяет приостановленному USB-устройству подать сигнал хосту, который тоже может находиться в приостановленном состоянии. Возможность удаленного пробуждения описывается в конфигурации USB-устройства. При конфигурировании эта функция может быть запрещена.

    Основные принципы передачи данных по интерфейсу USB .

Принципы передачи данных

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

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

Все операции по передачи данных по шине USB инициируются хостом. Периферийные USB-устройства сами начать обмен данными не могут. Они могут только реагировать на команды хоста.

Механизм прерываний

Для шины USB настоящего механизма прерываний (как, например, для последовательного порта) не существует. Вместо этого хост опрашивает подключенные устройства на предмет наличия данных о прерывании. Опрос происходит в фиксированные интервалы времени, обычно каждые 1 – 32 мс. Устройству разрешается посылать до 64 байт данных.

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

Режимы передачи данных

Пропускная способность шины USB, соответствующей спецификации 1.1, составляет 12Мбит/с (т.е. 1,5 Мбит/с). Спецификация 2.0 определяет шину с пропускной способностью 400 Мбайт/с. Полоса пропускания делится между всеми устройствами, подключенными к шине.

Шина USB имеет три режима передачи данных:

o низкоскоростной (LS, Low-speed);

o полноскоростной (LF, Full-speed);

o высокоскоростной (HS, High-speed, только для USB 2.0).

Логические уровни обмена данными

Спецификация USB определяет три логических уровня с определенными правилами взаимодействия. USB-устройство содержит интерфейсную, логическую и функциональную части. Хост тоже делится на три части – интерфейсную, системную и ПО. Каждая часть отвечает только за определенный круг задач.

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

o уровень клиентского ПО в хосте:

· обычно представляется драйвером USB-устройства;

· обеспечивает взаимодействие пользователя с операционной системой с одной стороны и системным драйвером с другой;

o уровень системного драйвера USB в хосте(USB, Universal Serial Bus Driver):

· управляет нумерацией устройств на шине;

· управляет распределением пропускной способности шины и мощности питания;

· обрабатывает запросы пользовательских драйверов;

o уровень хост-контроллера интерфейса шины USB (HCD, Host Controller Driver):

· преобразует запросы ввода/вывода в структуры данных, по которым выполняются физические транзакции;

· работает с регистрами хоста.

В обязанности хоста входит:

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

    Организация управляющих потоков между USB-устройством и хостом.

    Организация потоков данных между USB-устройством и хостом

    Контроль состояния устроств и ведение статистики активности

    Снабжение подключенных устройств электропитанием Аппаратной частью является хост контроллер - посредник между хостом и устройствами на шине

    Физический интерфейс USB

Стандарт USB определяет электрические и механические спецификации шины. Информационные сигналы и питающее напряжение 5 В передаются по четырехпроводному кабелю. Используется дифференциальный способ передачи сигналов D+ и D- по двум проводам. Уровни сигналов передатчиков в статическом режиме должны быть ниже 0,3 В (низкий уровень) или выше 2,8 В (высокий уровень). Приемники выдерживают входное напряжение в пределах - 0,5...+3,8 В. Передатчики должны уметь переходить в высокоимпедансное состояние для двунаправленной полудуплексной передачи по одной паре проводов.

Передача по двум проводам в USB не ограничивается дифференциальными сигналами. Кроме дифференциального приемника каждое устройство имеет линейные приемники сигналов D+ и D-, а передатчики этих линий управляются индивидуально. Это позволяет различать более двух состояний линии, используемых для организации аппаратного интерфейса. Состояния Diff0 и Diff1 определяются по разности потенциалов на линиях D+ и D- более 200 мВ при условии, что на одной из них потенциал выше порога срабатывания VSE. Состояние, при котором на обоих входах D+ и D- присутствует низкий уровень, называется линейным нулем (SEO - Single-Ended Zero). Интерфейс определяет следующие состояния:

* Data J State и Data К State - состояния передаваемого бита (или просто J и К), определяются через состояния Diff0 и Diff1.

* Idle State - пауза на шине.

* Resume State - сигнал "пробуждения" для вывода устройства из "спящего" режима.

* Start of Packet (SOP) - начало пакета (переход из Idle State в К).

* End of Packet (EOP) - конец пакета. * Disconnect - устройство отключено от порта. * Connect - устройство подключено к порту. * Reset - сброс устройства.

Состояния определяются сочетаниями дифференциальных и линейных сигналов; для полной и низкой скоростей состояния DiffO и Diff1 имеют противоположное назначение. В декодировании состояний Disconnect, Connect и Reset учитывается время нахождения линий (более 2,5 мс) в определенных состояниях.

Шина имеет два режима передачи. Полная скорость передачи сигналов USB составляет 12 Мбит/с, низкая - 1,5 Мбит/с. Для полной скорости используется экранированная витая пара с импедансом 90 Ом и длиной сегмента до 5 м, для низкой - невитой неэкранированньгй кабель до 3 м. Низкоскоростные кабели и устройства дешевле высокоскоростных. Одна и та же система может одновременно использовать оба режима; переключение для устройств осуществляется прозрачно. Низкая скорость предназначена для работы с небольшим количеством ПУ, не требующих высокой скорости. Скорость, используемая устройством, подключенным к конкретному порту, определяется хабом по уровням сигналов на линиях D+ и D-, смещаемых нагрузочными резисторами R2 приемопередатчиков

    Кодирование данных при передаче по шине USB .

    Питание USB -устройств. Управление энергопотреблением.

    Внутренняя организация шины USB . Логические уровни обмена данными.

    Типы передач данных, используемые в шине USB . Конечные точки и каналы USB .

Каждое устройство USB представляет собой набор независимых конечных точек (Endpoint), с которыми хост-контроллер обменивается информацией. Конечные точки описываются следующими параметрами:

* требуемой частотой доступа к шине и допустимыми задержками обслуживания;

* требуемой полосой пропускания канала;

* номером точки;

* требованиями к обработке ошибок;

* максимальными размерами передаваемых и принимаемых пакетов;

* типом обмена;

* направлением обмена (для сплошного и изохронного обменов).

Каждое устройство обязательно имеет конечную точку с номером 0, используемую для инициализации, общего управления и опроса его состояния. Эта точка всегда сконфигурирована при включении питания и подключении устройства к шине. Оно поддерживает передачи типа "управление" (см. далее).

Кроме нулевой точки, устройства-функции могут иметь дополнительные точки, реализующие полезный обмен данными. Низкоскоростные устройства могут иметь до двух дополнительных точек, полноскоростные - до 16 точек ввода и 16 точек вывода (протокольное ограничение). Точки не могут быть использованы до их конфигурирования (установления согласованного с ними канала).

Каналом (Pipe) в USB называется модель передачи данных между хост-контроллером и конечной точкой (Endpoint) устройства. Имеются два типа каналов: потоки (Stream) и сообщения (Message). Поток доставляет данные от одного конца канала к другому, он всегда однонаправленный. Один и тот же номер конечной точки может использоваться для двух поточных каналов - ввода и вывода. Поток может реализовывать следующие типы обмена: сплошной, изохронный и прерывания. Доставка всегда идет в порядке "первым вошел - первым вышел" (FIFO); с точки зрения USB, данные потока неструктурированы. Сообщения имеют формат, определенный спецификацией USB. Хост посылает запрос к конечной точке, после которого передается (принимается) пакет сообщения, за которым следует пакет с информацией состояния конечной точки. Последующее сообщение нормально не может быть послано до обработки предыдущего, но при отработке ошибок возможен сброс необслуженных сообщений. Двухсторонний обмен сообщениями адресуется к одной и той же конечной точке. Для доставки сообщений используется только обмен типа "управление".

С каналами связаны характеристики, соответствующие конечной точке (полоса пропускания, тип сервиса, размер буфера и т. п.). Каналы организуются при конфигурировании устройств USB. Для каждого включенного устройства существует канал сообщений (Control Pipe 0), по которому передается информация конфигурирования, управления и состояния.

5. Типы передачи данных

USB поддерживает как однонаправленные, так и двунаправленные режимы связи. Передача данных производится между ПО хоста и конечной точкой устройства. Устройство может иметь несколько конечных точек, связь с каждой из них (канал) устанавливается независимо.

Архитектура USB допускает четыре базовых типа передачи данных:

* Управляющие посылки (Control Transfers), используемые для конфигурирования во время подключения и в процессе работы для управления устройствами. Протокол обеспечивает гарантированную доставку данных. Длина поля данных управляющей посылки не превышает 64 байт на полной скорости и 8 байт на низкой.

* Сплошные передачи (Bulk Data Transfers) сравнительно больших пакетов без жестких требований ко времени доставки. Передачи занимают всю свободную полосу пропускания шины. Пакеты имеют поле данных размером 8, 16, 32 или 64 байт. Приоритет этих передач самый низкий, они могут приостанавливаться при большой загрузке шины. Допускаются только на полной скорости передачи.

* Прерывания (Interrupt) - короткие (до 64 байт на полной скорости, до 8 байт на низкой) передачи типа вводимых символов или координат. Прерывания имеют спонтанный характер и должны обслуживаться не медленнее, чем того требует устройство. Предел времени обслуживания устанавливается в диапазоне 1-255 мс для полной скорости и 10-255 мс - для низкой.

* Изохронные передачи (Isochronous Transfers) - непрерывные передачи в реальном времени, занимающие предварительно согласованную часть пропускной способности шины и имеющие заданную задержку доставки. В случае обнаружения ошибки изохронные данные передаются без повтора - недействительные пакеты игнорируются. Пример - цифровая передача голоса. Пропускная способность определяется требованиями к качеству передачи, а задержка доставки может быть критичной, например, при реализации телеконференций.

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

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

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

    Периферийные устройства USB . Использование микросхем фирмы FTDI в качестве преобразователей в последовательный и параллельный интерфейсы.

D0…D7– двунаправленная шина данных в прямом коде (1 – высокий уровень, 0 – низкий уровень) с тремя состояниями;

RD#– вход строба читаемых данных. Когда наRD# низкий уровень данные из приёмного буфера типаFIFOдлиной 128 байт микросхемыFT8U245AMпоявляются на шинеD0…D7, если хотя бы один байт присутствует в буфере. По переходу от низкого уровня к высокому уровню данные снимаются с шины данных;

WR– вход строба записываемых данных. Данные с шиныD0…D7 попадают в буфер передачи типаFIFOдлиной 384 байта микросхемыFT8U245AMпо переходу от высокого уровня к низкому уровню на выводеWRпри условии, что этот буфер не заполнен полностью;

TXE#– выход наличия места в буфере передачи микросхемыFT8U245AM. Когда на этом выводе низкий уровень, данные могут быть переданы в буфер передачи по шинеD0…D7;

RXF# – выход наличия данных в приёмном буфере микросхемыFT8U245AM. Когда на этом выводе низкий уровень, данные могут быть прочитаны по шинеD0…D7;

Рис. 1. Временная диаграмма цикла чтения.

Рис.2. Временная диаграмма цикла записи.

    Интерфейс I 2 C . Последовательные шины на базе I 2 C . Основные технические характеристики шины I 2 C .

I 2 C – двухпроводной интерфейс, разработанный корпорацией Philips. В первоначальном техническом требовании к интерфейсу максимальная скорость передачи данных составляла 100 Кбит/с. Однако со временем появились стандарты на более скоростные режимы работы I 2 C. К одной шине I 2 C могут быть подключены устройства с различными скоростями доступа, так как скорость передачи данных определяется тактовым сигналом.

Протокол передачи данных разработан таким образом, чтобы гарантировать надежный прием передаваемых данных.

При передаче данных одно устройство является «Master», которое инициирует передачу данных и формирует сигналы синхронизации. Другое устройство «Slave» - начинает передачу только по команде, пришедшей от «Master».В микроконтроллерах PIC16CXXX аппаратно реализован режим «Slave» устройства в модуле SSP. Режим «Master» реализуется программно.Основные термины, используемые при описании работы с шиной I 2 C:

Передатчик – устройство, передающее данные по шине

Приемник – устройство, получающее данные с шины

«Master» - устройство, которое инициирует передачу и формирует тактовый сигнал

«Slave» - устройство, к которому обращается «Master»

Multi-«Master» - режим работы шины I 2 C с более чем одним «Master»

Арбитраж – процедура, гарантирующая, что только один «Master» управляет шиной

Синхронизация – процедура синхронизации тактового сигнала от двух или более устройств

Выходные каскады формирователей сигналов синхронизации (SCL) и данных (SDA) должны быть выполнены по схемам с открытым коллектором (стоком) для объединения нескольких выходов и через внешний резистор подключены к плюсу питания для того, чтобы на шине был уровень «1», когда ни одно устройство не формирует сигнал «0». Максимальная емкостная нагрузка ограничена емкостью 400 пФ.

Встроенный в микросхемы аппаратный алгоритм помехоподавления обеспечивает целостность данных в условиях помех значительной величины. Все I2C-совместимые устройства имеют интерфейс, который позволяет им связываться друг с другом по шине даже в том случае, если их напряжение питания существенно отличается. На следующем рисунке представлен принцип подключения нескольких ИМС с различными напряжениями питания к одной шине обмена.

Каждое устройство распознается по уникальному адресу и может работать как передатчик или приёмник, в зависимости от назначения устройства.

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

Исходя из спецификации работы шины, в каждый отдельный момент в шине может быть только один ведущий, а именно то устройство, которое обеспечивает формирование сигнала SCL шины. Ведущий может выступать как в роли ведущего-передатчика, так и ведущего-приемника. Тем не менее - шина позволяет иметь несколько ведущих, накладывая определенные особенности их поведения в формировании сигналов управления и контроля состояния шины. Возможность подключения более одного ведущего к шине означает, что более чем один ведущий может попытаться начать пересылку в один и тот же момент времени. Для устранения "столкновений", который может возникнуть в данном случае, разработана процедура арбитража - поведения ведущего при обнаружении "захвата" шины другим ведущим.

Процедура синхронизации двух устройств Эта процедура основана на том, что все I2C-устройства подключаются к шине по правилу монтажного И. В исходном состоянии оба сигнала SDA и SCL находятся в высоком состоянии.

    Протокол передачи данных по шине I 2 C . Назначение сигналов шины I 2 C . Временные диаграммы процедуры передачи данных.

Принцип работы

Физически шина I2C представляет собой двухпроводный интерфейс с двунаправленными линиями последова-

тельной синхронизации (SCL) и линии передачи данных (SDA). Шина I2C поддерживает несколько ведомых и ведущих устройств, но одновременно может быть активно только одно ведущееустройство. Любое устройство I2Cможно подключить к шине и осуществлять обмен данными с ведущим устройством. Все устройства распознаются по уникальному адресу и могут использоваться в качестве передатчикаили приемника, в зависимости от ихфункций. Изначально в шине I2C использовались 7-разрядные адреса,сейчас – 10-разрядные. Поддержива-

ется три скорости передачи битов: 100кбит/с (стандартный режим), 400 кбит/с(быстрый режим) и 3,4 Мбит/с (быстро-действующий режим). Максимальноеколичество подключаемых устройствопределяется максимальной емкостью400 пФ или примерно 20-30 устройств.Стандарт I2C определяет следующийформат, представленный на рис. 4:

– Start (Старт) – указывает, что управление шиной передано устройству ибудет передано сообщение

– Address (Адрес) – 7- или 10разрядный номер, соответствующийадресу устройства, с которого будут

считываться данные или на котороебудут записываться данные.

– R/W Bit (Бит чтения/записи) – одинбит, указывающий, что данные будут считываться с одного устройст-

ва или записываться в другое устройство

– Ack (Подтверждение) – один бит сведомого устройства с подтверждением действия ведущего устройст-

ва. Как правило, подтверждениетребуется для каждого адреса ибайта данных, но не всегда.

– Data (Данные) – целое число байт,считываемых или записываемыхустройством.

– Stop (Стоп) – указывает на завершение сообщения, ведущее устройство освобождает шину.

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

Сигналы START и STOP формируются «Master» для определения начала и окончания передачи данных соответственно.

Сигнал START формируется переходом сигнала SDA из высокого уровня в низкий при высоком уровне сигнала SCL. Сигнал STOP определяется как переход SDA из низкого уровня в высокий при высоком уровне SCL. Таким образом, при передаче данных сигнал SDA может изменяться только при низком уровне сигнала SCL.

В настоящий момент один из самых популярных интерфейсов — это безусловно 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)

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

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

Проверка настроек BIOS

Первое, на что следует обратить внимание – это настройки BIOS компьютера. Для входа в BIOS вам потребуется работоспособная клавиатура. Если клавиатура подключается к компьютеру через USB и она не работает, то вам необходимо подключить клавиатуру с разъемом PS/2. Иначе, вы просто ничего не сможете сделать.

Итак, заходим в BIOS, для чего при запуске компьютера необходимо нажать клавишу входа, обычно это DEL. Может быть и другая клавиша, которая отображается на экране и указана в руководстве к материнской плате. Войдя в BIOS, найдите раздел, отвечающий за интегрированные устройства (Integrated Peripherals) или раздел «Дополнительно» (Advanced). Здесь следует найти подраздел «Настройка конфигурации устройств» (Onboard Devices Configuration). Именно в нем находятся параметры, отвечающие за работу USB контроллеров: USB Function или USB 2.0 Controller. Данные параметры должны быть включены (Enabled). И если один из них отключен (Disabled), то наведите на него и нажмите Enter, тем самым включив его. Чтобы внесенные вами изменения не сбросились, необходимо их сохранить, нажав F10, и подтвердить сохранение, нажав клавишу Y или Enter.

После перезагрузки компьютера проверяем, работают ли порты USB. И если нет, то следует поискать причину в другом месте.

Не работают USB-порты на передней панели компьютера

Как частный случай у вас могут не работать USB только на передней панели. В такой ситуации необходимо проверить, подключены ли необходимые разъемы на материнской плате и не повреждены ли провода. Для этого открываем боковую крышку системного блока и обращаем внимание на разъем внизу материнской платы. На самой плате имеется надпись USB1 или USB2, как и на самой колодке. Провода от колодки идут на переднюю панель, и если они отключены или в одном месте оборваны, то вы обнаружили причину неисправности. Поврежденные провода следует соединить или заменить. Не лишним будет и проверить контакт в разъеме на материнской плате. Также стоит обратить внимание и на плату, расположенную на передней панели. Возможно, имеет место короткое замыкание, кстати, такое замыкание может быть спровоцировано скопившейся пылью. Поэтому обязательно очистите системный блок от пыли.

Проблемы с самим устройством или кабелем

Следующим источником проблем с USB может быть кабель, с помощью которого подключен, например, принтер. Эту неисправность легко выявить и устранить. Подсоединяем к проверяемому разъему флешку. Если она работает, то пробуем подключить с помощью подозрительного кабеля другое заведомо исправное оборудование, например USB-хаб. Если он также отказывается работать, то причина однозначно в кабеле и его следует заменить.

Перебои с питанием

Встречаются такие ситуации, когда питания для всех устройств попросту не хватает. Например, при подключении внешнего жесткого диска, который использует сразу два разъема USB, может отключаться принтер или клавиатура. В таком случае мощности блока питания недостаточно, чтобы обеспечить энергией всех потребителей. При этом проблема может проявляться не сразу, а через некоторое время после включения компьютера. Путей выхода из ситуации несколько. Если у вас установлен маломощный блок питания, например, 300 Вт, то было бы логично его поменять на более мощный, 450-600 Вт. Также можно использовать активный USB-хаб (с внешним питанием). Он позволит не только увеличить число подключаемых USB-устройств, но и запитать их от отдельного блока питания.

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

Отсутствие или некорректная установка драйверов USB

Причины, связанные с программными неисправностями в Windows 7/10, можно выявить с помощью Диспетчера устройств. Если вы замечаете, что не работает конкретно одно или несколько устройств вне зависимости от используемого порта, то это может говорить о том, что проблема в самом устройстве. Откройте Панель управления и перейдите в раздел Диспетчер устройств. Там будут отображаться все подключенные устройства. Если в списке имеются пункты, возле которых стоит желтый восклицательный знак или вместо названия стоит Неизвестное устройство, то проблема в этом самом устройстве. Здесь может быть несколько вариантов неполадок.

Часто USB-входы перестают работать после переустановки Windows 7/10. Причиной является неправильная установка драйверов или же необходимые драйвера могут быть вообще не найдены. Придется осуществлять подбор и инсталляцию вручную.

Нередко для устранения неисправности требуется просто обновить драйвера. Так, если отключено автоматическое обновление Windows, да и сама система была установлена достаточно давно, то теряется актуальность программного обеспечения, могут появляться системные ошибки. Устройство при этом начинает работать некорректно, а то и вовсе перестает функционировать. Для обновления (переустановки) драйверов контроллера USB можно воспользоваться CD/DVD-диском с драйверами для материнской платы или скачать необходимые драйвера с сайта производителя системной платы.

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

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

USB-порты не работают из-за повреждения контроллера

Если ни одно из вышеперечисленных действий не помогло восстановить работоспособность портов USB, то следует проверить контроллер USB материнской платы, который мог выйти из строя. Качественный ремонт и диагностику в таком случае следует поручить специалистам сервисного центра. Как вариант выхода из проблемы – попробуйте установить плату расширения, так называемый USB PC контроллер, устанавливающийся в разъем PCI на материнской плате. Такое решение заметно дешевле ремонта контроллера USB материнской платы, а при использовании дополнительного USB-хаба проблема с недостатком портов будет вообще не актуальна.

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

Разъем USB типа A наиболее распространен и является самым узнаваемым. Компьютерные мышки, клавиатуры, внешние жесткие диски оснащены именно этим коннектором. Разработка этого форм-фактора USB была закончена в 90-х годах прошлого столетия, релиз состоялся вместе с первой версией стандарта. Основным преимуществом является прочность и надежность, позволяющие выдержать большое количество подключений без каких-либо проблем. Несмотря на прямоугольную форму разъема, его нельзя воткнуть неправильно, благодаря специальной защите. Однако из-за больших габаритов, не подходивших для портативных устройств, были разработаны USB разъемы меньших размеров.

Коннекторы USB типа B обычно используются для подключения периферийных устройств к компьютеру на стороне устройства. Сейчас этот тип разъема не распространен. Также существуют портативные разъемы типа B – Mini USB и Micro USB .

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

USB Type- C или USB-C – это последний из представленных стандартов разъемов USB. Релиз спецификации состоялся в 2014 году. Данная версия обеспечивает высокую скорость передачи данных, а также возможность двустороннего подключения.

Стандарты USB

15 января 1996 года была представлена первая спецификация стандарта универсальной последовательной шины — USB 1.0 . Скорость передачи данных не превышала 12 Мбит/c, а максимальная сила тока, подаваемая на подключенные устройства, составляла 500 мА.

Версия USB 1.1 лишь исправляла ошибки, допущенные при проектировании первой спецификации, однако именно 1.1 впервые была широко распространена. Стандарт USB 2.0 был анонсирован уже в апреле 2000 года и служил обновлением для USB 1.1.

USB 2.0 предоставил дополнительную пропускную способность для приложений, мультимедиа и хранения данных. Скорость передачи данных возросла в 40(!) раз. Для обеспечения плавного перехода на новый стандарт как для потребителей, так и для производителей, USB 2.0 имел полную совместимость с оригинальными USB-устройствами.

Данный стандарт поддерживает три режима скорости (1.5, 12 и 480 мегабит в секунду):

  • Low Speed (не более 1.5 Мбит/с) – клавиатуры, мыши, джойстики;
  • Full Speed (не более 12 Мбит/с) – аудио- и видеоустройства;
  • High Speed (не более 480 Мбит/с) – высокопроизводительные периферийные устройства;

Внедрение USB 2.0 позволило сильно продвинуться в развитии периферийных «девайсов» для персональных компьютеров. Этот стандарт позволил подключать несколько энергоемких устройств к хосту одновременно.

Стандарт USB 3.0 (SuperSpeed ​​ USB ) стал официальным 17 ноября 2008 года. Новая спецификация поддерживала скорость передачи в 10 раз большую (до 4.8 гигабит в секунду), нежели USB 2.0. Максимальная сила тока, подаваемая на периферийные устройства, возросла с 500 до 900 мА. Это позволило не использовать дополнительные источники питания для некоторых гаджетов, а также увеличить количество устройств, питающихся от одного порта.

Переход на USB 3.0 был очень медленным. Корпорация Intel отложила внедрение стандарта в свои чипсеты до 2011 года. Отсутствовала поддержка новой спецификации и со стороны софта: ни Windows, ни Linux на тот момент не могли работать с версией 3.0.

Летом 2013 года был разработан обновленный стандарт — USB 3.1 . Скорость передачи данных возросла до 10 Гбит/с. Стандарт 3.1 обратно совместим с версиями 2.0 и 3.0. Именно с этой версией стали появляться новые разъемы USB Type-C.

Версия USB 3.2 обещает снова увеличить скорость обмена данными вдвое – уже до 20 Гбит/с.

USB-хабы (USB-концентраторы, USB-разветвители)

Компьютеры, как минимум, имеют один или два USB-разъема. Но с таким количеством USB-устройств на рынке, вы быстро исчерпаете лимит доступных портов. У вас могут быть одновременно подключены клавиатура, мышь, принтер, микрофон и веб-камера, работающие через USB. Возникает очевидный вопрос: «Как подключить все устройства?»

Легкое решение проблемы — купить недорогой USB-концентратор (хаб). Что же такое USB-хаб?

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

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

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

Концентраторы могут питать или не питать подключенные устройства. У энергоемких устройств (принтеров, сканеров и т.д.) есть свой собственный источник питания, но устройства с низким энергопотреблением (мыши, клавиатуры и т.д.) получают питание от компьютера. Это сильно упрощает работу с ними. Мощность (до 500 миллиампер с напряжением 5 вольт для USB 2.0 и 900 миллиампер для USB 3.0) поступает с шины компьютера. Если у вас много устройств с автономным питанием (например, принтеры и сканеры), то ваш концентратор не нуждается в питании. Если же у вас много устройств без питания, таких как мыши и клавиатуры, вам, вероятно, нужен мощный концентратор с собственным блоком питания.

Как работает USB?

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

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

  • IN (хост готов принимать данные с устройства);
  • OUT (хост готов передавать данные на устройство);
  • SETUP (хост сообщает устройству о последующей передаче конфигурационной информации);

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

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