Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Периферійні пристрої
Методичні вказівкидо комплексу лабораторних робіт
для студентів базового напряму 6.050102 - “Комп’ютерна інженерія”
Затвердженона засіданні кафедри”Електронні обчислювальні машини”Протокол № 6 від 01. 02. 2010 року
Львів – 2010
Периферійні пристрої: Методичні вказівки до комплексу лабораторних робіт для студентів базового напряму 6.050102 - “Комп’ютерна інженерія” / Укладачі: Парамуд Я.С., Миц А.М. – Львів: Національний університет “Львівська політехніка”, 2010, 87 с.
Укладачі Парамуд Я.С., к. т. н, доцент
Миц А.М., асистент.
Рецензенти Івахів О.В., д. т. н, проф.
Відповідальний за випуск: Мельник А. О., професор, завідувач кафедри
Лабораторні роботи № 1-4
Дослідження режимів функціонування інтерфейсу RS-232C
МЕТА РОБОТИ: ознайомитися з процесом передачі даних через
послідовний асинхронний інтерфейс RS-232C (COM-порт).
ТЕОРЕТИЧНІ ВІДОМОСТІ
Асинхронний послідовний інтерфейс – це основний тип інтерфейсу, за допомогою якого здійснюється передача даних між комп’ютерами. Термін асинхроний означає, що при передачі даних не використовуються ніякі синхронізуючі сигнали, і окремі символи можуть передаватись з випадковими інтервалами, як, наприклад при вводі даних з клавіатури.
Кожному символу, який передається через послідовне з’єднання, мусить передувати стандартний стартовий сигнал, а завершувати його передачу – стоповий сигнал. Стартовий сигнал – це нулевий біт, його ще називають стартовим бітом. Його призначення – повідомити пристою, який приймає дані про те, що наступні вісім бітів представляють собою байт даних. Після символа передаються один чи два стопових біта, які дають сигнал про закінчення передачі символа. В пристрої який приймає дані, символи розпізнаються по появі стартових і стопових сигналів, а не по моменту їх передачі. Асинхроний інтерфейс орієнтований на передачу символів (байтів), а при передачі використовується приблизно 20% інформації тільки для ідентифікації кожного символа.
Термін послідовний означає, що передача даних виконується по одиночному провіднику, а біти передаються послідовно один за другим. Такий тип зв’язку характерний для телефонної мережі, в якій кожний напрямок обслуговує один провідник. Багато компаній випускають доповняльні послідовні порти для комп’ютерів, звичайно ті порти встановлюються на багатофункціональних платах чи на платі з паралельним портом. На рисунку 1, показано стандартний 9-контактний роз’єм послідовного порта:
Рис.1 Роз’єм послідовного порту
До послідовного порта можна підключити самі різноманітні пристрої: модеми, плотери, принтери, інші комп’ютери, пристрої зчитування штрих-кодів, схему керування пристроями чи макетну плату. В основному у всіх пристроях, для яких потрібен двонапрямлений зв’язок з комп’ютером, використовується порт, який став стандартом – RS-232C (Reference Standard number 232 version C – стандарт обміну номер 232 версії С), який позволяє передавати дані між несумісними пристроями.
Інтерфейс RS - 232С широко використовують у персональних
комп'ютерах для обміну інформацією з периферійними пристроями у послідовному дуплексному режимі обміну. Спрощений варіант інтерфейсу стик С2 є аналогом інтерфейсу RS - 232С для колишніх країн економічної співдружності. Швидкість передавання даних в асинхронному режимі може становити біт/с: 50, 75, 100, 150, 300, 600, 1200, 2400, 4800, 9600, 19200.
Інтерфейс RS-232C розроблено в 1969 році рядом корпорацій США для забезпечення з’єднання комп’ютерів та різноманітних периферійних пристроїв. Стандарт RS-232 в загальному випадку описує 4 інтерфейсні функції:
1. Визначення керувальних сигналів, що передаються через інтерфейс.
2. Визначення формату даних користувача, що передаються через інтерфейс.
3. Передачу тактових сигналів для синхронізації потоку даних.
4. Формування електричних характеристик інтерфейсу.
Інтерфейс RS-232 є послідовним асинхронним інтерфейсом, в якому перед бітами даних передається спеціальний стартовий біт, після бітів даних йде біт паритета та 1 чи 2 стопових біти. Така сукупність бітів носить назву старт-стопного символу. Кожний старт-стопний символ, як правило, у якості бітів даних містить один інформаційний символ, наприклад, символ стандартного коду для обміну інформацією, що задається таблицею ASCII. Символи ASCII відображаються семибітовими кодовими словами. Так, наприклад, латинська буква А має код 1000001. Її передача рівнями ТТЛ зображена на рис. 2.
Початок асинхронного символу завжди відмічається низьким рівнем стартового рівня (“0”). Після нього йдуть 7 біт даних, потім біт паритету, та 2 стопових біти. Біт паритету встановлюється в “1”, або “0”, наприклад, непарний паритет характеризується тим, що загальна кількість одиниць в групі з семи біт (сім даних + один біт паритету) повинно бути непарним числом. Стопові біти передаються високим рівнем (“1”).
Рис.2 Схема передачі даних через RS-232C.
Комп'ютер має 25-контактний (DB25P) або 9-контактний (DB9P) роз'єми для підключення RS-232C. Розташування контактів роз’ємів зображене на рисунку 3. Призначення контактів роз'ємів приведене в таблиці 1.
Рис. 3 Розташування контактів роз’ємів DB25P та DB9P
Таблиця 1. Призначення контактів роз’ємів DB25P та DB9P
Найменування
Напрям
Опис
Контакт(25-контактний роз'єм DB25P )
Контакт(9-контактний роз'єм DB9P)
DCD
IN
Carrie Detect (Визначення несучої)
8
1
- RXD
IN
Receive Data (Дані, що приймаються)
3
2
- TXD
OUT
Transmit Data (Дані, що передаються)
2
3
DTR
OUT
Data Terminal Ready (Готовність терміналу)
20
4
GND
-
System Ground (Корпус системи)
7
5
DSR
IN
Data Set Ready (Готовність даних)
6
6
RTS
OUT
Request to Send (Запит на відправку)
4
7
CTS
IN
Clear to Send (Готовність прийому)
5
8
RI
IN
Ring Indicator (Індикатор)
22
9
Найчастіше використовуються трьох- або чотирьохпровідний зв'язок (для двонаправленої передачі). Схема з'єднання для чотирьохпровідної лінії зв'язку показана на рисунку 4.
Рис.4 Схема 4-провідної лінії зв'язку для RS-232C
Для двопровідної лінії зв'язку у випадку передачі з комп'ютера на зовнішній пристрій використовуються сигнали SG і TхD. Всі 10 сигналів інтерфейсу задіюються лише при з'єднанні комп'ютера з модемом.
Формат даних, що передаються, показаний на рисунку 5. Власне дані (5, 6, 7 або 8 біти) супроводжуются стартовим бітом, бітом парності і одним або двома стоповими бітами. Отримавши стартовий біт, приймач вибирає з лінії біти даних через визначені інтервали часу. Дуже важливо, щоб тактові частоти приймача і передавача були однаковими, допустима розбіжність - не більше 10 %
Рис. 5 Формат даних RS-232C
Всі сигнали RS-232C передаються спеціально вибраними рівнями, що забезпечують високу завадостійкість зв'язку (рис.6). Відзначимо, що дані передаються в інверсному коді (логічній одиниці відповідає низький рівень, логічному нулю - високий рівень).
Рис. 6 Рівні сигналів RS-232C на передавальному і приймаючому кінцях лінії зв'язку.
Обмін по RS-232C здійснюється за допомогою звернень по спеціально виділених для цього портах COM1 (адреси 3F8h...3FFh, переривання IRQ4), COM2 (адреси 2F8h...2FFh, переривання IRQ3), COM3 (адреси 3F8h...3EFh, переривання IRQ10), COM4 (адреси 2E8h...2EFh, переривання IRQ11). Формати звернень по цих адресах можна знайти в численних описах мікросхем контроллерів послідовного обміну UART (Universal Asynchronous Receiver/Transmitter), наприклад, i8250, КР580ВВ51.
ЗАВДАННЯ НА ЛАБОРАТОРНІ РОБОТИ
Лабораторна робота № 1
Створення програми передавача пакетних даних
через COM порт .
МЕТА РОБОТИ: ознайомитися з процесом створення програми передавача пакетних даних через послідовний асинхронний інтерфейс RS-232C (COM-порт).
Рис. 7 Вікно створення функції
Для створення програми передавача даних через послідовний асинхронний інтерфейс RS-232C (COM-порт) використовуємо компоненту SerialGate (рис 7) див. лістінги програми.
Рис. 8. Вікно створення назви програми
Для створення програми передавача даних через послідовний асинхронний інтерфейс RS-232C (COM-порт) використовуємо вікно змін назви проекту (рис 8).
На (рис 9) представлено результати побудови проекту програми – передавача.
Рис. 9 Результат побудови проекту
Рис. 10 Вікно програми передавача
Для передачі даних вводимо інформацію в вікно Data to send, налаштовуємо параметри передачі та натискаємо кнопку Send (рис 10).
Лабораторна робота № 2
Створення програми приймача пакетних даних
через COM порт .
МЕТА РОБОТИ: ознайомитися з процесом створення програми приймача пакетних даних через послідовний асинхронний інтерфейс RS-232C (COM-порт).
Рис. 11 Вікно створення функції
Для створення програми приймача даних через послідовний асинхронний інтерфейс RS-232C (COM-порт) використовуємо компоненту SerialGate (рис. 11) див. лістінги програми.
Рис. 12 Вікно створення назви програми
Для створення програми приймача даних через послідовний асинхронний інтерфейс RS-232C (COM-порт) використовуємо вікно змін назви проекту (рис 12).
На (рис 13) представлено результати побудови проекту програми – передавача.
Рис. 13 Результат побудови проекту
Рис. 14 Вікно програми приймача
Лабораторна робота № 3
Відтворення передані та прийому інформації через COM порт у графічному вигляді.
МЕТА РОБОТИ: ознайомитися з процесом формування та передачі пакетних даних у графічному представленні через послідовний асинхронний інтерфейс RS-232C (COM-порт).
Рис. 15 Вікно створення функції малювання графіків
Для графічного представлення даних для програми передавача та програми приймача створюємо функцію OnShow (рис. 15) див. лістінги програми.
Рис. 16 Вікно програми передавача
Рис. 17 Вікно програми приймача
На рис. 18 показано як реалізувати функцію побайтного виведення інформаційних даних із пакету (див. лістінги програми) .
Рис. 18 Вікно створення функції
Рис. 19 Вікно програми передавача
Рис. 20 Вікно програми приймача
На рис. 19 та рис. 20 показано графічне представлення даних прийому – передачі пакета даних через послідовний асинхронний інтерфейс RS-232C (COM-порт).
Лабораторна робота № 4
Налаштування портів на передачу та прийом
інформації через COM порт.
МЕТА РОБОТИ: ознайомитися з процесом налаштування основних параметрів прийому – передачі пакетних даних через послідовний асинхронний інтерфейс RS-232C (COM-порт).
Рис. 21 Вікно вибору типу з’єднання
Щоб з’єднати два віртуальні порти , вибираємо тип з’єднання типу «пара» (рис 21).
На рис. 22 продемонстровано вибір пору для програми приймача.
Рис. 22 Вікно вибору портів
Рис. 23 Вікно запуску емуляції
Також для коректного обміну даними встановлюємо номери портів та швидкості передачі даних для програми передавача та програми приймача (рис.24, рис.25).
Рис. 24 Вікно програми передавача
Рис. 25 Вікно програми приймача
ПИТАННЯ ДЛЯ САМОПЕРЕВІРКИ
1. Привести схеми передачі даних через RS-232C .
2. Привести призначення контактів роз’ємів DB25P та DB9P.
3. Привести формат даних RS-232C.
4. Привести основні етапи відлагодження програми
5. Пояснити роботу написаної програми.
6. Пояснити роботу RS-232C .
ЗМІСТ ЗВІТУ
Мета роботи;
Короткі теоретичні відомості;
Хід роботи;
Висновки;
Текст програми (у додатку);
Демонстрація програми на комп’ютері.
ПРИКЛАД ВИКОНАННЯ ОСНОВНИХ ЕТАПІВ РОБІТ
Тут подана інформація, яка допомагає створити проект програми в середовищі Visual C++ 6.0.
Для того щоб створити новий проект необхідно запустити на виконання програму MS Visual C++ 6.0 (Рис.26).
Рисунок 26. Середовище програмування MS Visual C++ 6.0.
Далі в меню середовища MS Visual C++ 6.0 вибрати “File” –> “New” (Рис.27).
Необхідно обов’язково позначити тип нового проекту (MFC AppWizard (exe)), вказати його назву і натиснути “OK”.
Рисунок 27. Вікно створення нового MFC проекту.
Далі треба вибрати вигляд головного вікна нового MFC проекту (Рис.28) і натиснути “OK”.
Рисунок 28. Вікно вибору вигляду головного вікна нового MFC проекту.
На наступному вікні треба зняти всі прапорці і ввести заголовок вікна діалогу (Рис.29).
Рисунок 29. Вікно вигляду елементів діалогу.
Далі треба натиснути “Next” (Рис. 30)
Рисунок 30. Вікно вибору властивостей проекту.
Далі треба натиснути “Finish” (Рис. 31)
Рисунок 31. Вікно вибору властивостей проекту.
Далі прочитати сумарну інформацію про новий MFC проект (Рис.32) і, якщо немає помилок, натиснути “OK”. В іншому випадку натиснути “Cancel” і відмінити створення нового проекту.
Рисунок 32. Вікно сумарної інформації про новий MFC проект.
Для того щоб відкрити існуючий проект необхідно вибрати “Ореn Workspace…” або “Recent Workspaces” з “File” меню.
Новий MFC проект (Рис.33) містить класи, ресурси і файли програми (CTestApp) та вікна діалогу (CTestDlg).
Рисунок 33. Вікно середовища MS Visual C++ 6.0 з новим проектом.
Клас CLaba1App містить функцію InitInstance(), з якої починається виконання програми і створення об’єкту програми theApp (Рис. 34). В функції InitInstance() створюється об’єкт діалогу, до нього приєднується вікно діалогу і діалог відображається на екрані. Крім того є обробники натискання клавіш “OK” і “Cancel”. Там можна додати свій зміст.
Рисунок 34. Клас CLaba1App.
Клас CLaba1Dlg містить функції OnInitDialog() та OnPaint() (Рис.35). В функції OnInitDialog() налаштовується зовнішній вигляд вікна діалогу, а функція OnPaint() здійснює вивід вікна діалогу на екран.
Рисунок 35. Клас CLaba1Dlg.
Для додавання функціональності до діалогу спочатку треба нарисувати додаткові елементи керування в редакторі діалогів (Рис.36).
Рисунок 36. Редактор діалогу.
Для цього на панелі елементів керування вибирається один елемент. На вікні діалогу мишею натягується прямокутник. Після відпускання кнопки миші, на вікні діалогу з’являється зображення елемента керування. Для даної лабораторної роботи необхідно на вікні діалогу встановити об’єкти типу Edit (поле редагування) та Button (кнопка) (Рис.38).
Рисунок 37. Розміщення елементів керування.
Для зв’язування елемента керування з об’єктом елемента керування треба викликати для нього “майстер” класів (Рис.38). На першій закладці знаходяться елементи карти повідомлень. (Рис.39).
Рис 38. Виклик майстра класів через контекстне меню діалогу
Рисунок 39. Вікно “майстра” класів, закладка “Карта повідомлень”.
На другій закладці знаходяться змінні класу діалогу (Рис.40).
Рисунок 40. Вікно “майстра” класів, закладка “Змінні класу”.
Для додавання нової змінної треба натиснути “Add Variable…”.З’явиться вікно створення нової змінної класу (Рис.41). В ньому обов’язково треба вказати назву змінної, яка починається на m_, категорію (по значенню або об’єктна) та тип змінної.
Рисунок 22. Вікно створення нової змінної класу.
Після створення нової змінної вона з’являється на закладці “Змінні класу” “майстра” класів (Рис.42). Після натиснення “OK” можна побачити, що нова змінна з’явилась в середовищі у вікні перегляду класів і в тексті програми (Рис.43).
Рисунок 42. Вікно “майстра” класів після створення змінної.
Рисунок 43. Вікно середовища з новою змінною.
У відповідь на дії користувача в віконній програмі виникають повідомлення . Для обробки повідомлень треба включити повідомлення в карту повідомлень і додати до класу спеціальну функцію – обробник повідомлення. Найбільш коректно ці дії виконує майстер повідомлень (Рис 44). Для додавання нового обробника повідомлень треба вибрати елемент керування, повідомлення якого будуть оброблятися, вибрати повідомлення, для якого потрібен обробник, і натиснути клавішу “Add Function…”.
Рисунок 44. Вікно “майстра” класів при створенні обробника повідомлення.
У вікні додавання нового обробника треба ввести назву функції-обробника (Рис.45), яка обов’язково повинна починатися з On, і натиснути “OK”.
Рисунок 45. Вікно додавання обробника повідомлення.
В нижній частині вікна “майстра” класів з’явиться нова функція – член класу і повідомлення, яке ця функція обробляє (Рис.46).
Рисунок 46. Вікно “майстра” класів після створення обробника повідомлення.
Після натиснення “OK” можна побачити, що нова функція з’явилась в середовищі у вікні перегляду класів і в тексті програми (Рис.47).
Рисунок 47. Вікно середовища з новим обробником повідомлення.
Якщо запустити програму на компіляцію і виконання, то вона створить вікно діалогу з елементами керування (Рис.48)
Рисунок 48. Вікно програми після виконання.
Елемент Edit можна використовувати для введення інформації на передавання в програмі-передавачі і для приймання інформації в програмі-приймачі. Для цього потрібно в обробнику повідомлення натиснення кнопки Button1 написати реалізацію програми передавання даних з рядка редагування Edit (використовуючи вже створену змінну m_Edit) в COM-порт в програмі-передавачі і так само в програмі-приймачі написати реалізацію програми відображення даних, прийнятих з COM-порта, в рядку редагування Edit.
Розглянемо приклад створення програми-передавача даних. У вікні діалогу потрібно змінити напис на кнопці Button1. Для цього у властивостях даного елементу керування змінюємо поле Caption з “Button1” на “Передача даних” (рис. 49 і рис. 50).
Рис 49. Контекстне меню елемента Button1
Рис 50. Закладка General властивостей елемента Button1
В результаті вікно діалогу має вигляд (рис. 51):
Рис 51. Вікно програми
Тепер залишається тільки в обробнику повідомлення натиснення кнопки “Передача даних” (Button1) написати функції, що будуть здійснювати передачу інформації з елемента Edit на COM-порт.
Нижче наводиться приклад програми передачі даних на COM-порт.
Дана програма містить нові функції (Open(),WriteString(string Str), Close()). Їх в проект можна додати наступним чином:
У вікні перегляду класів середовища правою кнопкою миші клікнути по назві класу і вибрати Add Member Function (Рис. 52)
Рис. 52 Створення нової функції
У вікні створення нової функції дати назву фукції та її тип (рис. 53)
Рис. 53 Вікно створення функції
В результаті отримуємо функцію int CLaba1Dlg ::Open(). Аналогічно створюються решта функцій.
ПРИКЛАД ПРОГРАМИ
// laba1Dlg.cpp : implementation file
//
#include "stdafx.h"
#include "laba1.h"
#include "laba1Dlg.h"
#include "ComPort.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CLaba1Dlg dialog
CLaba1Dlg::CLaba1Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CLaba1Dlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CLaba1Dlg)
m_Edit = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CLaba1Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLaba1Dlg)
DDX_Text(pDX, IDC_EDIT1, m_Edit);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CLaba1Dlg, CDialog)
//{{AFX_MSG_MAP(CLaba1Dlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLaba1Dlg message handlers
BOOL CLaba1Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CLaba1Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CLaba1Dlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
int CLaba1Dlg::WriteString(string Str)
{
PurgeComm(hPort,PURGE_TXCLEAR | PURGE_RXCLEAR);
Str = Str + "\r";
DWORD dwError , dwNumBytesWritten;
WriteFile(
hPort,
Str.c_str(),
Str.length(),
&dwNumBytesWritten,
NULL);
return (int)dwNumBytesWritten;
}
int CLaba1Dlg ::Open()
{
hPort = CreateFile(
ComPortName.c_str(),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL
);
if(hPort == INVALID_HANDLE_VALUE)
{
return 0;
}
DCB PortDCB;
PortDCB.DCBlength = sizeof(DCB);
GetCommState(hPort , &PortDCB);
PortDCB.BaudRate = 9600;
PortDCB.fBinary = true; //!
PortDCB.fParity = true;
PortDCB.fOutxCtsFlow = false;
PortDCB.fOutxDsrFlow = false;
PortDCB.fDtrControl = DTR_CONTROL_ENABLE;
PortDCB.fDsrSensitivity = false;
PortDCB.fTXContinueOnXoff = false;
PortDCB.fOutX = false;
PortDCB.fInX = false;
PortDCB.fErrorChar = true;
PortDCB.fNull = false;
PortDCB.fRtsControl = RTS_CONTROL_ENABLE;
PortDCB.fAbortOnError = false;
PortDCB.ByteSize = 8;
PortDCB.Parity = NOPARITY;
PortDCB.StopBits = ONESTOPBIT;
// PortDCB.EofChar = '!';
if(!SetCommState(hPort , &PortDCB))
{
return 0;
// ShowMessage("Unable to configure the serial port");
}
COMMTIMEOUTS CommTimeouts;
GetCommTimeouts(hPort,&CommTimeouts);
CommTimeouts.ReadIntervalTimeout = 50;
CommTimeouts.ReadTotalTimeoutMultiplier = 1;
CommTimeouts.ReadTotalTimeoutConstant = 50;
CommTimeouts.WriteTotalTimeoutMultiplier = 1;
CommTimeouts.WriteTotalTimeoutConstant = 50;
SetCommTimeouts(hPort,&CommTimeouts);
FlushFileBuffers(hPort);
Opened = true;
return 1;
}
int CLaba1Dlg ::Close()
{
if(Opened)
{
CloseHandle(hPort);
Opened = false;
return 1;
}
else
return 0;
}
void CLaba1Dlg::OnButton1()
{
// TODO: Add your control notification handler code here
Open();
WriteString(m_Edit.LoadString);
Close();
}
Лабораторні роботи № 5-8
Дослідження режимів функціонування інтефейсу USB
МЕТА РОБОТИ: ознайомитися з процесом передачі даних через послідовний інтерфейс 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 м. Якщо ж пристрій не формулює особливих вимог до смуги пропускання, його можна підключити і неекранованим кабелем (який може бути тоншим і гнучкішим). Максимальна довжина кабелю для низькошвидкісних пристроїв - 5 м. Вимоги пристрою до живлення (діаметр провідників, споживана потужність) можуть зумовити необхідність використання кабелю меншої довжини. Із-за особливостей розповсюдження сигналу по кабелю число послідовно сполучених концентраторів обмежене шістьма (і сім'ю п'ятиметровими відрізками кабелю). Хост дізнається про підключення або відключення пристрою з повідомлення від концентратора (ця процедура називається опитом шини - bus enumeration). Потім хост привласнює пристрою унікальну адресу USB (1:127). Після відключення пристрою від шини USB його адреса стає доступною для інших пристроїв. Для індивідуального звернення до конкретних функціональних можливостей складеного пристрою застосовується 4-бітове поле кінцевої крапки. У низькошвидкісних пристроях за кожною функцією закріплюється не більше двох адрес кінцевих крапок: нульова кінцева крапка використовується для конфігурації і визначення стану USB, а також управління функціональним компонентом; а інша крапка - відповідно до функціональних можливостей компоненту. Пристрої з максимальною продуктивністю можуть підтримувати до 16 кінцевих крапок, резервуючи нульову крапку для завдань конфігурації і управління USB.Хост опитує всі пристрої і видає їм дозволу на передачу даних (розсилаючи для цього пакет-маркер - Token Packet). Таким чином, пристрої позбавлені можливості безпосереднього обміну даними - всі дані проходять через хост. Ця умова сильно заважала впровадженню інтерфейсу USB на ринок портативних пристроїв. В результаті в кінці 2001 року було прийнято доповнення до стандарту USB 2.0 - специфікація USB OTG (On-The-Go), призначена для з'єднання периферійних USB-устройств один з одним без необхідності підключення до хосту (наприклад, цифрова камера і фотопринтер). Пристрій, підтримуюче USB OTG, здатний частково виконувати функції хоста і розпізнавати, коли воно підключене до повноцінного хосту (на основі ПК), а коли - до іншого периферійного пристрою. Специфікація описує також протокол узгодження вибору ролі хоста при з'єднанні два USB. OTG-пристроїв. Дані на шині передаються транзакціями, інтервал між якими складає 1 мс. Передбачено чотири типи транзакцій. Передачі, що управляють, використовуються для конфігурації знов підключених пристроїв (наприклад, привласнення ним адреси USB) і їх компонентів. Пристрої з максимальною продуктивністю можуть бути налаштовані на роботу з конфігураційними повідомленнями завдовжки 8, 16, 32 або 64 байти (за умовчанням - 8 байт). Пристрої з низькою продуктивністю в змозі розпізнавати повідомлення, що управляють, завдовжки не більше 8 байт. Групова передача (bulk) використовується для адресної пересилки даних великого об'єму (до 1023 байт). Як приклад можна привести передачу даних на принтер або від сканера. Пристрої з низькою продуктивністю не підтримують цей режим. Передача даних переривання, наприклад, введених з клавіатури даних або відомостей про переміщення миші. Ці дані мають бути передані достатньо швидко для того, щоб користувач не відмітив ніякої затримки. Відповідно до специфікацій час затримки USB складає декілька мілісекунд. Ізохронні передачі (передачі в реальному масштабі часу). Пропускна спроможність і затримка доставки обмовляються до початку передачі даних. До ізохронних даних алгоритми корекції помилок непридатні (оскільки час на повторну їх ретрансляцію перевищує допустимий інтервал затримки). За один сеанс в такому режимі може бути передано до 1023 байт. Пристрої з низькою продуктивністю не підтримують цей режим. Слід також відзначити, що різними виробниками пропонувалися