Огляд послідовних інтерфейсів USB та COM
Аналіз інтерфейсів COM
Послідовний та паралельний порти– забезпечують підключення до ПК найрізноманітніших периферійних пристроїв, таких, як модем, принтер, сканер, маніпулятор "миша” та інші. Часто до портів підключають різні вимірювальні прилади, датчики. Існують порти двох типів - послідовні (serial ports) і паралельні.
Послідовний інтерфейс для передачі даних в одну сторону використовує одну сигнальну лінію, по якій інформаційні біти передаються один за одним послідовно. Такий спосіб передачі і визначає назву інтерфейсу і порту, що його реалізовує. Ці назви відповідають англійським термінам Serial Interface і Serial Port. Послідовна передача даних може здійснюватися як в асинхронному, так і синхронному режимах.
Назва порту вказує на його основне призначення — підключення комунікаційного устаткування (наприклад, модему) для зв'язку з іншими комп'ютерами, мережами і периферійними пристроями. До порту можуть безпосередньо підключатися і периферійні пристрої з послідовним інтерфейсом: принтери, плоттери, термінали та інші. СОМ-порт широко використовується для підключення миші, а також організації безпосереднього зв'язку двох комп'ютерів. До СОМ-порту підключають і електронні ключі.
Порти можуть виробляти апаратні переривання IRQ4 (звичайно використовуються для COM1 і COM3) і IRQ3 (для COM2 і COM4). Крім того, можливе використовування ліній переривань IRQ11 (замість IRQ4) і IRQ10 (замість IRQ3). Можливість використання однієї лінії запиту, що розділяється декількома портами (або її розділення з іншими пристроями) залежить від реалізації апаратного підключення і програмного забезпечення.
При використанні портів, встановлених на шину ISA, переривання, що розділяються, зазвичай не працюють. Існує ряд родинних міжнародних стандартів: RS-232C, RS-423A, RS-422A і RS-485. Найбільше поширення в PC отримав найпростіший з цих – стандарт RS-232C. В промисловій автоматиці широко застосовується RS-485, а також RS-422A, що зустрічається і в деяких принтерах.
Інтерфейс RS-232C призначений для підключення апаратури, що передає або приймає дані (КОД – кінцеве обладнання даних або АПД – апаратура передачі даних), до кінцевої апаратури каналів даних (АКД). В ролі АПД може виступати комп'ютер, принтер, плотер і інше периферійне обладнання. Цій апаратурі відповідає абревіатура DTE – Data Terminal Equipment. В ролі АКД звичайно виступає модем, цій апаратурі відповідає абревіатура DСЕ – Data Communication Equipment. Кінцевою метою підключення є з'єднання двох пристроїв DTE, повна схема з'єднання наведена на рис. 1.1. Інтерфейс дозволяє виключити канал віддаленого зв'язку разом з парою пристроїв DTE (модемів), з'єднавши пристрої безпосередньо за допомогою нуль-модемного кабелю (рис. 1.2).
Рис. 1.1. Повна схема з'єднання по RS-232C
Рис. 1.2. З'єднання по RS-232C нуль-модемним кабелем
Стандарт описує управляючі сигнали інтерфейсу, пересилку даних, і типи роз'ємів. Стандарт описує асинхронний і синхронний режими обміну, але СOM-порти підтримують тільки асинхронний.
СОМ-порти широко застосовуються для підключення різних периферійних і комунікаційних пристроїв, зв'язку з технологічним устаткуванням, об'єктами управління і спостереження, програматорами, внутрішньосхемними емуляторами і іншими пристроями по протоколу Rs-232c. СОМ-порт може функціонувати і як двонаправлений інтерфейс, в якого є 3 програмно-керованих вихідних лінії і 4 програмно-читаних вхідних лінії з двуполярними сигналами.
СОМ-порти найчастіше застосовують для підключення маніпуляторів (миша, трекбол). В цьому випадку порт використовується в режимі послідовного введення. Миша з послідовним інтерфейсом — Serial Mouse — може підключатися до будь-якого справного порту. Для підключення зовнішніх модемів потрібний повний (9-проводний) кабель АПД-АКД. Для зв'язку двох комп'ютерів, віддалених один від одного на невелику відстань, використовують і безпосереднє з'єднання їх СОМ-портів нуль-модемним кабелем. СОМ-порт придатний і для підключення електронних ключів (security devices), призначених для захисту від неліцензованого використання ПО. Ці пристрої можуть бути як «прозорими», тобто що забезпечують можливість підключення периферії до цього порту, так і що повністю займають порт.
Аналіз інтерфейсів USB
USB (Universal Serial Bus - у перекладі з англ. мови "Універсальна послідовна шина") - послідовний інтерфейс передачі даних. Кабель USB (до 2.0 включно) складається з 4 мідних провідників - 2 провідника живлення та 2 провіника даних у витій парі - і заземленя.
Кабелі USB орієнтовані, тобто мають фізично різні наконечники «до пристрою» і «до хосту». Можлива реалізація USB пристрою без кабелю, з вбудованим в корпус наконечником «до хосту». Можливо і нероз'ємне вбудовування кабелю в пристрій, як в мишу. Існують (хоча і заборонені стандартом) і пасивні USB подовжувачі, які мають роз'єми «від хоста» і «до хосту». За допомогою кабелів формується інтерфейс між USB-пристроями і USB-хостом. В якості хоста виступає програмно-керований USB-контролер, який забезпечує функціональність всього інтерфейсу. Для підключення зовнішніх пристроїв до USB-концентратора в ньому передбачені порти, що закінчуються роз'ємами. До роз'ємів за допомогою кабелю можуть підключатися USB-пристрої, або USB-хаби нижніх рівнів. Такі хаби - активні електронні пристрої (пасивних не буває), обслуговують кілька власних USB- портів. За допомогою USB - концентраторів допускається до п'яти рівнів каскадування, не рахуючи кореневого.
USB - інтерфейс дозволяє з'єднати між собою і два комп'ютери, але це вимагає наявності спеціальної електроніки, що емулює Ethernet-адаптер з драйверної підтримкою з обох сторін.
На логічному рівні пристрій USB підтримує транзакції прийому і передачі даних. Кожен пакет кожної транзакції містить в собі номер кінцевої точки (endpoint) на пристрої. При підключенні пристрою драйвери в ядрі ОС читають з пристрою список кінцевих точок і створюють керуючі структури даних для спілкування з кожною кінцевою точкою пристрою. Сукупність кінцевої точки і структур даних в ядрі ОС називається каналом. Кінцеві точки, а значить, і канали, відносяться до одного з 4 класів - потоковий (bulk), керуючий (control), ізохронний (isoch) і переривання (interrupt). Низькошвидкісні пристрої, такі, як миша, не можуть мати ізохронні і потокові канали.
Керуючий канал призначений для обміну з пристроєм короткими пакетами «питання - відповідь». Будь-який пристрій має керуючий канал 0, який дозволяє програмному забезпеченню ОС прочитати коротку інформацію про пристрій, в тому числі коди виробника і моделі, що використовуються для вибору драйвера, і список інших кінцевих точок.
Канал переривання дозволяє доставляти короткі пакети і в тому, і в іншому напрямку, без отримання на них відповіді/підтвердження, але з гарантією часу доставки - пакет буде доставлений не пізніше ніж через N мілісекунд. Наприклад, використовується в пристроях введення (клавіатури / миші / джойстики).
Ізохронний канал дозволяє доставляти пакети без гарантії доставки і без відповідей / підтверджень, але з гарантованою швидкістю доставки в N пакетів на один період шини (1 КГц у low і full speed, 8 КГц у high speed). Використовується для передачі аудіо-та відеоінформації.
Потоковий канал дає гарантію доставки кожного пакета, підтримує автоматичне призупинення передачі даних по небажанню пристрої (переповнення або спустошення буфера), але не дає гарантій швидкості і затримки доставки. Використовується, наприклад, в принтерах і сканерах.
Час шини ділиться на періоди, на початку періоду контролер передає всієї шині пакет «початок періоду». Далі протягом періоду передаються пакети переривань, потім ізохронні в необхідній кількості, в час, що залишився в періоді передаються керуючі пакети і в останню чергу потокові.
Активною стороною шини завжди є контролер, передача пакета даних від пристрою до контролера реалізована як коротке питання контролера і довге, що містить дані (відповідь пристрою). Розклад руху пакетів для кожного періоду шини створюється спільним зусиллям апаратури контролера і ПО драйвера, для цього багато контролери використовують вкрай складний DMA зі складною DMA-програмою, формованої драйвером.
Розмір пакета для кінцевої точки є вшита в таблицю кінцевих точок пристрою константа (зміні не підлягає). Він вибирається розробником пристрою з числа тих, що підтримуються стандартом USB.
Пристрої, які традиційно використовують СОМ-порт, рекомендується переводити на послідовні шини USB і Firewire. На сучасних системних платах присутні два СОМ-порти: СОМ1 виводиться на зовнішній роз’єм, а CОМ2 використовується для інфрачервоного
При асинхронній передачі кожному байту передує старт-біт, що сигналізує приймачу про початок чергового посилання, за яким слідують біти даних: і, можливо, біт паритету (контролю парності). Завершує посилання стоп-біт, гарантуючий певну витримку між сусідніми посиланнями (рис. 1.3). Старт-біт наступного відправленого байта може посилатися у будь-який момент після закінчення стоп-біта, тобто між передачами можливі паузи довільної тривалості. Старт-біт, що має завжди строго певне значення (логічний 0), забезпечує простий механізм синхронізації приймача по сигналу від передавача. Мається на увазі, що приймач і передавач працюють на одній швидкості обміну, що виміряється в кількості переданих біт в секунду. Внутрішній генератор синхронізації приймача використовує лічильник дільника опорної частоти, що обнуляється в момент прийому початку старт-біта. Цей лічильник генерує внутрішні строби, по яких приймач фіксує подальші біти, що приймаються. В ідеалі ці строби розташовуються в середині бітних інтервалів, що забезпечує можливість прийому даних і при деякій різниці швидкостей приймача і передавача. Неважко помітити, що при передачі 8 біт даних, одного контрольного і одного стоп-біта гранично допустима різниця швидкостей, при якій дані будуть розпізнані вірно, не може перевищувати 5%. З урахуванням фазових спотворень (затягнутих фронтів сигналу) і дискретності роботи внутрішнього лічильника синхронізації, реально допустимо менше відхилення частот. Чим менше коефіцієнт розподілу опорної частоти внутрішнього генератора (тобто чим вище частота передачі), тим більше похибка прив'язки стробів до середини бітного інтервалу, і отже, вимоги до узгодженості частот більш суворі. Також, чим вище частота передачі, тим більше вплив спотворень фронтів на фазу сигналу, що приймається. Така синхронна дія цих двох чинників приводить до підвищення вимог узгодженості частот приймача і передавача із зростанням частоти обміну.
Рис. 1.3. Формат асинхронної передачі
Формат асинхронного посилання дозволяє виявляти можливі помилки передачі:
· Якщо прийнятий перепад, що сигналізує про початок посилання, а по стробуванню старт-біта зафіксований рівень логічної одиниці, старт-біт вважається помилковим і приймач знову переходить в стан очікування. Про цю помилку формату приймач може і не повідомляти.
· Якщо в час, відведений під стоп-біт, знайдений рівень логічної одиниці, фіксується помилка стоп-біта (теж помилка формату).
· Якщо застосовується контроль парності, то після посилання біту даних (перед стоп-бітом) передається контрольний біт. Цей біт доповнює кількість одиничних біт даних до парної або непарної залежно від прийнятої угоди. Прийом байта з невірним значенням контрольного біта при включеному контролі паритету приводить до фіксації помилки прийнятих даних.
Для асинхронного режиму прийнятий ряд стандартних швидкостей обміну: 50, 75, 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600 і 115200 біт/с. Кількість біт даних може складати 5, 6, 7 або 8 (5- і 6-бітні формати малопоширені). Кількість стоп-бітів може бути 1, 1,5 і 2. Асинхронний обмін в PC реалізується за допомогою СOM-порту з використанням протоколу RS-232C.
Синхронний режим передачі передбачає постійну активність каналу зв'язку. Посилання починається з синхробайту, за яким впритул слідує потік інформаційних біт. Якщо у передавача немає даних для передачі, він заповнює паузу безперервним посиланням байтів синхронізації. Очевидно, що при передачі великих масивів даних невигідні витрати на синхронізацію в даному режимі обміну будуть нижчими, ніж в асинхронному. Проте в синхронному режимі необхідна зовнішня синхронізація приймача з передавачем, оскільки навіть мале відхилення частот приведе до помилки, що швидко нагромаджується, і спотворення даних, що приймаються.
Нормальна послідовність управляючих сигналів для випадку комутації з СОМ-портом наведена на наступному малюнку (Рис. 1.4). Позитивному рівню відповідає логічний стан «увімкнено», а негативному – «вимкнено».
Рис. 1.4 - Послідовність управляючих сигналів
Розглянемо цю послідовність сигналів, що управляють:
1. Установкою сигналу DTR комп'ютер вказує на бажання використовувати модем.
2. Установкою сигналу DSR модем сигналізує про свою готовність до установки з'єднання.
3. Сигналом RTS комп'ютер запрошує дозвіл на передачу і заявляє про свою готовність на прийом даних від модему.
4. Сигналом CTS модем повідомляє про свою готовність до прийому даних від комп'ютера і передачі їх в лінію.
5. Зняттям сигналу CTS модем сигналізує про неможливість подальшого прийому (наприклад, буфер заповнений) — комп'ютер повинен припинити передачу даних.
6. Відновленням сигналу CTS модем дозволяє комп'ютеру продовжити передачу (у буфері з'явилося місце).
7. Зняття сигналу RTS може означати як заповнення буфера комп'ютера (модем повинен припинити передачу даних в комп'ютер), так і відсутність даних для передачі в модем. Зазвичай в цьому випадку модем припиняє пересилку даних в комп'ютер.
8. Модем підтверджує зняття сигналу RTS скиданням сигналу CTS.
9. Комп'ютер повторно встановлює сигналу RTS для відновлення передачі.
10. Модем підтверджує готовність до цих дій.
11. Комп'ютер вказує на завершення обміну.
12. Модем відповідає підтвердженням.
13. Комп'ютер знімає сигнал DTR, що зазвичай означає необхідність розриву з'єднання («повісити трубку»).
14. Модем скиданням сигналу DSR повідомляє про розрив з'єднання.
Зовнішня синхронізація можлива або за допомогою окремої лінії для передачі сигналу синхронізації, або з використанням самосинхронізуючого кодування даних (наприклад, NRZ), при якому на приймальній стороні з прийнятого сигналу можуть бути виділені і імпульси синхронізації. У будь-якому випадку синхронний режим вимагає або дорогих ліній зв'язку, або дороговартісного обладнання (а зазвичай, і одного, і іншого). Для PC існує спеціальна плата – адаптери SDLC, що підтримують синхронний режим обміну. Вони використовуються в основному для зв'язку з великими машинами (mainframes) IBM і в даний час мало поширені (їх витіснили менш дорогі і більш ефективні засоби комунікацій). З синхронних адаптерів в даний час частіше застосовуються адаптери інтерфейсу V.35.
Розробка USB підтримувалася фірмами Intel, Microsoft, Philips, US Robotics. USB став «загальним знаменником» під трьома не пов'язаними один з одним прагненнями різних компаній. Функції:
• Розширення функціональності комп'ютера. На той момент для підключення зовнішніх периферійних пристроїв до персонального комп'ютера використовувалося кілька «традиційних» (англ. legacy) інтерфейсів (PS/2, послідовний порт, паралельний порт, порт для підключення джойстика, SCSI), і з появою нових зовнішніх пристроїв розробляли і новий роз'єм.
• Підключити до комп'ютера мобільний телефон. У той час мобільні мережі переходили на цифрову передачу голосу, і жоден з наявних інтерфейсів не годився для передачі з телефону на комп'ютер як мови, так і даних.
• Простота для користувача. Старі інтерфейси (наприклад, послідовний (COM) і паралельний (LPT) порти) були вкрай прості для розробника, але не відповідали вимогам специфікацій «Plug and Play». Були потрібні нові механізми взаємодії комп'ютера з низькошвидкісні та середньошвидкісних зовнішніми пристроями - можливо, більш складні для конструкторів, але надійні, дружні і придатні до «гарячого» підключення.
Підтримка USB вийшла у вигляді патчу до Windows 95, надалі вона увійшла в стандартну поставку Windows 98. У перші роки виходу USB пристроїв було мало, тому шину жартома називали «Useless serial bus» - «марна послідовна шина». Втім, виробники швидко усвідомили користь USB, і вже до 2000 року більшість принтерів і сканерів працювали з новим інтерфейсом.
Hewlett-Packard, Intel, Lucent (нині Alcatel-Lucent), Microsoft, NEC і Philips спільно виступили з ініціативою щодо розробки більш швидкісний версії USB. Специфікація USB 2.0 була опублікована в квітні 2000 року, і в кінці 2001 року ця версія була стандартизована USB Implementers Forum. USB 2.0 є зворотно сумісною з усіма попередніми версіями USB.
Слід зазначити, що на початку 2000-х років корпорація Apple віддавала пріоритет шині FireWire, в розробці якої вона брала активну участь. Ранні моделі iPod були оснащені тільки інтерфейсом FireWire, а USB відсутній. Згодом компанія відмовилася від FireWire на користь USB, залишивши в деяких моделях FireWire тільки для підзарядки. Однак, клавіатури і миші, починаючи з другої половини 90-х років, мали інтерфейс USB.
У середині 2000-х років BIOS'и комп'ютерів масового сегмента почали підтримувати USB (підтримка USB в корпоративному сегменті почалася з середини 90-х). Це дозволило завантажувати з флеш-дисків, наприклад, для перевстановлення ОС, пропала потреба в PS/2-клавіатурі. Сучасні материнські плати підтримують до 20 USB - портів. У сучасних ноутбуках COM і LPT портів немає, все частіше з'являються настільні комп'ютери без COM- портів.
Поки відбувалося розповсюдження USB - портів другої версії, виробники зовнішніх жорстких дисків вже «вперлися» в обмеження USB 2.0 - і по струму, і за швидкістю. Знадобився новий стандарт, який і вийшов у 2008 році. Укластися в старі 4 дроти не вдалося, додали 5 нових проводів. Перші материнські плати з підтримкою USB 3.0 вийшли в 2010 році. На початок 2012 року USB 3.0 масово не підтримується пристроями, що запам'ятовують і материнськими платами. Однак виробники USB-накопичувачів вже почали поставляти на ринок пристрої, що підтримують USB 3.0. Також є плати розширення, що додають підтримку USB 3.0 в старих комп'ютерах.
Формат асинхронної посилки дозволяє виявляти можливі помилки передачі: помилковий старт-біт, втрачений стоп-біт, помилку паритету. Контроль формату дозволяє виявляти обрив лінії: при цьому приймаються логічний нуль, який спочатку трактується як старт-біт, і нульові біти даних потім спрацьовує контроль стоп-біта.
Для асинхронного режиму прийнятий ряд стандартних швидкостей обміну: 50, 75, 100, 150, 300, 600, 1200, 2400, 4800, 9600, 19 200, 38 400, 57 600 і 115 200 біт/с. Інколи замість одиниці виміру «біт/с» використовують «бод» (baud), але при розгляді двійкових сигналів, які передаються - це некоректно. У бодах прийнято вимірювати частоту зміни стану лінії, а при недвійковому способі кодування (широко вживаному в сучасних модемах) в каналі зв'язку швидкості передачі біт (вимірювана в бітах в секунду) і зміни сигналу (бод) можуть відрізнятися у декілька разів.
Кількість бітів даних може складати 5, 6, 7 або 8 (5- і 6-бітові формати поширені трохи). Кількість стоп-бітів може бути 1, 1,5 або 2 («півтора біта» означає лише тривалість стопового інтервалу).
Асинхронний режим є байт-орієнтованим (символьно-орієнтованим): мінімальна одиниця інформації, що пересилається, — байт (символ). На відміну від нього синхронний режим (не підтримуваний СОМ-портами) є біт-орієнтованим — кадр, що пересилається по ньому, може мати довільну кількість бітів.
Для управління потоком даних (flow control) можуть використовуватися два варіанти протоколу — апаратний RTS/CTS і програмний XON/XOFF. Інколи управління потоком плутають з квитуванням. Квитування (handshaking) має на увазі посилку повідомлення про здобуття елементу, тоді як управління потоком передбачає посилку повідомлення про можливість або неможливість подальшого прийому даних. Квитування характерне для паралельних інтерфейсів його вживання може позбавити від необхідності управління потоком.
Програмний протокол управління потоком XON/XOFF (Рис. 1.5) передбачає наявність двонаправленого каналу передачі даних. Працює протокол таким чином: якщо пристрій, що приймає дані, виявляє причини, по яких він не може їх далі приймати, пристрій по зворотному послідовному каналу посилає відповідний байт-символ. Протилежний пристрій, прийнявши цей символ, припиняє передачу. Коли приймаючий пристрій знову стає готовим до прийому даних, воно посилає новий символ, прийнявши котрий протилежний пристрій відновлює передачу.
Рис. 1.5 – Програмне управлыння потоком XON/XOFF
Перевага програмного протоколу полягає у відсутності необхідності передачі сигналів інтерфейсу, що управляють, — кабелю для двостороннього обміну досить мати всього 3 дроти. Недоліком, окрім необхідності буфера і більшого часу реакції (що знижує загальну продуктивність каналу із-за чекання сигналу XON), є складність реалізації повнодуплексного режиму обміну. В цьому випадку з потоку даних, що приймаються, повинні виділятися (і оброблятися) символи управління потоком, що обмежує набір передаваних символів або вимагає додаткових хитрощів в плані кодування.
СОМ-порти підтримуються сервісом Int 14h BIOS, який забезпечує наступні функції:
1) ініціалізацію (установку швидкості обміну і формату посилок, заданих регістром AL; заборона джерел переривань). На сигнали DTR і RTS впливу не надає (після апаратного скидання вони пасивні);
2) введення і виведення символу без апаратних переривань з контролем тайм-ауту. Активуються сигнали DTR і RTS;
3) опит стану модему і лінії. Виявлені порти ініціалізувалися на швидкість обміну 2400 біт/с, 7 біт даних з контролем на парність (even), 1 стоп-біт.
Сам роз’єм з всіма його перевагами не зміг би завоювати властиву йому сьогодні популярність без широкої підтримки на рівні платформи, що і забезпечила компанія Intel, реалізувавши підтримку USB у своєму чіпсеті Intel 440FX для Pentium Pro і Pentium II. Але масштабному визнанню інтерфейсу USB все ще заважала відсутність його підтримки в операційних системах Microsoft Windows 95 і Windows NT 4.0. Та і самих периферійних пристроїв з підключенням по шині USB ще було достатньо мало. Все це безпосередньо впливало на швидкість просування нового інтерфейсу.
Перша запропонована специфікація USB 1.0 мала швидкість передачі 12 Мбіт/с та ряд недоліків. На сьогодні інтерфейс USB став цікавий, як користувачам, так і розробникам периферійного обладнанні, з виходом в 1998 році оновленої специфікації Universal Serial Bus. Головною зміною у версії 1.1 була поява передачі по перериванню, ця можливість стала вирішальною для використання цього інтерфейсу при підключенні пристроїв введення, таких як миші і клавіатури. Але основний недолік стандарту USB 1.1 його пропускна здатність так і залишився незмінним. Швидкість передачі залишилася на рівні 1,5 Мбіт/с у низькошвидкісному режимі та 12 Мбіт/с на повній швидкості.
Дійсно вагомим і основним у розвитку інтерфейсу USB став вихід в світ у 2000 році специфікації High-Speed USB 2.0. Вона дозволила збільшити пропускну здатність шини в 40 разів - до 480 Мбіт/с у високошвидкісному режимі. Таке перевтілення ніяк не торкнулося сумісності з попередніми реалізаціями USB. Ця не менш важлива особливість нової специфікації дозволила забезпечити вже випущеній і розробленій під цей роз’єм периферії повну працездатність з новим роз’ємом USB 2.0.
Пристрої, що підтримують стандарт USB 2.0, почали масово скоряти ринок вже у 2002 році, що міцно закріпило цей інтерфейс як шину передачі даних для зовнішніх пристроїв. Забезпечувана новою специфікацією пропускна здатність в 480 Мбіт/с була повністю затребувана в рішеннях, що вимагають передачі великої кількості даних: флеш-носіях, зовнішніх накопичувачах, MP 3-плеєрах, смартфонах і цифрових камерах.
Тільки з виходом специфікації USB 2.0 вдалося повноцінно замінити послідовний і паралельний інтерфейси. Зараз ці старі роз’єми залишилися тільки на старих моделях периферії або на спеціалізованих рішеннях, особливості конструкції яких просто не дозволяють перейти на інший роз’єм комунікації.
Сучасні пристрої зберігання даних вже давно забезпечують швидкість читання/запису більшу, ніж специфікація USB 2.0, що змусило розробників замислитися про пропозицію ринку ще більш швидкої шини передачі даних. Для цих цілей і був розроблений стандарт SuperSpeed USB 3.0, що забезпечує збільшену вдесятеро пропускну здатності USB шини.
У 2008 році на USB Implementers Forum була остаточно затверджена специфікація стандарту USB 3.0. Головним завданням нової реалізації стало збільшення пропускної здатності інтерфейсу. Для забезпечення такої потреби у швидкому каналі передачі інформації і був спроектований і представлений користувачу інтерфейс USB 3.0. Його реальна пропускна здатністю в 5 Гбіт/с відповідає 500 МБ/с. Такі можливості втричі перекривають сучасні потреби, що дає новій специфікації перспективи на існування.
Постановка задачі дослідження
2.1 Аналіз мови Borland C++
Одним із найбільш досконалих інструментів створення прикладних програм являється мова програмування Borland C++, включаючи її можливості. Не зважаючи на її гнучкість та великі потенціальні можливості застосування, вона являється однією з самих важких інструментів програмування.
Як і в інших мовах програмування, в мові С++ потрібно видавати назву програми, особливості виконання, структури та призначення окремих фрагментів програми, для того щоб сам розробник чи користувач вільно могли орієнтуватися в програмному коді. Дуже часто виникає нужда при написанні програми описувати особливості програмних блоків чи даних. Для цього в Borland С++ введені коментарії, які не обробляються компілятором і, відповідно, не беруться до виконання процесором. Позначаються коментарії відповідним обмеженням символів «/» і «*» з обох сторін – наприклад: /*Перша програма на С*/, або двома символами «/» для коментування тільки в одній лінійці – наприклад // текст коментарію. Після кожного оператора чи команди в кінці лінійки використовується символ «;».
Всяка програма повинна вміщати підключення основної бібліотеки – директиви процесора. Підключення потрібно здійснювати спочатку програми, через символ «#» і слово include (включити). Назва бібліотеки з розширенням h береться в <ім’я_файла> для довільної та в "ім’я_файла" для поточної директорій - наприклад: #include <windows.h>. Всякий код програми повинен включати головну програму main, яка повинна представляти собою заголовок, з відповідним описом вхідних і вихідних даних. Опис вихідного значення програми main описується перед службовим словом, а опис вхідних даних – в круглих дужках після службового слова main, наприклад: int main(). Вхідні параметри часто також відсутні, так як дана програма включає в себе скелет або план «всіх доріг», тобто фундаментальні розгалуження, напрямки звернень, підключення допоміжних функцій, файлів, можливостей вводу-виводу, чи можливостей реалізації. Тіло любої допоміжної, підпрограми чи функції, написаної іншими програмістами може включати свою програму main з параметрами, описаними вище. Всяке тіло програми, процедури, функції чи класу заключається в фігурні дужки: {тіло програми, функції чи класу}.
В С++ всяке тіло програми повинно повертати значення, а тому закінчується оператором return значення_повернення, де значення_повернення - ціле число (додатне чи від’ємне або 0), яке сповіщає закінчення процесу програми, функції чи класу. За значенням повернення функції main бувають типу int або рідше void.
В програмуванні термін потік (англ. stream) використовується в кількох значеннях, але у всіх випадках посилаються на послідовність елементів даних, що стають доступними через якийсь час. В Unix і споріднених системах, заснованих на мові програмування C++, потік — це джерело або призначення даних, зазвичай індивідуальних байтів або знаків.
Потоки — це абстракція, що використовується наприклад при читанні або записі файлів, або при зв'язку з вузлами мережі. Три стандартні потоки передвизначені і доступні для всіх програм. В мові C++ концепція потоків реалізована у бібліотеці iostream і низці похідних від неї. Файлова система може підтримувати багато іменнованих незалежних потоків для одного файлу. Є один головний потік, який передає нормальні дані з файлу. Додаткові потоки можуть використовуватися, щоб запам'ятати іконки, короткий звіт і індексацію інформації, зональну інформацію (для файлів, що завантажуються) тощо. Конвеєри можуть також розумітися, як потоки, також як і будь-яка необмежена (не упакована) інформація, що постачається периферійним пристроєм. У мові програмування Scheme і деяких інших, потік — ліниво оцінена або затримана послідовність елементів даних. Потік може використовуватися так само як список, але останні елементи обчислюються тільки тоді, коли потрібно. Тому потоки можуть представити нескінченні послідовності. Поточні обчислення - в паралельному виконанні, особливо в графічній обробці, термін потік застосовується і до апаратних засобів, і до програмного забезпечення. Ним позначають квазі-безперервний потік даних, які обробляються на потоковій мові програмування, щойно програмний стан задовольняє початковій умові потоку.
Написати програму, керуючу пристроєм через COM-порт, для MS DOS не так складно. З платформою Win32 справа йде складніше. Але тільки на перший погляд. Звичайно напряму працювати з регістрами портів не можна, Windows це не дозволяє, зате можна не звертати уваги на тонкості різних реалізацій (i8055, 16450, 16550A) і не возитися з обробкою переривань.
З послідовними і паралельними портами в Win32 працюють як з файлами. Для відкриття порту використовується функція CreateFile. Ця функція надається Win32 API. Її прототип виглядає так:
HANDLE CreateFile(
LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDistribution,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
);
Функція CreateFile створює або відкриває каталог, фізичний диск, тому, буфер консолі (CONIN $ або CONOUT $), пристрій на магнітній стрічці, комунікаційний ресурс, поштовий слот або іменований канал. Функція повертає дескриптор, який може бути використаний для доступу до об'єкта. Функція CreateFile може створити дескриптор консольного введення даних (CONIN $). Якщо процес має відкритий дескриптор для нього, як результат наслідування чи дублювання, він може також створити і дескриптор активного екранного буфера (CONOUT $). Викликаючий процес повинен бути приєднаний до успадкованої консолі або консолі призначеної функцією AllocConsole.
Приклад закриття і відкриття послідовного COM-порту:
#include <windows.h>
//...
HANDLE Port;
Port = CreateFile("\\\\.\\COM2", GENERIC_READ | GENERIC_WRITE, 0,
NULL, OPEN_EXISTING, 0, NULL);
if (Port == INVALID_HANDLE_VALUE) {
MessageBox(NULL, "Невозможно открыть последовательный порт", "Error", MB_OK);
ExitProcess(1);
}
//...
CloseHandle(Port);
//...
У даному прикладі відкривається порт СОМ2 для читання і запису, використовується синхронний режим обміну. Перевіряється успішність відкриття порту, при помилці виводиться повідомлення і програма завершується. Якщо порт відкритий успішно, то він закривається.
Прийом і передача даних для послідовного порту може виконаються в синхронному або асинхронному режимах. Асинхронний режим дозволяє реалізувати роботу щодо подій, в той час як синхронний позбавлений цієї можливості, але є більш простим у реалізації. Для роботи в синхронному режимі, порт повинен бути відкритий таким чином:
CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, 0, NULL);
Передостанній параметр dwFlagsAndAttributes повинен бути дорівнює 0. Після успішного відкриття порту, дані можуть бути лічені або записані за допомогою функцій ReadFile () і WriteFile ().
HANDLE port = CreateFile("COM1", GENERIC_READ |
GENERIC_WRITE, 0, NULL,OPEN_EXISTING, 0, NULL);
unsigned char dst[1024] = {0};
unsigned long size = sizeof(dst);
if(port!= INVALID_HANDLE_VALUE)
if(ReadFile(port,dst,size, &size,0))
printf("\nRead %d bytes",size);
Недоліком цього способу є те, що викликаючи функцію ReadFile (), ми не знаємо чи є дані для читання. Можна циклічно перевіряти їх наявність, але це призводить до додаткових витрат часу ЦП. Тому на практиці часто зручніше використовувати асинхронний режим. Для цього при виклику функції CreateFile () параметр dwFlagsAndAttributes має дорівнювати FILE_FLAG_OVERLAPPED.
CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);