Дослідження режимів функціонування інтерфейсу USB

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерної техніки, автоматики та метрології
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2012
Тип роботи:
Звіт
Предмет:
Периферійні пристрої
Група:
КІ-31

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки, молоді та спорту України НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» ІНСТИТУТ КОМП’ЮТЕРНОЇ ТЕХНІКИ АВТОМАТИКИ ТА МЕТРОЛОГІЇ ЗВІТ ЛАБОРАТОРНИХ РОБІТ №5-8 З ПРЕДМЕТУ: «Периферійні пристрої» ТЕМА: «Дослідження режимів функціонування інтерфейсу USB» Підготував: ст.гр. КІ-31 Куць Юрій Перевірив: доцент Парамуд Я.С. Львів – 2012 Мета роботи: ознайомитися з процесом передачі даних через послідовний інтерфейс USB. Теоретичні відомості USB (англ. Universal Serial Bus, абревіатура читається ю-ес-бі) — укр. універсальна послідовна шина, призначена для з'єднання периферійних пристроїв. Шина USB представляє собою послідовний інтерфейс передачі даних для середньошвидкісних та низькошвидкісних периферійних пристроїв. Для високошвидкісних пристроїв на сьогодні кращим вважається FireWire. USB-кабель представляє собою дві виті пари: по одній парі відбувається передача даних в кожному напрямку (диференціальне включення), а інша пара використовується для живлення периферійного пристрою (+5 В). Завдяки вбудованим лініям живлення, що запезпечують струм до 500 мА, USB часто дозволяє використовувати пристрої без власного блоку живлення (якщо ці пристрої споживають струм потужністю не більше 500 мА). До одного контролера шини USB можно під'єднати до 127 пристроїв через ланцюжок концентраторів (вони використовують топологію «зірка»). На відміну від багатьох інших стандартних роз’ємів, для USB характерні довговічність та механічна міцність. Інтерфейс USB є послідовною, напівдуплексною, двонаправленою шиною.| Шина дозволяє підключити до ПК до 127 фізичних пристроїв. Кожен фізичний пристрій може, у свою чергу, складатися з декількох логічних (наприклад, клавіатура з вбудованим манипулятором-трекболом). Кабельна розводка USB починається з вузла (host). Хост володіє інтегрованим кореневим концентратором (root hub), який надає декілька роз'ємів USB для підключення зовнішніх пристроїв. Потім кабелі йдуть до інших пристроїв USB, які також можуть бути концентраторами, і функціональних компонентів (наприклад, модем або акустична система). Концентратори часто вбудовуються в монітори і клавіатури (які є типовими складеними пристроями). Концентратори можуть містити до семи "витікаючих" портів. Для передачі сигналів шина USB використовує чотирипровідною інтерфейс. Одна пара провідників ("+5В" і "загальний") призначена для живлення периферійних пристроїв з навантаженням до 500 мА. Дані передаються по іншій парі ("D+" "D-"). Для передачі даних використовується диференціальна напруга до 3 В (з метою зниження впливу шуму) і схема кодування NRZI (що позбавляє від необхідності виділяти додаткову пару провідників під тактовий сигнал). Всі концентратори повинні підтримувати на своїх витікаючих портах пристрої обох типів, не дозволяючи високошвидкісному трафіку досягати низькошвидкісних пристроїв. Високопродуктивні пристрої підключаються за допомогою екранованого кабелю, довжина якого не повинна перевищувати 3 м. USB 1.0 Версія представлена в січні 1995 року. Технічні характеристики: високошвидкісне з'єднання — 12 Мбіт/с максимальна довжина кабеля для високошвидкісного з'єднання — 3 м низькошвидкісне з'єднання — 1,5 Мбіт/с максимальна довжина кабеля для низькошвидкісного з'єднання — 5 м максимальна кількість пристроїв підімкнення (враховуючи) концентратори — 127 можливість підключення пристроїв з різними швидкостями обміну інформацією напруга живлення для переферійних пристроїв — 5 В максимальний струм споживання на один пристрій — 500 мA USB 1.1 Випущено в вересні 1998. Виправлені проблеми виявлені у версії 1.0, в основному пов'язані з концентраторами. Інтерфейс USB 1.1 декларує два режими:1)низькошвидкісний підканал (пропускна спроможність - 1,5 Мбіт/с), призначений для таких пристроїв, як миші і клавіатури; 2)високопродуктивний канал, що забезпечує максимальну пропускну спроможність 12 Мбіт/с, що може використовуватися для підключення зовнішніх накопичувачів або пристроїв обробки і передачі аудио- і відеоінформації. USB 2.0 Версія випущена в квітні 2000 року. USB 2.0 відрізняється від USB 1.1 лише швидкістю передачі, яка зросла та незначними змінами в протоколі передачі даних для режиму Hi-speed (480 Мбіт/сек). Існує три швидкості роботи пристроїв USB 2.0: Low-speed 10—1500 Кбіт/c (використовується для інтерактивних пристроїв: клавіатури, мишки, джойстики) Full-speed 0,5—12 Мбіт/с (аудіо/відео пристрої) Hi-speed 25—480 Мбіт/с (відео пристрої, пристрої зберігання інформації) Технологія USB On-The-Go розширює специфікації USB 2.0 для легкого з'єднання між собою переферійних USB-пристроїв безпосередньо між собою без задіяння комп'ютера. Прикладом застосування цієї технології є можливість підключення фотоапарату напряму до друкарки. Цей стандарт виник через об'єктивну потребу надійного з'єднання особливо поширених USB-пристроїв без застосування комп'ютера, який в потрібний момент може і не виявитися під руками. Бездротовий USB Офіційна специфікація протоколу була анонсована в травні 2005 року. Дозволяє організовувати бездротовий зв'язок з високою швидкістю передачі даних до 480 Мбіт/с на відстані 3 метрів та до 110 Мбіт/с на відстані 10 метрів. Для безпровідного USB часом використовують абревіатуру WUSB. Розробник протоколу USB-IF віддає перевагу практиці іменування протокол офіційно Certified Wireless USB. USB 3.0 Протокол USB 3.0 знаходиться на стадії розробки і буде передавати сигнал за допомогою оптоволоконного кабелю USB 3.0 планується створити зворотно сумісним з USB 2.0 та USB 1.1 Створенням USB 3.0 займаються компанії: Intel, Microsoft, Hewlett-Packard, Texas Instruments, NEC и NXP Semiconductors. Теоретична пікова пропускна здатність складає 4,8 Гбіт/с. Види роз'ємів USB  Розміщення провідників в USB Номер контакту Позначення Колір провідника  1 V BUS червоний  2 D- білий  3 D+ зелений  4 GND чорний  Флеш пам'ять Флеш пам'ять — це тип пам'яті, яка може на довготривалий час зберігати певну інформацію на своїй платі, зовсім не використовуючи живлення. В додаток можна сказати, що флеш пам'ять пропонує високу швидкість доступу до інформації (хоча вона не настільки висока як у DRAM) і кращий опір до кінетичного шоку, ніж у вінчестерах. Ці характеристики пояснюють популярність флеш пам'яті для приладів, що залежать від батарейок. Іншою приманкою флеш пам'яті є те, що коли вона скомпресована в суцільну «карту пам'яті», стає майже неможливо зруйнувати її стандартними фізичними методами, що дає змогу витримувати високий тиск і кип'ячу воду. Принцип дії Флеш пам'ять зберігає інформацію в масиві «комірок», кожна з яких традиційно зберігає по одному біту інформації. Кожна комірка - це транзистор із плаваючим затвором. NAND'ова флеш пам'ять формує ядро легкого USB інтерфейсу запам'ятовуючих приладів, які також відомі як USB флешки. Передача даних (Транзакції) Інтерфейс USB надає розробникові безліч можливостей, позбавляючи його від самостійної реалізації байтових протоколів обміну, підрахунку контрольних сум і інших турбот, необхідних для надійного зв'язку з пристроями. Механізм передачі даних є асинхронним і блоковим. Блок переданих даних називається USB-фреймом або USB-кадром і передається за фіксований часовий інтервал. Оперування командами і блоками даних реалізується за допомогою логічної абстракції, званої каналом. Зовнішній пристрій також ділиться на логічні абстракції, звані кінцевими точками. Таким чином, канал є логічною зв'язкою між хост-контроллером і кінцевою точкою зовнішнього пристрою. Канал можна порівняти з відкритим файлом.  Для передачі команд (і даних, що входять до складу команд) використовується канал за замовчуванням, а для передачі даних відкриваються або потокові канали, або канали повідомлень. Інформація по каналу передається у вигляді пакетів (Packet). Кожен пакет починається з поля синхронізації SYNC (SYNChronization), за яким слідує ідентифікатор пакету PID (Packet IDentifier). Поле Check являє собою побітову інверсію PID.  Систему USB слід розділити на три логічних рівня з певними правилами взаємодії. Пристрій USB містить інтерфейсну, логічну і функціональну частини. Хост теж ділиться на три частини - інтерфейсну, системну та програмне забезпечення. Кожна частина відповідає тільки за певне коло завдань. Логічне і реальна взаємодія між ними показано на малюнку.  Таким чином, операція обміну даними між прикладною програмою і шиною USВ виконується шляхом передачі буферів пам'яті через такі рівні. Рівень клієнтського ПЗ в хості: зазвичай представляється драйвером пристрою USB; забезпечує взаємодію користувача з операційною системою з одного боку і системним драйвером з іншого. Рівень системного забезпечення USB в хості (USBD, Universal Serial Bus Driver): управляє нумерацією пристроїв на шині; управляє розподілом пропускної спроможності шини і потужності харчування; обробляє запити користувальницьких драйверів. Хост-контролер інтерфейсу шини USB (HCD, Host Controller Driver): перетворює запити вводу / виводу в структури даних, за якими хост-контролер виконує фізичні транзакції; працює з регістрами хост-контроллера. Рівень клієнтського програмного забезпечення визначає тип передачі даних, необхідний для виконання затребуваної прикладною програмою операції. Після визначення типу передачі даних цей рівень передає системному рівню наступне: буфер пам'яті, званий клієнтським буфером; пакет запиту на в / в (IRP, Input / output Request Packet), що вказує тип необхідної операції. IRP містить тільки відомості про запит (адреса і довжина буфера в оперативній пам'яті). Безпосередньо обробкою запиту займається системний драйвер USB. Рівень системного драйвера USB необхідний для управління ресурсами USB. Він відповідає за виконання таких дій: розподіл смуги пропускання шини USB; призначення логічних адрес пристроїв кожній фізичній USB-пристрою; планування транзакцій. Логічно передача даних між кінцевою точкою і ПО проводиться за допомогою виділення каналу і обміну даними по цьому каналу, а з точки зору представлених рівнів, передача даних виглядає наступним чином. Драйвер USBD розбиває запити на транзакції за наступними правилами: виконання запиту вважається закінченим, коли успішно завершені всі транзакції, його складові; всі подробиці відпрацювання транзакцій (такі як очікування готовності, повтор транзакції при помилці, неготовність приймача і т. д.) до клієнтського ПЗ не доводяться; ПЗ може тільки запустити запит і чекати або виконання запиту або виходу з тайм-ауту; пристрій може сигналізувати про серйозні помилки, що призводить до аварійного завершення запиту, про що повідомляється джерело запиту. Драйвер контролера хоста приймає від системного драйвера шини перелік транзакцій і виконує наступні дії: планує виконання отриманих транзакцій, додаючи їх до списку транзакцій; витягує зі списку чергову транзакцію і передає її рівню хост-контролера інтерфейсу шини USB; відстежує стан кожної транзакції аж до її завершення. Хост-контролер інтерфейсу шини USB формує кадри. Кадри передаються послідовною передачею біт за методом NRZI.  Таким чином, можна сформувати наступну спрощену схему: кожен кадр складається з найбільш пріоритетних посилок, склад яких формує драйвер хоста; кожна передача складається з однієї або декількох транзакцій; кожна транзакція складається з пакетів; кожен пакет складається з ідентифікатора пакету, даних (якщо вони є) і контрольної суми.  Хід роботи: 1.Створив програму для передачі даних через послідовний USB інтерфейс, яка має наступний вигляд .  Рис.1 2.Програма в робочому вигляді (Рис. 2)  Рис. 2 Графіки передачі посимвольних даних прізвища Куць в системі кодування NRZI.     Висновки: виконавши поставлене завдання, я ознайомився з процесом передачі даних через послідовний інтерфейс USB; створив програму передавача даних через послідовний USB інтерфейс, в якій передбачено сканування USB-портів на наявність підключених пристроїв до послідовного USB інтерфейсу, налаштування основних параметрів програми передачі даних через послідовний USB інтерфейс; а також ознайомився з процесом формування та передачі посимвольних даних у графічному представленні в схемі кодування NRZI через послідовний USB інтерфейс. Додаток Лістинг програми: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using System.Runtime.InteropServices; namespace Kuts_USB { public partial class Form1 : Form { public Form1() { InitializeComponent(); MyInit(); } [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam); const int WM_DeviceChange = 0x219; //что-то связанное с usb const int DBT_DEVICEARRIVAL = 0x8000; //устройство подключено const int DBT_DEVICEREMOVECOMPLETE = 0x8004; // устройство отключено protected override void WndProc(ref Message m) { base.WndProc(ref m); if (m.Msg == WM_DeviceChange) { if (m.WParam.ToInt32() == DBT_DEVICEARRIVAL) { { { } } MessageBox.Show("Новий пристрій знайдено!"); } if (m.WParam.ToInt32() == DBT_DEVICEREMOVECOMPLETE) { MessageBox.Show("Пристрій вилучено"); } base.WndProc(ref m); if (m.Msg == WM_DeviceChange) { if (m.WParam.ToInt32() == DBT_DEVICEREMOVECOMPLETE) { DriveInfo[] driveinfo = DriveInfo.GetDrives(); comboBox2.Items.Clear(); foreach (DriveInfo drive in driveinfo) { if ((drive.IsReady == true)) { if (drive.DriveType.ToString() == "Removable") comboBox2.Items.Add(drive.Name.ToString()); } comboBox2.Text = ""; richTextBox1.Text = ""; { } } } } } } private void MyInit() { DriveInfo[] pff = DriveInfo.GetDrives(); foreach (DriveInfo driveinfo in pff) { if ((driveinfo.IsReady == true) && (driveinfo.DriveType == DriveType.Removable)) { if (driveinfo.DriveType.ToString() == "Removable") comboBox2.Items.Add(driveinfo.Name); comboBox2.SelectedIndex = 0; } } } private void button1_Click(object sender, EventArgs e) { Stream myStream = null; OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.InitialDirectory = textBox1.Text.ToString(); openFileDialog1.Filter = "txt files (*.txt)|*.txt"; openFileDialog1.FilterIndex = 2; openFileDialog1.RestoreDirectory = true; if (openFileDialog1.ShowDialog() == DialogResult.OK) { try { if ((myStream = openFileDialog1.OpenFile()) != null) { using (myStream) { TextReader read = new StreamReader(openFileDialog1.FileName); richTextBox1.Text = read.ReadToEnd(); toolStripStatusLabel1.Text = "Шлях до файлу: " + openFileDialog1.FileName; read.Close(); } } } catch (Exception ex) { MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message); } } } private void button2_Click(object sender, EventArgs e) { Stream myStream; SaveFileDialog saveFileDialog1 = new SaveFileDialog(); saveFileDialog1.Filter = "txt files (*.txt)|*.txt"; saveFileDialog1.FilterIndex = 2; saveFileDialog1.RestoreDirectory = true; if (saveFileDialog1.ShowDialog() == DialogResult.OK) { if ((myStream = saveFileDialog1.OpenFile()) != null) { myStream.Close(); File.WriteAllText(@saveFileDialog1.FileName, richTextBox1.Text.ToString()); } } } private void открытьToolStripMenuItem_Click(object sender, EventArgs e) { Stream myStream = null; OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.InitialDirectory = comboBox2.Items[comboBox2.SelectedIndex].ToString(); openFileDialog1.Filter = "txt files (*.txt)|*.txt"; openFileDialog1.FilterIndex = 2; openFileDialog1.RestoreDirectory = true; if (openFileDialog1.ShowDialog() == DialogResult.OK) { try { if ((myStream = openFileDialog1.OpenFile()) != null) { using (myStream) { TextReader read = new StreamReader(openFileDialog1.FileName); richTextBox1.Text = read.ReadToEnd(); read.Close(); } } } catch (Exception ex) { MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message); } } } private void button3_Click(object sender, EventArgs e) { DriveInfo[] driveinfo = DriveInfo.GetDrives(); comboBox2.Items.Clear(); foreach (DriveInfo drive in driveinfo) { if ((drive.IsReady == true)) { if (drive.DriveType.ToString() == "Removable") comboBox2.Items.Add(drive.Name.ToString()); } comboBox2.Text = ""; richTextBox1.Text = ""; label1.Text = ""; label2.Text = ""; label4.Text = ""; label5.Text = ""; label6.Text = ""; label7.Text = ""; label8.Text = ""; label9.Text = ""; textBox1.Text = ""; textBox2.Text = ""; listBox1.Items.Clear(); toolStripStatusLabel1.Text = ""; progressBar1.Value = 0; } } private void toolStripStatusLabel1_Click(object sender, EventArgs e) { } private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) { Drive_Info = new System.IO.DriveInfo(comboBox2.Text); label1.Text = Drive_Info.Name; if (Drive_Info.IsReady) { label4.Text = Drive_Info.DriveFormat; label5.Text = Drive_Info.DriveType.ToString(); label6.Text = Drive_Info.RootDirectory.FullName; label2.Text = comboBox2.SelectedItem.ToString() + "*.txt"; label8.Text = + (Drive_Info.TotalFreeSpace / 1024 / 1024) + " Mb"; long usedSpace = 0; usedSpace = Drive_Info.TotalSize - Drive_Info.TotalFreeSpace; label9.Text = (usedSpace / 1024 ) + " Kb"; textBox3.Text = (usedSpace / 1024) + ""; label7.Text = + (Drive_Info.TotalSize / 1024 ) + " Mb"; textBox1.Text = comboBox2.SelectedItem.ToString(); textBox2.Text = comboBox2.SelectedItem.ToString(); richTextBox1.Text = ""; listBox1.Items.Clear(); progressBar1.Maximum = 3956440; progressBar1.Minimum = 0; progressBar1.Value = Convert.ToInt32(textBox3.Text); DirectoryInfo dir = new DirectoryInfo(textBox1.Text.ToString()); foreach (FileInfo files in dir.GetFiles("*.txt")) { listBox1.Items.Add(files.Name); } } } private void button4_Click(object sender, EventArgs e) { { DriveInfo[] drives = DriveInfo.GetDrives(); foreach (DriveInfo drive in drives) { if ((drive.IsReady == true) && (drive.DriveType == DriveType.Removable)) { openFileDialog1.InitialDirectory = comboBox2.Text.ToString(); } } } } private void button5_Click(object sender, EventArgs e) openFileDialog1.InitialDirectory = textBox1.Text.ToString(); TextReader read = new StreamReader(textBox1.Text); richTextBox1.Text = read.ReadToEnd(); read.Close(); toolStripStatusLabel1.Text = "Шлях до файлу: " + textBox1.Text ; } private void button6_Click(object sender, EventArgs e) private void Form1_Load(object sender, EventArgs e) { System.IO.DriveInfo[] drives = System.IO.DriveInfo.GetDrives(); for (int i = 0; i <= drives.Length - 1; i++) } private void button6_Click_1(object sender, EventArgs e) { SaveFileDialog saveFile1 = new SaveFileDialog(); saveFile1.DefaultExt = "*.txt"; saveFile1.Filter = "Text files|*.txt"; if (saveFile1.ShowDialog() == System.Windows.Forms.DialogResult.OK && saveFile1.FileName.Length > 0) { using (StreamWriter sw = new StreamWriter(saveFile1.FileName, true)) { sw.WriteLine(richTextBox1.Text); sw.Close(); } } } public DriveInfo Drive_Info { get; set; } private void button7_Click(object sender, EventArgs e) private void button8_Click(object sender, EventArgs e) { StreamWriter sw = new StreamWriter(textBox2.Text.ToString()); sw.WriteLine(richTextBox1.Text); sw.Close(); MessageBox.Show("Файл " + textBox2.Text.ToString() + " збережено", "Зберегти файл", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1); }
Антиботан аватар за замовчуванням

18.12.2012 22:12-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!