Интерфейс 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 - Универсальный Последовательный Интерфейс) предназначен для подключения периферийных устройств к персональному компьютеру. Позволяет производить обмен информацией с периферийными устройствами на трех скоростях (спецификация USB 2.0 ):

  • Низкая скорость (Low Speed - LS) - 1,5 Мбит/с;
  • Полная скорость (Full Speed - FS) - 12 Мбит/с;
  • Высокая скорость (High Speed - HS) - 480 Мбит/с.
Для подключения периферийных устройств используется 4-жильный кабель: питание +5 В, сигнальные провода D+ и D- , общий провод.
Интерфейс USB соединяет между собой хост (host ) и устройства. Хост находится внутри персонального компьютера и управляет работой всего интерфейса. Для того, чтобы к одному порту USB можно было подключать более одного устройства, применяются хабы (hub - устройство, обеспечивающее подключение к интерфейсу других устройств). Корневой хаб (root hub ) находится внутри компьютера и подключен непосредственно к хосту. В интерфейсе USB используется специальный термин "функция" - это логически законченное устройств, выполняющее какую-либо специфическую функцию. Топология интерфейса USB представляет собой набор из 7 уровней (tier ): на первом уровне находится хост и корневой хаб, а на последнем - только функции. Устройство, в состав которого входит хаб и одна или несколько функций, называется составным (compaund device ).
Порт хаба или функции, подключаемый к хабу более высокого уровня, называется восходящим портом (upstream port ), а порт хаба, подключаемый к хабу более низкого уровня или к функции называется нисходящим портом (downstream port ).
Все передачи данных по интерфейсу иницируются хостом. Данные передаются в виде пакетов. В интерфейсе USB испольуется несколько разновидностей пакетов:
  • пакет-признак (token paket ) описывает тип и направление передачи данных, адрес устройства и порядковый номер конечной точки (КТ - адресуемая часть USB-устройства); пакет-признаки бывают нескольких типов: IN , OUT , SOF , SETUP ;
  • пакет с данными (data packet ) содержит передаваемые данные;
  • пакет согласования (handshake packet ) предназначен для сообщения о результатах пересылки данных; пакеты согасования бывают нескольких типов: ACK , NAK , STALL .
Таким образом каждая транзакция состоит из трех фаз: фаза передачи пакета-признака, фаза передачи данных и фаза согласования.
В интерфейсе USB используются несколько типов пересылок информации.
  • Управляющая пересылка (control transfer ) используется для конфигурации устройства, а также для других специфических для конкретного устройства целей.
  • Потоковая пересылка (bulk transfer ) используется для передачи относительно большого объема информации.
  • Пересылка с прерыванием (iterrupt transfer ) испольуется для передачи относительно небольшого объема информации, для которого важна своевременная его пересылка. Имеет ограниченную длительность и повышенный приоритет относительно других типов пересылок.
  • Изохронная пересылка (isochronous transfer ) также называется потоковой пересылкой реального времени. Информация, передаваемая в такой пересылке, требует реального масштаба времени при ее создании, пересылке и приеме.

Потоковые пересылки характеризуются гарантированной безошибочной передачей данных между хостом и функцией посредством обнаружения ошибок при передаче и повторного запроса информации.
Когда хост становится готовым принимать данные от функции, он в фазе передачи пакета-признака посылает функции IN -пакет. В ответ на это функция в фазе передачи данных передает хосту пакет с данными или, если она не может сделать этого, передает NAK - или STALL -пакет. NAK -пакет сообщает о временной неготовности функции передавать данные, а STALL -пакет сообщает о необходимости вмешательства хоста. Если хост успешно получил данные, то он в фазе согласования посылает функции ACK
Когда хост становится готовым передавать данные, он посылает функции OUT -пакет, сопровождаемый пакетом с данными. Если функция успешно получила данные, он отсылает хосту ACK -пакет, в противном случае отсылается NAK- или STALL -пакет.
Управляющие пересылки содержат не менее двух стадий: Setup-стадия и статусная стадия . Между ними может также располагаться стадия передачи данных . Setup-стадия используется для выполнения SETUP-транзакции , в процессе которой пересылается информация в управляющую КТ функции. SETUP-транзакция содержит SETUP -пакет, пакет с данным и пакет согласования. Если пакет с данными получен функцией успешно, то она отсылает хосту ACK -пакет. В противном случае транзакция завершается.
В стадии передачи данных управляющие пересылки содержат одну или несколько IN- или OUT- транзакций, принцип передачи которых такой же, как и в потоковых пересылках. Все транзакции в стадии передачи данных должны производиться в одном направлении.
В статусной стадии производится последняя транзакция, которая использует те же принципы, что и в потоковых пересылках. Направление этой транзакции противоположно тому, которое использовалось в стадии передачи данных. Статусная стадия служит для сообщения о результате выполнения SETUP-стадии и стадии передачи данных. Статусная информация всегда передается от функции к хосту. При управляющей записи (Control Write Transfer ) статусная информация передается в фазе передачи данных статусной стадии транзакции. При управляющем чтении (Control Read Transfer ) статусная информация возвращается в фазе согласовании статусной стадии транзакции, после того как хост отправит пакет данных нулевой длины в предыдущей фазе передачи данных.
Пересылки с прерыванием могут содержать IN - или OUT -пересылки. При получении IN -пакета функция может вернуть пакет с данными, NAK -пакет или STALL -пакет. Если у функции нет информации, для которой требуется прерывание, то в фазе передачи данных функция возвращает NAK -пакет. Если работа КТ с прерыванием приостановлена, то функция возвращает STALL -пакет. При необходимости прерывания функция возвращает необходимую информацию в фазе передачи данных. Если хост успешно получил данные, то он посылает ACK -пакет. В противном случае согласующий пакет хостом не посылается.
Изохронные транзакции содержат фазу передачи признака и фазу передачи данных , но не имеют фазы согласования . Хост отсылает IN - или OUT -признак, после чего в фазе передачи данных КТ (для IN -признака) или хост (для OUT -признака) пересылает данные. Изохронные транзакции не поддерживают фазу согласования и повторные посылки данных в случае возникновения ошибок.

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

Фирма-производитель Наименование Описание

Atmel
AT43301 Контроллер LS/FS-хаба 1-4 с общим управлением питанием нисходящих портов.
AT43312A Контроллер LS/FS-хаба 1-4 с индивидуальным управлением питанием нисходящих портов.
AT43320A Микроконтроллер на ядре AVR. Имеет встроенные USB-функцию и хаб с 4 внешними нисходящими портами, работающие в LS/FS-режимах, 512 байт ОЗУ, 32х8 регистров общего назначения, 32 программируемых вывода, последовательный и SPI-интерфейсы. Функция имеет 3 КТ с буферами FIFO размером 8 байт. Для нисходящих портов хаба предусмотрено индивидуальное управление питанием.
AT43321 Контроллер клавиатуры на ядре AVR. Имеет встроенные USB-функцию и хаб с 4 внешними нисходящими портами, работающие в LS/FS-режимах, 512 байт ОЗУ, 16 кбайт ПЗУ, 32х8 регистров общего назначения, 20 программируемых вывода, последовательный и SPI-интерфейсы. Функция имеет 3 КТ. Для нисходящих портов хаба предусмотрено индивидуальное управление питанием.
AT43324

Микроконтроллер на ядре AVR. Имеет встроенные USB-функцию и хаб с 2 внешними нисходящими портами, работающие в LS/FS-режимах, 512 байт ОЗУ, 16 кбайт ПЗУ, 32х8 регистров общего назначения, 34 программируемых вывода. Клавиатурная матрица может иметь размер 18х8. Контроллер имеет 4 выхода для подключения светодиодов. Функция имеет 3 КТ. Для нисходящих портов хаба предусмотрено индивидуальное управление питанием.

AT43355 Микроконтроллер на ядре AVR. Имеет встроенные USB-функцию и хаб с 2 внешними нисходящими портами, работающие в LS/FS-режимах, 1 кбайт ОЗУ, 24 кбайт ПЗУ, 32х8 регистров общего назначения, 27 программируемых выводов, последовательный и SPI-интерфейсы, 12-канальный 10-разрядный АЦП. Функция имеет 1 управлющую КТ и 3 программируемых КТ с буферами FIFO размером 64/64/8 байт.
Fairchild Semiconductor USB100 Контроллер манипуляторов (мышь, трекбол, джойстик). Поддерживает 2D/3D-мышь, джойстик с тремя потенциометрами, манипулятор с 16 кнопками.

Intel
8x931Ax Микроконтроллер с архитектурой MSC-51. Имеет встроенную USB-функцию, работающую в LS/FS-режимах, 256 байт ОЗУ, 0/8 кбайт ПЗУ, 8х4 регистра общего назначения, 32 программируемых вывода, последовательный интерфейс, интерфейс управления клавиатурой. Функция имеет 3 КТ с буферами FIFO размером 8/16/8 байт.
8x931Hx Микроконтроллер с архитектурой MSC-51. Имеет встроенную USB-функцию и хаб с 4 внешними нисходящими портами, работающие в LS/FS-режимах, 256 байт ОЗУ, 0/8 кбайт ПЗУ, 8х4 регистра общего назначения, 32программируемых вывода, последовательный интерфейс, интерфейс управления клавиатурой. Функция имеет 3 КТ с буферами FIFO размером 8/16/8 байт.
8x930Ax Микроконтроллер с архитектурой MSC-251. Имеет встроенную USB-функцию, работающую в LS/FS-режимах, 1024 байта ОЗУ, 0/8/16 кбайт ПЗУ, 40 регистров общего назначения, 32 программируемых вывода, последовательный интерфейс. Функция имеет 4(6) КТ с буферами FIFO размером 16/1024(256)/16(32)/16(32)/(32)/(16) байт.
8x930Hx Микроконтроллер с архитектурой MSC-251. Имеет встроенную USB-функцию и хаб с 4 внешними нисходящими портами, работающие в LS/FS-режимах, 1024 байта ОЗУ, 0/8/16 кбайт ПЗУ, 40 регистров общего назначения, 32 программируемых вывода, последовательный интерфейс. Функция имеет 4 КТ с буферами FIFO размером 16/1024/16/16 байт.

Microchip
PIC16C745 Микроконтроллер с архитектурой PIC. Имеет встроенную USB-функцию, работающую в LS-режиме, 256 байт ОЗУ, 14336 байт ПЗУ, 22 программируемых вывода, последовательный интерфейс, 5-канальный 8-битный АЦП.
PIC16C765 Микроконтроллер с архитектурой PIC. Имеет встроенную USB-функцию, работающую в LS-режиме, 256 байт ОЗУ, 14336 байт ПЗУ, 33 программируемых вывода, последовательный интерфейс, 8-канальный 8-битный АЦП.
PIC18F2450 Микроконтроллер с архитектурой PIC. Имеет встроенную USB-функцию, работающую в LS/FS-режиме, 1536 байт ОЗУ, 16384 байт ПЗУ, 19 программируемых выводов, последовательный и SPI-интерфейсы, 5-канальный 10-битный АЦП. Функция имеет 8 КТ.
PIC18F2550 Микроконтроллер с архитектурой PIC. Имеет встроенную USB-функцию, работающую в LS/FS-режиме, 1536 байт ОЗУ, 32768 байт ПЗУ, 19 программируемых выводов, последовательный, CAN- и SPI-интерфейсы, 5-канальный 10-битный АЦП. Функция имеет 8 КТ.
PIC18F4450 Микроконтроллер с архитектурой PIC. Имеет встроенную USB-функцию, работающую в LS/FS-режиме, 1536 байт ОЗУ, 16384 байт ПЗУ, 34 программируемых вывода, последовательный, CAN- и SPI-интерфейсы, 8-канальный 10-битный АЦП. Функция имеет 8 КТ.
PIC18F4550 Микроконтроллер с архитектурой PIC. Имеет встроенную USB-функцию, работающую в LS/FS-режиме, 1536 байт ОЗУ, 32768 байт ПЗУ, 34 программируемых вывода, последовательный, CAN- и SPI-интерфейсы, 8-канальный 10-битный АЦП. Функция имеет 8 КТ.
Texas Instruments TUSB2036 Контроллер LS/FS-хаба 1-3 с индивидуальным управлением питанием нисходящих портов.

Периферийные устройства, такие как мышь, клавиатура, 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 . Рассмотрим основные понятия, структуру интерфейса, разберемся, как происходит передача данных, а в ближайшем будущем реализуем все это на практике 😉 Короче, приступаем!

Существует ряд различных спецификаций USB . Началось все с USB 1.0 и USB 1.1 , затем интерфейс эволюционировал в USB 2.0 , относительно недавно появилась окончательная спецификация USB 3.0 . Но на данный момент наиболее распространенной является реализация USB 2. 0.

Ну и для начала основные моменты и характеристики. USB 2.0 поддерживает три режима работы:

  • High Speed – до 480 Мб/с
  • Full Speed – до 12 Мб/с
  • Low Speed – до 1.5 Мб/с

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

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

Давайте немного отвлечемся и поговорим о “железной части” интерфейса.

Существуют два типа коннекторов – Type A и Type B.

Как уже понятно из рисунка Type A всегда обращен к хосту. Именно такие разъемы мы видим на компьютерах и ноутбуках. Коннекторы Type B всегда относятся к подключаемым USB-устройствам. Кабель USB состоит из 4 проводов разных цветов. Ну, собственно, красный – это питание (+5 В), черный – земля, белый и зеленый предназначены для передачи данных.

Помимо изображенных на рисунке, существуют также другие варианты исполнения USB-коннекторов, например, mini-USB и другие, ну это вы и так знаете 😉

Наверно стоит немного коснуться способа передачи данных, но углубляться в это не будем) Итак, при передаче данных по шине USB используется принцип кодирования NRZI (без возврата к нулю с инверсией). Для передачи логической “1” необходимо повысить уровень линии D+ выше +2.8 В, а уровень линии D- надо понизить ниже +0.3 В. Для передачи нуля ситуация противоположная – (D- > 2.8 В) и (D+ < 0.3 В).

Отдельно стоит обсудить питание устройств USB . И тут также возможно несколько вариантов.

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

  • Low-power
  • High-power

Разница тут заключается в том, что low-power устройства не могут потреблять больше, чем 100 мА . А устройства high-power должны потреблять не более 100 мА лишь на этапе конфигурации. После того, как они сконфигурированы хостом их потребление может составлять до 500 мА .

Кроме того, устройства могут иметь свой собственный источник питания. В этом случае они могут получать до 100 мА от шины, а все остальное забирать у своего источника)

С этим вроде бы все, давайте потихоньку переходить к структуре передаваемых данных. Все-таки это представляет для нас наибольший интерес 😉

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

Каждый кадр включает в себя пакет , затем следуют транзакции для разных конечных точек, ну и завершается все это пакетом EOF (End Of Frame). Если говорить совсем точно, то EOF – это не совсем пакет в привычном понимании этого слова – это интервал времени, в течение которого обмен данными запрещен.

Каждая транзакция имеет следующий вид:

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

Уже очень много раз прозвучало слово “пакет” применительно к интерфейсу USB , так что пора разобраться что он из себя представляет. Начнем с пакета Token :

Пакеты Token бывают трех типов:

  • Setup

Вот к чему я это рассказал..) В зависимости от типа пакета значение поля PID в Token пакете может принимать следующие значения:

  • Token пакет типа OUT – PID = 0001
  • Token пакет типа IN – PID = 1001
  • Token пакет типа SETUP – PID = 1101
  • Token пакет типа SOF – PID = 0101

Переходим к следующей составной части пакета Token – поля Address и Endpoint – в них содержатся адрес USB устройства и номер конечной точки , которой предназначена транзакция .

Ну и поле CRC – это контрольная сумма, с этим понятно.

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

Итак, на очереди – то есть пакет данных.

Тут все в принципе так же, как и в пакете Token , только вместо адреса устройства и номера конечной точки здесь у нас передаваемые данные.

Осталось нам рассмотреть Status пакеты и пакеты SOF :

Тут PID может принимать всего лишь два значения:

  • Пакет принят корректно – PID = 0010
  • Ошибка при приеме пакета – PID = 1010

И, наконец, пакеты:

Здесь видим новое поле Frame – оно содержит в себе номер передаваемого кадра.

Давайте в качестве примера рассмотрим процесс записи данных в USB-устройство. То есть рассмотрим пример структуры кадра записи.

Кадр, как вы помните состоит из транзакций и имеет следующий вид:

Что представляют из себя все эти транзакции? Сейчас разберемся! Транзакция SETUP :

Транзакция OUT :

Аналогично при чтении данных из USB-устройства кадр выглядит так:

Транзакцию SETUP мы уже видели, посмотрим на транзакцию IN 😉

Как видите, все эти транзакции имеют такую структуру, как мы обсуждали выше)

В общем, думаю достаточно на сегодня 😉 Довольно-таки длинная статья получилась, надеюсь в ближайшее время попробуем реализовать интерфейс USB на практике!

К омпьютерный мир наконец-то объединился вокруг стандарта зарядки, после нескольких лет фирменных адаптеров и некрасивых стен развлетленных источников питания. Ну, вроде: Мы уже видим некоторую фрагментацию с точки зрения нового разъема USB Type-C , который в конечном итоге может заменить USB, а также то, что, к счастью, оказывается, недолгая одержимость Samsung была с множеством USB разъемов micro-B для своей линии Galaxy. Но помимо этого, и с очевидным исключением разъема Lightning от Apple, микро USB уничтожил склонность отрасли для пользовательских портов.

Десять лет назад, вы всегда должны были убедиться, что у вас правильный источник питания для каждого из ваших гаджетов. Как правило, блоки питания бывали даже не маркированы. Сегодня вы можете зарядить свой телефон в доме вашего друга (приобрести зарядку и другие аксессуары можн на сайте https://itsell.ua в Украине, подключить для чтения электронных книг в любой компьютер, и загружать фотографии с цифровой камеры непосредственно к телевизору, все благодаря стандартизированным разъемам. На его месте, хотя, есть новая проблема: питание USB. Не все зарядные устройства USB, разъемы и кабели созданы равными. Вы, наверное, заметили, что некоторые зарядные устройства мощьнее, чем другие. Иногда, один USB-разъем на ноутбуке, казалось бы, более мощным, чем другой. На некоторых настольных ПК, даже когда они выключены, вы можете зарядить свой смартфон через гнездо USB. Оказывается, есть способ решить все это безумие – но для начала мы должны объяснить, как на самом деле работает питание USB.

Есть в настоящее время четыре спецификации USB – USB 1.0, 2,0, 3,0, и 3,1 – в дополнение к новому разъему USB-C. Мы будем указать, где они существенно различаются, но по большей части, мы сосредоточимся на USB 3.0, так как это самый распространенный. В сети USB, есть один хост и одно устройство. Почти в каждом случае, ваш компьютер является хозяином, а ваш смартфон, планшет, или камера устройства. Питание всегда течет от хоста к устройству, хотя данные могут течь в обоих направлениях, например, при копировании файлов туда и обратно между вашим компьютером и телефоном.

Хорошо, теперь цифры. USB 1.0 или 2.0 разъем имеет четыре контакта, и кабель USB имеет четыре провода. Внутренние контакты передают данные (D + и D-), а внешние контакты обеспечивают 5-вольтового источника питания. Порт USB 3.0 добавляет дополнительный ряд из пяти штифтов, так что USB 3.0-совместимые кабели имеют девять проводов. С точки зрения фактической мощности (миллиампер или мА), есть три вида USB-порта продиктованных текущей спецификации: стандартный порт downstream, порт зарядки downstream, а также специальный порт зарядки. Первые два можно найти на вашем компьютере (и должны быть помечены как таковые), и третий вид относится к “неразумным” зарядным устройствам стен.

В спецификации USB 1.0 и 2.0, стандартный порт downstream способен выдавать до 500 мА (0,5А); с USB 3.0, он доходит до 900mA (0.9A). В процессе заряда и выделенные порты для зарядки обеспечивают до 1,500mA (1.5A). USB 3.1 имеют пропускную способность до 10 Гбит, что называется режим SuperSpeed +, в результате, это примерно эквивалентно с первого поколения Thunderbolt. Он также поддерживает мощность 1.5А и 3А по шине 5V.

Разъем USB Type-C

USB Type-C полностью другой разъем. Он универсальный; Вы можете поместить его в любом случае, и он будет работать, в отличие от USB или как разъем Lightning от Apple. USB-C также теоретически в два раза больше имеет пропускной способности в отличии от USB 3.0, и может выводить больше мощности. Apple, присоединился к USB Type-C с USB 3.1 на своем 12-дюймовом MacBook, и Google включил его на теперь в Chromebook Pixel . Кроме того, мы начинаем видеть его на телефонах, с первым из которых OnePlus 2 ; текущие популярные модели включают в себя Google Nexus 6P, OnePlus 3 , а также Samsung Galaxy версии 7 . Но также могут быть старшие версии с портами USB, которые поддерживают стандарт 3.1.

Спецификация USB также позволяет порту “sleep-and-charge”, в котором USB-порты на компьютере, при выключении питания остаются активными. Возможно, вы заметили это на настольном компьютере, где всегда есть какое-то питание, протекающий через материнскую плату, некоторые ноутбуки также способны sleep-and-charge.

Универсальное зарядное устройство

Теперь, это то, что диктует спецификации. Но есть много USB-зарядных устройств, которые не соответствуют этим характеристикам – в основном левого производства или мировых гигантов. IPad использует зарядное устройство от Apple, например, обеспечивает 2.1A на 5В; Amazon’s Kindle Fire использует зарядное устройство выходы 1.8A; и многие автомобильные зарядные устройства могут выводить что-либо от 1A до 2.1A.

Существует огромная разница, между обычными USB портами, рассчитанных на 500 мА, а также выделенных портов зарядки, которые варьируются вплоть до 3,000mA. Это приводит к важному вопросу: Если вы берете телефон, который поставляется вместе с зарядным устройством 900mA, и подключаете его к зарядному устройству 2,100mA IPAD, в качестве примера, может ли он взорваться ?

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

Ответ в том, что возраст вашего устройства играет важную роль, диктуя и как быстро он может быть заряжен, и может ли он быть заряжен с помощью универсального зарядного устройства для всех. Еще в 2007 году, USB Implementers Forum выпустила Charging Specification батарей, которые стандартизированы как более быстрые способы зарядки USB – устройств, либо путем откачки больше ампера через порты USB на вашем компьютере, или с помощью настенного зарядного устройства. Вскоре после этого, USB устройства, реализованные по этой спецификации начали покупать.

Если у вас есть современное устройство USB – на самом деле, практически любой смартфон, планшет, или камеры – вы должны иметь возможность для подключения к USB-порту высокой силы тока и наслаждаться более быстрой зарядкой. Если у вас есть старый продукт, тем не менее, он, вероятно, не будет работать с USB-портами, которые используют спецификации зарядной батареи. Он может работать только со старыми, оригинал (500мА) USB 1.0 и 2.0 портами ПК. В некоторых (более старых) случаях, USB устройства можно заряжать только с помощью компьютеров с определенными драйверами, но подобным компьютерам идет уже более десяти лет.

Есть несколько других вещей, в которых надо быть в курсе. В то время как компьютеры могут иметь два вида USB-порта – стандартный downstream или зарядки – OEM downstream -производители не всегда маркируют их как таковые. В результате, вы можете иметь устройство, которое заряжает от одного порта на вашем ноутбуке, но не от другого. Это черта старых компьютеров, так как там, кажется, не причин использовать стандартные порты downstream, когда порты зарядки высокой силы тока доступны. Большинство производителей сейчас ставят маленький значок молнии над правильной зарядки портов на ноутбуках, а в некоторых случаях, эти порты могут даже остаться при закрытой крышке.

Аналогичным образом, некоторые внешние устройства – жесткие диски 3,5-дюймовые, в первую очередь – требуют больше энергии, чем обычный порт USB может обеспечить. Вот почему они включают в себя два USB-порта, Y-кабель или внешний адаптер питания переменного тока.

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