Шина usb, внутрішня організація шини usb - розробка драйвера, що розпізнає usb-пристрій як

Гранична швидкість передачі даних по шині USB специфікації 1.1 становить 12 Мбіт / с (Full Speed). Повільні пристрої використовують низьку швидкість передачі - 1,5 Мбіт / с (Low Speed). Стандарт USB версії 2.0 підтримує фізичну швидкість передачі до 480 Мбіт / с (High Speed). Дані передаються послідовно по парі провідників. Харчування для деяких пристроїв є по окремим провідникам харчування і заземлення (для пристроїв з невеликим енергоспоживанням).

Шина usb, внутрішня організація шини usb - розробка драйвера, що розпізнає usb-пристрій як

Робота програміста, що створює драйвер зовнішнього (що не знаходиться на материнській платі) USB пристрою зводиться до того, щоб скористатися програмним інтерфейсом системних драйверів шини USB, спілкування з яким відбувається за допомогою пакетів, званих URB (USB Request Block) пакетами. Робота з регістрами USB контролерів на материнській платі тепер стала долею вузького кола фахівців - розробників материнських плат і операційних систем. Всім іншим розробникам USB-пристроїв в операційній системі Windows пропонується досить розвинений програмний інтерфейс WDM-драйверів, які беруть на себе всі апаратно-орієнтовані операції.

Внутрішня організація шини USB

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

Система USB розділяється на три логічних рівня з певними правилами взаємодії. Пристрій USB містить інтерфейсну, логічну і функціональну частини. Хост теж ділиться на три частини: интерфейсную, системну і програмне забезпечення. Кожна частина відповідає тільки за певне коло завдань. Логічне і реальна взаємодія між ними показано на малюнку 3.

Шина usb, внутрішня організація шини usb - розробка драйвера, що розпізнає usb-пристрій як

Таким чином, операція обміну даними між прикладною програмою і шиною USB виконується шляхом передачі буферів пам'яті через такі рівні:

· Рівень клієнтського програмного забезпечення в хості - зазвичай представляється драйвером пристрою USB, забезпечує взаємодію користувача з операційною системою з одного боку і системним драйвером з іншого;

· Рівень системного програмного забезпечення USB в хост (USBD, Universal Serial Bus Driver) - управляє нумерацією пристроїв на шині, управляє розподілом пропускної спроможності шини і потужності харчування, обробляє запити користувача драйверів;

· Хост-контролер інтерфейсу шини USB (HCD, Host Controller Driver) - перетворює запити введення / виведення в структури даних, за якими хост-контролер виконує фізичні транзакції, працює з регістрами хост-контролера.

Рівень клієнтського програмного забезпечення визначає тип передачі даних, необхідний для виконання затребуваної прикладної програмою операції. Після визначення типу передачі даних цей рівень передає системному рівню наступне:

· Буфер пам'яті, званий клієнтським буфером;

· Пакет IRP, який вказує тип необхідної операції. Безпосередньою обробкою запиту займається системний драйвер USB.

Рівень системного драйвера USB необхідний для управління ресурсами USB. Він відповідає за виконання наступних дій:

· Розподіл смуги пропускання шини USB;

Транзакція на шині USB - це послідовність обміну пакетами між хостом і периферійним пристроєм, в ході якої може бути переданий або прийнятий один пакет даних. Коли клієнтське програмне забезпечення передає IRP рівню системного драйвера, USB-драйвер перетворює їх в одну або кілька транзакцій шини і потім передає вийшов перелік транзакцій драйверу контролера хоста.

Системний драйвер USB складається з драйвера USB і драйвера хост-контролера. Коли клієнтський рівень передає IRP рівню системного забезпечення USB, USB-драйвер перетворює їх в одну або кілька транзакцій шини і потім передає вийшов перелік транзакцій драйверу контролера хоста. Драйвер контролера хоста приймає від системного драйвера шини перелік транзакцій і виконує наступні дії:

· Планує виконання отриманих транзакцій, додаючи їх до списку транзакцій;

· Витягує зі списку чергову транзакцію і передає її рівню хост-контролера інтерфейсу шини USB;

· Відстежує стан кожної транзакції аж до її завершення.

При виконанні всіх пов'язаних з командним пакетом транзакцій системний рівень повідомляє про це клієнтський рівень.

Рівень хост-контролера інтерфейсу шини USB отримує окремі транзакції від драйвера контролера хоста (в складі рівня системного забезпечення USB) і перетворює їх у відповідну послідовність операцій шини. В результаті цього USB-пакети передаються уздовж всієї фізичної ієрархії хабів до периферійного USB-пристрої.

Нижній рівень периферійного USB-пристрою називається рівнем інтерфейсу шини USB. Він взаємодіє з інтерфейсним рівнем шини USB на стороні хоста і передає пакети даних від хоста до периферійного пристрою в форматі, визначеному специфікацією USB. Потім він передає пакети вгору - рівню логічного USB-пристрої.

Середній рівень периферійного пристрою USB-пристрою називається рівнем логічного USB-пристрої. Кожне логічне USB-пристрій представляється набором своїх кінцевих точок, з якими може взаємодіяти системний рівень USB-хоста. Ці точки є джерелами і приймачами всіх комунікаційних потоків між хостом і периферійними USB-пристроями.

Самий верхній рівень периферійного USB-пристрої називається функціональним рівнем. Цей рівень відповідає рівню клієнтського забезпечення хоста. З точки зору клієнтського рівня, що пролягають нижче рівні потрібні для організації між ним і кінцевими точками прямих «каналів даних», які йдуть аж до функціонального рівня. А з точки зору нашої схеми функціональний рівень виконує наступні дії:

· Отримує дані, що їх посилають клієнтським рівнем хоста з кінцевих точок каналів даних нижчого рівня логічного USB-пристрої;

· Посилає дані клієнтського рівня хоста, направляючи їх в кінцеві точки каналів даних нижчого рівня логічного USB-пристрої.

Логічно передача даних між кінцевою точкою і програмним забезпеченням проводиться за допомогою виділення каналу і обміну даними по цьому каналу, а з точки зору представлених рівнів, передача даних виглядає наступним чином:

Кінцева точка (Endpoint) - це частина USB-пристрої, яка має унікальний ідентифікатор і є одержувачем або відправником інформації, що передається по шині USB. Простіше кажучи, це буфер, який зберігає кілька байт. Зазвичай це блок даних в пам'яті або регістр мікроконтролера. Дані, що зберігаються в кінцевій точці, можуть бути або прийнятими даними, якими даними, які очікували передачу. Хост також має буфер для прийому і передачі даних, але хост не має кінцевих точок.

Кінцева точка має наступні основні параметри:

· Частота доступу до шини;

· Допустима величина затримки обслуговування;

· Необхідна ширина смуги пропускання каналу;

· Номер кінцевої точки;

· Спосіб обробки помилок;

· Максимальний розмір пакету, який кінцева точка може приймати або відправляти;

· Використовуваний кінцевою точкою тип посилок;

· Напрямок передачі даних.

Будь-яке USB-пристрій має кінцеву точку з нульовим номером (Endpoint Zero). Ця точка дозволяє хосту опитувати пристрій з метою визначення його типу і параметрів, виконувати ініціалізацію і конфігурація пристрою.

Крім нульової точки, пристрої, зазвичай, мають додаткові кінцеві точки, які використовуються для обміну даними з хостом. Додаткові точки можуть працювати або тільки на прийом даних від хоста (вхідні точки, IN), або тільки на передачу даних хосту (вихідні точки, OUT).

Нульова точка пристрою доступна після того, як пристрій підключено до шини, включено і отримало сигнал скидання по шині (bus reset). Всі інші кінцеві точки після включення живлення або скидання знаходяться в невизначеному стані і недоступні для роботи до тих пір, поки хост не виконає процедуру конфігурування пристрою.

Специфікація шини визначає чотири різних типи передачі даних для кінцевих точок:

Керуючі передачі (Control Transfers) - використовуються хостом для конфігурації пристрою під час підключення, для управління пристроєм і отримання статусної інформації в процесі роботи. Протокол забезпечує гарантовану доставку таких посилок;

· Передачі масивів даних (Bulk Data Transfers) - застосовуються при необхідності забезпечення гарантованої доставки даних від хоста до функції або від функції до хоста, але час доставки не обмежена;

· Передачі по перериваннях (Interrupt Transfers) - використовуються в тому випадку, коли потрібно передавати поодинокі пакети даних невеликого розміру. Кожен пакет потрібно передати за обмежений час. Операції передачі носять спонтанний характер і повинні обслуговувати не повільніше, ніж того вимагає пристрій;

· Ізохронні передачі (Isochronous Transfers) - застосовуються для обміну даними в «реальному часі», коли на кожному часовому інтервалі потрібно передавати строго певну кількість даних, але доставка інформації не гарантована (передача даних ведеться без повторення при збоях, допускається втрата пакетів).

Канал (pipe) - це логічне з'єднання між кінцевою точкою пристрою і ПО хоста. Існує дві моделі каналів:

· Потоковий канал (або просто потік, streaming pipe) - це канал для передачі даних, структура яких визначається клієнтським ПО. Потоки використовуються для передачі масивів даних, передачі даних по перериваннях і ізохронної передачі даних. Потік завжди односпрямований. Один і той же номер кінцевої точки може використовуватися для двох різних потокових каналів - введення і виведення. Передачі даних в потокових каналах підпорядковуються наступним правилам:

§ запити клієнтських драйверів для різних каналів, поставлені в певному порядку один щодо одного, можуть виконуватися в іншому порядку;

§ запити для одного каналу будуть виконуватися строго в порядку їх надходження;

§ якщо під час виконання будь-якого запиту відбувається серйозна помилка (STALL), потік зупиняється;

· Канал повідомлень (message pipe або control pipe) - це канал для передачі даних, структура яких визначається специфікацією USB. Канали цього типу двонаправлені і застосовуються для передачі керуючих посилок. Канали повідомлень строго синхронізовані - специфікація USB забороняє одночасну обробку декількох запитів: не можна починати передачу нового повідомлення, поки не завершена обробка попереднього. У разі виникнення помилки передача повідомлення може бути перервана хостом, після чого хост може почати передачу нового повідомлення.

Основними характеристиками каналів є:

§ смуга пропускання каналу;

§ використовуваний каналом тип передачі даних;

§ характеристики, відповідні кінцевій точці: напрямок передачі даних і максимальний розмір пакету.

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

Канал повідомлень, пов'язаний з нульовою кінцевою точкою, називається Основним каналом повідомлень (Default Control Pipe або Control Pipe 0). Власником цього каналу є USBD, і він використовується для конфігурації пристрою. Основний канал повідомлень підтримує тільки керуючі передачі. Решта каналів (вони називаються клієнтськими каналами, Client Pipe) створюються в процесі конфігурування пристрою. Їх власниками є драйвери пристроїв. За клієнтським каналах можуть передаватися як потоки, так і повідомлення за допомогою будь-яких типів передач.

Набір клієнтських каналів, з якими працює драйвер пристрою, називається інтерфейсом пристрою або зв'язкою клієнтських каналів.

Схожі статті