Послідовний порт. COM порт. Розпаювання, розпинування та схема

Ось ми й дісталися COM порту. Але з ним все не так просто як з LPT, і його повноцінне використання вимагатиме значно більших зусиль. Головною проблемою є і його головна перевага - передача даних у послідовному вигляді. Якщо LPT байт даних передається по 8-ми лініях по біту на кожну, і стан кожної лінії можна було легко подивитися, то в COM порту байт даних передається біт за бітом по одній лінії (щодо землі, звичайно) і подивитися що там передається з допомогою одних світлодіодів не вдасться. Для цього потрібен спеціальний пристрій - перетворювач потоку послідовних даних у парралельний, т.зв. USART (Universal Synchronous/Asynchronous Receiver Transmitter). Наприклад, він є у складі материнської плати комп'ютера, забезпеченого COM портом, у будь-якому більш серйозному мікроконтролері.


Сподіваюся, ви ще занепали в освоєнні COM порту. Все не так уже й похмуро. Деякі результати можна отримати без USART. Сформулюємо завдання, яке реалізуємо на початковому етапі роботи з COM портом:


"Хочу щоб до комп'ютера через COM порт підключався світлодіод. Запускаю програму. Даю якусь дію в цій програмі, світлодіод загоряється, роблю інше - світлодіод гасне."


Завдання досить специфічне (з урахуванням того, що USART не використовується) і є чистою "самопальщиною", але цілком реалізована і працездатна. Давайте приступимо до її реалізації.


1. COM порт

Знову беремо системний блок вашого ПК і дивимось у тилову частину. Примітаємо там 9-ти штирковий роз'єм - це і є COM порт. Реально їх може бути кілька (до 4-х). На моєму ПК встановлено два COM порти (див. фото).


2. Подовжувач COM порту


3. Апаратна частина

З апаратною частиною нам теж доведеться "повозитися", тому що вона буде складніше ніж з першим пристроєм для LPT порту. Справа в тому, що протокол RS-232 по якому йде обмін даними в COM порту, має дещо відмінне співвідношення логічний стан - напруга. Якщо зазвичай це логічний 0 0 В, логічна 1 +5 В, то RS-232 це співвідношення таке: логічний 0 +12 В, логічна 1 -12 В.

І наприклад, отримавши -12 В не відразу зрозуміло, що з цією напругою робити. Зазвичай проводять перетворення рівнів RS-232 ТТЛ (0, 5 В). Найпростіший варіант – стабілітрони. Але я пропоную зробити цей перетворювач на спеціальній мікросхемі. Називається вона MAX232.

Тепер давайте подивимося, а які сигнали з порту COM ми можемо подивитися на світлодіодах? Насправді, в COM порту є аж 6 незалежних ліній, які становлять інтерес для розробника пристроїв сполучення. Дві з них поки що для нас недоступні – лінії з передачі послідовних даних. А ось 4 призначені для управління та індикації процесу передачі даних і ми зможемо "передати" їх під свої потреби. Дві з них призначені для управління з боку зовнішнього пристрою і ми їх поки чіпати не будемо, а ось останні дві лінії ми зараз і використовуємо. Вони називаються:

  • RTS- Запит на передачу. Лінія взаємодії, яка показує, що комп'ютер готовий для прийому даних.
  • DTR- Комп'ютер готовий. Лінія взаємодії, яка показує, що комп'ютер увімкнений і готовий до зв'язку.

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

Отже, зберемо схему, яка дозволить нам проводити задумані дії.

А ось її практична реалізація. Я думаю ви мені вибачте, що я зробив її в такому стрімкому макетному варіанті, бо робити плату для такої "високопродуктивної" схеми не хочеться.


4. Програмна частина

Тут все простіше. Давайте створимо Windows додаток Microsoft Visual C++ 6.0 на основі MFC для управління двома лініями взаємодії COM порту. Для цього створюємо новий проект MFC та вказуємо йому ім'я, наприклад, TestCOM. Далі вибираємо варіант побудови на основі діалогу.

Надайте зовнішній вигляд вікну діалогу нашої програми, як на рис. нижче, а саме додайте чотири кнопки по дві на кожну з ліній. Одна з них відповідно необхідна для того, щоб "погасити" лінію, інша щоб її "встановити" в одиниця.

Class CTestCOMDlg: public CDialog ( // Construction public: CTestCOMDlg(CWnd* pParent = NULL); // standard constructor HANDLE hFile;

Щоб наша програма могла управляти лініями COM порту, його треба спочатку відкрити. Напишемо код, відповідальний за відкриття порту під час завантаження програми.

HFile = CreateFile("COM2", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0,NULL); if(hFile==INVALID_HANDLE_VALUE) ( MessageBox("Не вдалося відкрити порт!", "Помилка", MB_ICONERROR); ) else ( MessageBox("Порт успішно відкритий", "Ok", MB_OK); )

За допомогою стандартної функції Win API CreateFile()відкриваємо COM-порт COM2. Далі перевіряємо успішність відкриття з виведенням інформаційного повідомлення. Ось тут треба зробити важливе зауваження: COM2 - це в моєму комп'ютері, а на Вашому комп'ютері Ви могли підключити його до іншого порту COM. Відповідно, його ім'я потрібно змінити на те, який порт Ви використовуєте. Подивитися, які номери портів є на Вашому комп'ютері, можна так: Пуск -> Налаштування -> Панель управління -> Система -> Обладнання -> Диспетчер пристроїв -> Порти (COM та LPT).

У результаті функція CTestCOMDlg::OnInitDialog(), розташована у файлі TestCOMDlg.cpp, класу нашого діалогу має набути вигляду:

BOOL CTestCOMDlg::OnInitDialog() ( CDialog::OnInitDialog(); // Add "About…" IDM_ABOUTBOX), ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); ) ) // Set the icon for this dialog. 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 hFile = CreateFile("COM2", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0,NULL); ( MessageBox("Порт успішно відкритий", "Ok", MB_OK); ) return TRUE; // return TRUE unless you set the focus to a control )

Тепер додамо обробники кнопок керування лініями. Я дав їм відповідні імена: функція, яка встановлює одиниця на лінії DTR - OnDTR1(), 0 - OnDTR0(). Для лінії RTS відповідно аналогічним чином. Нагадаю, що обробник створюється при подвійному натисканні на кнопці. У результаті, ці чотири функції повинні набути вигляду:

Void CTestCOMDlg::OnDTR1() ( // TODO: Add your control notification handler code here EscapeCommFunction(hFile, 6); ) void CTestCOMDlg::OnDTR0() ( // TODO: Add your control notification handler code here EscapeCommF 5); EscapeCommFunction(hFile, 3);

Поясню трохи, як вони працюють. Як видно, всередині себе вони містять виклик однієї і тієї ж Win API функції EscapeCommFunction()із двома параметрами. Перший - це хендл (HANDLE) на відкритий порт, другий - спеціальний код дії, відповідний необхідному стану лінії.

Все, комілюємо, запускаємо. Якщо все добре, маємо побачити повідомлення про успішне відкриття порту. Далі, натисканням відповідних кнопок блимаємо світлодіодами, підключеними до COM порту.

© Іванов Дмитро
Грудень 2006

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

Переривання та адреси

Передача даних від центрального процесора до будь-якого периферійного пристрою та навпаки контролюється завданням запиту на переривання (IRQ) та адреси вводу-виводу (I/O address). Для зовнішнього периферійного пристрою запит на переривання та адресу введення-виводу приписуються порту, через який він приєднується.

Самі слова "запит на переривання" повідомляють, що переривається робота ЦП і йому наказується зайнятися даними, що надходять з будь-якого пристрою. Усього існує 16 переривань - від 0 до 15. Всі послідовні та паралельні порти, як правило, вимагають свого власного запиту переривання, за винятком того, що порти СОМ1 та COM3, а також COM2 та COM4 часто мають загальний запит переривання.

Для кожного порту потрібно вказувати унікальну адресу вводу-виводу, яка подібна до поштової скриньки для кореспонденції, що приходить на адресу ЦП, в якій вона зберігається до обробки. Якщо будь-який запит на переривання або адресу вводу-виводу використовуються одночасно більш ніж одним пристроєм, то жоден з них не працюватиме належним чином і може навіть "зависнути" ПК.

У разі проблем із портом перевірте, які запити на переривання та адресу введення-виводу йому приписані.

Панель управління - Система - Пристрої - Порти СОМ та LPT

Якщо ви побачите перед будь-яким рядком жовтий гурток зі знаком оклику всередині, то, можливо, знайдете причину "перешкоди". Виділивши рядок, натисніть "Властивості - Ресурси". У полі "Список пристроїв, що конфліктують" знайдіть, що викликає конфлікт. Якщо виявиться, що це якась стара плата, яка не підтримує Plug & Play, вона буде вказана в списку як "Невідомий пристрій".

Щоб вирішити цю проблему, змініть запит на переривання або адресу введення-виводу для одного з пристроїв-порушників. Якщо порт знаходиться на системній платі, використовуйте програму початкової установки системи System Setup (BIOS).

Щоб ввійти в System Setup під час запуску ПК, натисніть клавішу "Delete", "F1" або іншу - дізнайтеся в документації на систему. У багатьох програмах початкової установки можна призначати запит на переривання та адресу вводу-виводу (встановити ресурси) для кожного конкретного порту, скасувавши старі.

Знайдіть запит на переривання або адресу введення-виводу, який не використовується.

Панель управління - Система - Пристрої - Комп'ютер

Ви побачите повний список ресурсів. Якщо запитів на переривання не використовуються, то спробуйте вимкнути за допомогою System Setup порт, який не використовується.

Після цього...

Система - Пристрої - Конфліктний пристрій - Ресурси

Вимкніть "Автоматичне налаштування". У вікні "Перелік ресурсів" виберіть тип ресурсу, натисніть кнопку "Змінити" і в полі "Значення" задайте нове (невикористовуване) значення запиту на переривання або адресу вводу-виводу.

Встановлення параметрів паралельних портів

Паралельні порти позначаються абревіатурою LPT. Комп'ютер автоматично приписує кожному виявленому паралельному порту адреси від LPT1 до LPT3.

Якщо ви встановлюєте другий паралельний порт, переконайтеся, що він не використовує вже наявний запит на переривання. У деяких комп'ютерах LPT1 та LPT2 за замовчуванням застосовують IRQ7. За допомогою диспетчера пристроїв установіть IRQ5 для LPT2. Якщо це неможливо, використовуйте програму Setup CMOS вашої системи.

Стандартні установки ресурсів паралельних портів

LPT-порт Запит на переривання Адреса введення-виводу
LPT1 IRQ7 ЗВС
LPT2 IRQ7 378
LPT3 IRQ5 278

Встановлення параметрів послідовних портів

Кожен послідовний порт ідентифікується за допомогою однієї з восьми можливих СОМ-адрес - СОМ1, COM2 і т. д., кожному з яких відповідають свою унікальну адресу введення-виводу та запит на переривання.

Будьте уважні при установці на ПК пристрою, який потребує СОМ-порту. Порти СОМ1 та COM2 мають стандартні адреси вводу-виводу та запити на переривання, які ніде не повинні змінюватися (зазвичай можуть бути змінені лише у програмі Setup CMOS вашого ПК). Якщо для нового пристрою потрібно призначити порт СОМ1 або COM2, то при завантаженні ПК увійдіть у програму Setup і або відключіть послідовний порт, приписаний до СОМ1 або COM2, або, якщо потрібно звільнити відповідні установки для пристрою, що додається, зміните ідентифікують його запит на переривання та адресу введення-виведення.

Зауважте, що всі стандартні адреси вводу-виводу використовують лише третє та четверте переривання. Оскільки два пристрої не повинні використовувати один і той же запит на переривання, то постарайтеся для нових зовнішніх пристроїв приписати портьте COM3 по COM3, вручну встановлюючи запити на переривання та адреси вводу-виводу за допомогою Диспетчера пристроїв (діалогове вікно "Властивості: Система").

Стандартні установки ресурсів послідовних портів

СОМ-порт Запит на переривання Адреса введення-виводу
СОМ1 IRQ4 3F8
COM2 IRQ3 2F8
COM3 IRQ4 ЗЕ8
COM4 IRQ3* 2Е8
СОМ5 IRQ4* ЗЕО
СОМ6 IRQ3* 2ЕО
СОМ7 IRQ4* 338
СОМ8 IRQ3* 238

* Можуть бути встановлені за допомогою Диспетчера пристроїв Windows 9x (Властивості: Система)

Оптимізація послідовних портів

Комп'ютер має один або два вбудовані послідовні порти у вигляді 9-штиркового роз'єму, зазвичай розташованих на задній панелі комп'ютера. За допомогою такого порту за одиницю часу можна передати лише 1 біт даних, тоді як за допомогою паралельного - 8 біт. Швидкість роботи послідовного порту залежить від універсального асинхронного приймач-передавача (UART), що перетворює паралельний потік даних, що проходить через шину ПК, в однобітовий.

Як правило, сучасні ПК поставляються з UART моделі 16550. У цьому випадку максимальна пропускна спроможність становить 115 кбіт/с, що забезпечує достатню смугу пропускання більшості послідовних пристроїв. Більш старі UART моделей 16450 і 8250 із цим завданням вже не справляються. Але іноді продуктивність UART 16550 може виявитися недостатньо, адже деякі аналогові модеми обробляють стислі дані зі швидкістю 230 кбіт/с, а адаптери ISDN - до 1 Мбіт/с. Отже, якщо вам потрібна більша швидкість передачі даних, купуйте плату розширення з UART моделі 16750, здатної працювати зі швидкістю 921 кбіт/с.

Робота з паралельними портами

Паралельні порти зазвичай використовуються для принтерів, хоча через них можуть підключатися до ПК та інших пристроїв, наприклад, сканери. З їхньою допомогою можна передавати дані зі швидкістю від 40 Кбайт/с до 1 Мбайт/с, інколи ж навіть із більшою.

В основному, всі ПК поставляються з одним паралельним портом у вигляді 25-штиркового роз'єму на задній панелі. Щоб додати другий порт, необхідно купити контролер введення-виводу та встановити його в роз'єм розширення на системній платі. Паралельний порт буває чотирьох типів - односпрямований, двоспрямований, з покращеними можливостями (ЕРР-порт) та з розширеними можливостями (ЕСР-порт). Для кожного з них характерні різні швидкість та можливості. Порти більшості нових ПК підтримують усі чотири режими, і щоб дізнатися, який з них забезпечує паралельний порт, перегляньте у програмі Setup (CMOS Setup utility) вашого ПК розділ периферійних пристроїв (Integrated peripherals).

Односпрямований портіноді називається також SPP-портом. Ця базова конфігурація пропускає дані зі швидкістю 40-50 Кбайт/с лише в одному напрямку - до принтера або іншого зовнішнього пристрою.

Двонаправлений порт.Забезпечує двосторонній обмін даними зі швидкістю передачі від 100 до 300 Кбайт/с між ПК та зовнішнім пристроєм. При цьому інформація про стан останнього надходить до комп'ютера.

Порт з покращеними можливостями (ЕРР).Розроблений для зовнішніх дисководів та мережевих адаптерів, що потребують високої продуктивності. Забезпечує швидкість передачі даних від 400 Кбайт/с до 1 Мбайт/с та більше.

При установці у програмі System Setup опції ЕРР пропонуються версії 1.7 та 1.9. Практично всім периферійних пристроїв, куплених останніми роками, потрібно вибирати 1.9.

Порт із розширеними можливостями (ЕСР).Підвищує швидкість та розширює можливості обміну даними між зовнішнім пристроєм та комп'ютером. Якщо принтер та інший периферійний пристрій підтримують ЄСР, вони безпосередньо видають повідомлення про стан пристроїв і помилки.

Якщо у програмі. System Setup встановити опцію ЕСР, то з'явиться рядок для вибору DMA-каналу (канал безпосереднього доступу до пам'яті, direct memory access). Необхідно задати його так само, як і при запиті на переривання. Щоб запобігти виникненню конфліктів DMA-каналів, перегляньте вільні з них у вікні "Властивості: Комп'ютер", як описано вище. Якщо конфлікту не уникнути, поверніться до двонаправленого режиму порту.

Кращий порт для урагану даних.

У нових системах та периферійних пристроях паралельні та послідовні порти стали замінювати універсальною послідовною шиною ( Universal Serial Bus, USB). З її допомогою можна досягти швидкості передачі даних до 12 Мбіт/с, а також підключати за наявності всього одного порту клавіатури, монітори, миші та багато інших (до 127) пристрої, які, як і з вирішальним подібним завданням SCSI-інтерфейсом, можуть бути з'єднані "ланцюжком". При цьому використовується лише один запит переривання. USB-шину можна встановлювати і більш старі комп'ютери, купивши відповідну плату розширення.

Іноді доводиться вирішувати завдання зв'язку електронного пристрою з комп'ютером, чи то обмін даними або віддалене керування. Ця стаття описує, як можна реалізувати, використовуючи послідовний порт. Головною його перевагою є те, що стандартний програмний інтерфейс Windows (API) дозволяє проводити безпосереднє керування вихідними лініями, даючи прямий контроль над ними, та має функцію очікування деякої події, пов'язаної з COM-портом. Також стандарт RS-232, за яким виконані COM-порти, допускає підключення та відключення кабелів під час роботи пристроїв (hot plug).

Опис

COM-порт (послідовний порт)- Двонаправлений інтерфейс, що передає дані в послідовному вигляді (біт за бітом) за протоколом RS-232. Це досить-таки поширений протокол, застосовуваний зв'язку одного пристрою (наприклад, комп'ютера) коїться з іншими за допомогою проводів довжиною до 30м. Рівні логічних сигналів тут відрізняються від стандартних: рівень логічної одиниці – від +5 до +15В, рівень логічного нуля – від -5 до -15В, що потребує додаткових перетворень схеми, але забезпечує хорошу стійкість до перешкод.

Розглянемо 9-піновий роз'єм (DB-9M). Нижче представлено його розпинування:

№ висновку Найменування Характер сигналу Сигнал
1 DCD Вхідний Data carrier detect
2 RxD Вихідний Transmit data
3 TxD Вхідний Receive data
4 DTR Вихідний Data terminal ready
5 GND - Ground
6 DSR Вхідний Data set ready
7 RTS Вихідний Request to send
8 CTS Вхідний Clear to send
9 RI Вхідний Ring indicator

Найбільше нас цікавитимуть піни 2 (передача даних), 3 (прийом даних) та 5 (земля). Це мінімальний набір для двостороннього спілкування приладів.

Докладно зупинятись на описі протоколу не буду. Для цього є ГОСТ'и тощо. Тому ми підемо далі і поговоримо про те, як керувати цим звіром.

Застосування

Як уже говорилося, рівні ЛЗ RS-232 відрізняються від стандартних рівнів ТТЛ. Отже, нам необхідно якось перетворювати величини напруги. Тобто. зробити 5В з +15В та 0В з -15В (і навпаки). Один із способів (і, мабуть, найпростіший) – використання спеціальної мікросхеми MAX232. Вона проста в розумінні і одночасно може перетворювати два логічні сигнали.

Нижче наведено схему її включення:


Думаю, труднощів не повинно бути. Це один із варіантів використання цієї мікросхеми: передача даних з мікроконтролера на ЕОМ і навпаки. Переданий сигнал надходить на ніжки T x IN з одного боку та на R x IN з іншого. Вхідні сигнали знімаються з T x OUT та R x OUT відповідно.

Програмування

Спочатку поговоримо про програмування портів на низькому рівні. Так буде правильніше. Я дуже багато нервів витратив, розбираючись із цим інтерфейсом, поки не почав вникати в принцип його роботи на нижчому рівні, ніж проста передача символів. Якщо це буде зрозуміло, значить і з мовами високого рівня проблем не буде.

Нижче представлені адреси COM-портів, з якими нам доведеться працювати:

Назва порту Адреса IRQ
COM 1 3F8h 4
COM 2 2F8h 3
COM 3 3E8h 4
COM 4 2E8h 3

Вони можуть відрізнятися. Встановити значення можна в налаштуваннях BIOS'а. Це базові адреси. Від них і залежатимуть адреси регістрів, відповідальні за роботу портів:

Адреса DLAB Читання/Запис Абревіатура Назва регістру
+ 0 =0 Write Transmitter Holding Buffer
=0 Read Receiver Buffer
=1 Read/Write Divisor Latch Low Byte
+ 1 =0 Read/Write IER Interrupt Enable Register
=1 Read/Write Divisor Latch High Byte
+ 2 - Read IIR Interrupt Identification Register
- Write FCR FIFO Control Register
+ 3 - Read/Write LCR Line Control Register
+ 4 - Read/Write MCR Modem Control Register
+ 5 - Read LSR Line Status Register
+ 6 - Read MSR Modem Status Register
+ 7 - Read/Write Scratch Register

Перша колонка – адреса регістру щодо базового. Наприклад, для COM1: адреса регістра LCR буде 3F8h+3=3FB. Друга колонка - DLAB (Divisor Latch Access Bit) біт, що визначає різне призначення для одного і того ж регістру. він дозволяє оперувати 12-ма регістрами, використовуючи всього 8 адрес. Наприклад, якщо DLAB=1, то, звертаючись на адресу 3F8h, ми будемо встановлювати значення молодшого байта дільника частоти тактового генератора. Якщо ж DLAB=0, то, звертаючись за тією ж адресою, в цей регістр буде записаний байт, що передається або прийнятий.

"Нульовий" регістр

Йому відповідають регістри прийому/передачі даних та встановлення коефіцієнта дільника частоти генератора. Як вже було сказано вище, якщо DLAB=0, то регістр використовується для запису даних/переданих даних, якщо ж він дорівнює 1, то встановлюється значення молодшого байта дільника частоти тактового генератора. Від значення цієї частоти залежить швидкість передачі. Старший байт дільника записується в наступну комірку пам'яті (тобто для порту COM1 це буде 3F9h). Нижче наведено залежність швидкості передачі даних від коефіцієнта дільника:

Interrupt Enable Register (IER)

Якщо DLAB=0, він використовується як регістр управління перериваннями від асинхронного адаптера, якщо DLAB=1, то ньому задається старший байт дільника частоти тактового генератора.

Interrupt Identification Register (IIR)

Переривання – це подія, у якому зупиняється виконання основний програми і починається виконання процедури переривань. Цей регістр визначає тип переривання, що відбулося.

Line Control Register (LCR)

Це керуючий регістр.

Біт 7 1 Divisor Latch Access Bit – завдання швидкості обміну даними
0 Звичайний режим (управління перериваннями, прийом/передача даних)
Біт 6 Імітувати обрив лінії (надсилає послідовність з декількох нулів)
Біти 3 – 5 Біт 5 Біт 4 Біт 3 Вибір парності
X X 0 No Parity
0 0 1 Odd Parity
0 1 1 Even Parity
1 0 1 High Parity (Sticky)
1 1 1 Low Parity (Sticky)
Біт 2 Кількість стоп-бітів
0 1 стоп-біт
1 2 стоп-біти при 6,7 або 8 біт даних або 1.5 стоп-біти при 5 бітах даних.
Біти 0 And 1 Біт 1 Біт 0 Число бітів даних
0 0 5 біт
0 1 6 біт
1 0 7 біт
1 1 8 біт

Перевірка парності передбачає передачу ще одного біта – біта парності. Його значення встановлюється таким чином, щоб у пакеті бітів загальна кількість одиниць (або нулів) було парним або непарним, залежно від установки регістрів порту. Цей біт служить для виявлення помилок, які можуть виникнути під час передачі даних через перешкоди на лінії. Приймальний пристрій заново обчислює парність даних і порівнює результат із прийнятим бітом парності. Якщо парність не збіглася, вважається, що дані передані з помилкою.

Стоп-біт означає закінчення передачі.

Modem Control Register (MCR)

Реєстр керування модемом.

Біт Значення
0 Лінія DTR
1 Лінія RTS.
2 Лінія OUT1 (запасна)
3 Лінія OUT2 (запасна)
4 Запуск діагностики при вході асинхронного адаптера, замкнутому його вихід.
5-7 Рівні 0

Line Status Register (LSR)

Реєстр, визначальний стан лінії.

Біт Значення
0 Дані отримані та готові для читання, автоматично скидається під час читання даних.
1 Помилка переповнення. Було прийнято новий байт даних, а попередній ще не було раховано програмою. Попередній байт втрачено.
2 Помилка парності скидається після читання стану лінії.
3 Помилка синхронізації.
4 Виявлено запит на переривання передачі "BREAK" - довгий рядок нулів.
5 Реєстр зберігання передавача порожній, у нього можна записати новий байт передачі.
6 Реєстр зсуву передавача порожній. Цей регістр отримує дані з регістра зберігання і перетворює в послідовний вид передачі.
7 Тайм-аут (пристрій не пов'язаний із комп'ютером).

Modem Status Register (MSR)

Регістр стану модему.

Ну от і все. Оперуючи цими регістрами, можна безпосередньо спілкуватися з COM-портом, керувати передачею та прийомом даних. Якщо вам не хочеться возитися з пам'яттю, можна скористатися готовими компонентами для різних середовищ програмування: C++, VB, Delphi, Pascal і т.д. Вони інтуїтивно зрозумілі, тому, гадаю, тут не варто загострювати на них увагу.

Особливістю даного порту проти іншими " послідовними " технологіями є факт відсутності будь-яких тимчасових вимог між двома байтами. Тимчасові вимоги є лише між бітами одного байта (включаючи старт, стоп і парність), величина, обернена до тимчасової паузи між бітами одного байта, називається baud rate - швидкість передачі. Також у цій технології відсутнє поняття "пакет".

Інші "послідовні" технології, такі як X.25, USB або Ethernet, мають поняття "пакет", і накладають жорсткі часові вимоги між усіма бітами одного пакета.

Тому у термінології Cisco IOS цей порт називався async - на відміну синхронних serial, тобто. X.25. З цієї ж причини модуль Windows , що реалізує PPP поверх цього порту, називається AsyncMac.sys (у стандарті PPP окремо описана реалізація PPP, що використовує поняття "пакет", над послідовним портом цього поняття не має).

Деякі протоколи зв'язку з індустріальним обладнанням накладають жорсткі вимоги часу між байтами послідовного порту. Такі протоколи вкрай складні в реалізації багатозадачних ОС зі слабкою підтримкою реального часу, такої, як Windows, і тому часто вимагають MS-DOS і застарілого ПЗ майже 20-річної давності на комп'ютері, що управляє.

Призначення

Найчастіше для послідовного порту персональних комп'ютерів використовується стандарт RS-232C. Раніше послідовний порт використовувався для підключення терміналу, пізніше модему або миші . Зараз він використовується для з'єднання з, для зв'язку з апаратними засобами розробки обчислювальних систем, що вбудовуються, супутниковими ресиверами, касовими апаратами, а також з приладами систем безпеки об'єктів.

За допомогою COM-порту можна з'єднати два комп'ютери, використовуючи так званий нуль-модемний кабель (див. нижче). Використовувався з часів MS-DOS для перекачування файлів з одного комп'ютера на інший, UNIX для термінального доступу до іншої машини, а в Windows (навіть сучасної) - для відладчика рівня ядра.

Перевагою технології є крайня простота обладнання. Недоліком є ​​низька швидкість, великі розміри роз'ємів, а також високі вимоги до часу відгуку ОС і драйвера і висока кількість переривань (одне на половину апаратної черги, тобто 8 байт).

Роз'єми

На материнських платах провідних виробників (наприклад, Intel) або готових системах (наприклад, IBM, Hewlett-Packard, Fujitsu Siemens Computers) для послідовного порту прийнято наступне умовне позначення:

Найчастіше використовуються стандартизовані в 1969 році D-подібні роз'єми: 9-ти та 25-ти контактні, (DB-9 та DB-25 відповідно). Раніше використовувалися також DB-31 та круглі восьмиконтактні DIN-8. Максимальна швидкість передачі, у звичайному виконанні порту, становить 115200 бод.

Актуальність

Існують стандарти на емуляцію послідовного порту над USB та над Bluetooth (ця технологія значною мірою і проектувалась як «бездротовий послідовний порт»).

Проте програмна емуляція цього порту широко використовується і сьогодні. Так, наприклад, практично всі мобільні телефони емулюють в собі класичний COM-порт і модем для реалізації тетерингу - доступу комп'ютера в Інтернет через GPRS/EGDE/3G обладнання телефону. Для фізичного підключення до комп'ютера використовується USB, Bluetooth або Wi-Fi.

Також програмна емуляція даного порту надається «гостям» віртуальних машин VMWare та Microsoft Hyper-V, основна мета при цьому – підключення відладчика рівня ядра Windows до «гостя».

Апаратура

Роз'єм має контакти:

DTR (Data Terminal Ready – готовність до прийому даних) – вихід на комп'ютері, вхід на модемі. Означає готовність комп'ютера працювати з модемом. Скидання цієї лінії викликає майже повне перезавантаження модему в початковий стан, зокрема. кидання трубки (деякі керуючі регістри виживають після такого скидання). У UNIX це відбувається, якщо всі програми закрили файли на драйвері серіального порту. Миша використовує цей провід для отримання живлення.

DSR (Data Set Ready – готовність до передачі даних) – вхід на комп'ютері, вихід на модемі. Чи означає готовність модему. Якщо ця лінія знаходиться в нулі - то в ряді ОС стає неможливо відкрити порт як файл.

RxD (Receive Data – прийом даних) – вхід на комп'ютері, вихід на модемі. Потік даних, що входить до комп'ютера.

TxD (Transmit Data – передача даних) – вихід на комп'ютері, вхід на модемі. Потік даних із комп'ютера.

CTS (Clear to Send – готовність передачі) – вхід на комп'ютері, вихід на модемі. Комп'ютер повинен призупинити передачу даних, доки цей провід не буде виставлено в одиницю. Використовується в апаратному протоколі керування потоком для запобігання переповненню в модемі.

RTS (Request to Send – запит на передачу) – вихід на комп'ютері, вхід на модемі. Модем повинен призупинити передачу даних, доки цей провід не буде виставлено в одиницю. Використовується в апаратному протоколі керування потоком для запобігання переповненню в обладнанні та драйвері.

DCD (Carrier Detect – наявність несучої) – вхід на комп'ютері, вихід на модемі. Зводиться модемом в одиницю після встановлення з'єднання з модемом з боку, скидається в нуль при розриві зв'язку. Апаратура комп'ютера може видавати переривання під час такої події.

RI (Ring Indicator – сигнал виклику) – вхід на комп'ютері, вихід на модемі. Зводиться модемом в одиницю після виявлення сигналу виклику телефонного дзвінка. Апаратура комп'ютера може видавати переривання під час такої події.

SG (Signal Ground - сигнальна земля) - загальний сигнальний провід порту, не є спільною землею, Як правило, ізольований від корпусу ЕОМ або модему.

У нуль-модемному кабелі використовуються дві перехрещені пари: TXD/RXD та RTS/CTS.

Стандартна (з часів оригінальної IBM PC) апаратура порту називається UART 16550 (нині включена в SuperIO мікросхему на материнській платі разом із низкою інших пристроїв). З часів IBM PC в ній з'явилася апаратна черга байт, яка сильно знижує кількість переривань, що видаються пристроєм.

Програмний доступ до СОМ-порту

UNIX

Для кожного порту в реєстрі є розділ. Ці розділи мають такі імена:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Serial\Parameters\Serial10000

де останнє значення “Serial10000” – унікальний номер для кожного нового доданого до системи COM-порту, для другого – “Serial10001” тощо.

Для зв'язку з пристроями, що підтримують Bluetooth, деяким програмам (наприклад, до таких програм належать: програма, яка синхронізує список контактів з мобільним телефоном; програма, яка витягує координати GPS з приймача GPS) на комп'ютері користувача потрібен COM-порт.

До програм, що використовують COM-порти для підтримки зв'язку за допомогою технології бездротового підключення Bluetooth, безпосередньо розроблених фірмою Microsoft, належать:

  • HotSync, що використовується в ручних комп'ютерах
  • ActiveSync , що використовується в кишенькових ПК

OS/2

Наявний драйвер COM.SYS підтримує лише 4 COM-порти, кожен з яких повинен мати свою лінію переривань. Для обслуговування COM-портів із загальною лінією переривання необхідно скористатися драйвером SIO.

Нуль-модемний кабель

Основна стаття: Нуль-модемний кабель

У деяких випадках можливе застосування спрощеного варіанта кабелю, в якому використовуються тільки контакти 2, 3 і 5.

Див. також

  • Сигнали послідовних портів

Примітки

Посилання

  • Переклад посібника з програмування СОМ-порту в POSIX операційних системах
  • Програмування порту на java – дозволяє працювати з Windows, на відміну від офіційних пакетів від Sun.
  • Програмування COM порту C++ під Windows. Готова бібліотека, вихідні тексти, приклади програм.
  • Яшкардін В.Л.Послідовний порт. Програмування COM-порту Windows і MS-DOS . SoftElectro (2009). Архівовано з першоджерела 8 лютого 2012 року.

). Незважаючи на те, що деякі інтерфейси комп'ютера (наприклад, Ethernet, FireWire та USB) теж використовують послідовний спосіб обміну інформацією, назва "послідовний порт" закріпилася за портом стандарту RS-232.

Енциклопедичний YouTube

  • 1 / 5

    Найчастіше для послідовного порту персональних комп'ютерів використовується стандарт RS-232C. Раніше послідовний порт використовувався для підключення терміналу, пізніше модему або миші . Зараз він використовується для з'єднання з, для зв'язку з апаратними засобами розробки вбудованих обчислювальних систем, супутниковими ресиверами, касовими апаратами, з приладами систем безпеки об'єктів, а також з багатьма іншими пристроями.

    За допомогою COM-порту можна з'єднати два комп'ютери, використовуючи так званий нуль-модемний кабель (див. нижче). Використовувався з часів MS-DOS для перекачування файлів з одного комп'ютера на інший, UNIX для термінального доступу до іншої машини, а в Windows (навіть сучасної) - для відладчика рівня ядра.

    Перевагою технології є крайня простота обладнання. Недоліком є ​​низька швидкість, великі розміри роз'ємів, а також високі вимоги до часу відгуку ОС і драйвера і велика кількість переривань (одне на половину апаратної черги, тобто 8 байт).

    Роз'єми

    На материнських платах провідних виробників (наприклад, Intel) або готових системах (наприклад, IBM, Hewlett-Packard, Fujitsu, Siemens, Computer) для послідовного порту прийнято наступне умовне позначення:

    Найчастіше використовуються стандартизовані в 1969-году D-подібні роз'єми: 9- і 25-контактні, (DE-9 і DB-25 відповідно). Раніше використовувалися також DA-31 та круглі восьмиконтактні DIN-8. Максимальна швидкість передачі у звичайному виконанні порту становить 115 200 бод.

    Актуальність

    Існують стандарти на емуляцію послідовного порту над USB та над Bluetooth (ця технологія значною мірою і проектувалась як «бездротовий послідовний порт»).

    Проте програмна емуляція цього порту широко використовується і сьогодні. Так, наприклад, практично всі мобільні телефони емулюють в собі класичний COM-порт і модем для реалізації тетерингу - доступу комп'ютера в Інтернет через GPRS/EDGE/3G обладнання телефону. При цьому для фізичного підключення до комп'ютера використовується USB, Bluetooth або Wi-Fi.

    Також програмна емуляція даного порту надається «гостям» віртуальних машин VMWare та Microsoft Hyper-V, основна мета при цьому – підключення відладчика рівня ядра Windows до «гостя».

    У вигляді UART, що відрізняється рівнями напруги і відсутністю додаткових сигналів, присутній практично у всіх мікроконтролерах, крім найменших, SoC, платах розробників, а також присутній на платах більшої частини пристроїв, але не виведений роз'єм на корпус. Така популярність пов'язана з простотою цього інтерфейсу, як з фізичної точки зору, так і з легкістю доступу до порту ПЗ у порівнянні з іншими інтерфейсами.

    Апаратура

    Роз'єм має контакти:

    DTR (Data Terminal Ready – готовність до прийому даних) – вихід на комп'ютері, вхід на модемі. Означає готовність комп'ютера працювати з модемом. Скидання цієї лінії викликає майже повне перезавантаження модему в початковий стан, у тому числі кидання трубки (деякі регістри, що управляють, виживають після такого скидання). У UNIX це відбувається, якщо всі програми закрили файли на драйвері послідовного порту. Миша використовує цей провід для отримання живлення.

    DSR (Data Set Ready – готовність до передачі даних) – вхід на комп'ютері, вихід на модемі. Чи означає готовність модему. Якщо ця лінія знаходиться в нулі - то в ряді ОС стає неможливо відкрити порт як файл.

    RxD (Receive Data – прийом даних) – вхід на комп'ютері, вихід на модемі. Потік даних, що входить до комп'ютера.

    TxD (Transmit Data – передача даних) – вихід на комп'ютері, вхід на модемі. Потік даних із комп'ютера.

    CTS (Clear to Send – готовність передачі) – вхід на комп'ютері, вихід на модемі. Комп'ютер повинен призупинити передачу даних, доки цей провід не буде виставлено в одиницю. Використовується в апаратному протоколі керування потоком для запобігання переповненню в модемі.

    RTS (Request to Send – запит на передачу) – вихід на комп'ютері, вхід на модемі. Модем повинен призупинити передачу даних, доки цей провід не буде виставлено в одиницю. Використовується в апаратному протоколі керування потоком для запобігання переповненню в обладнанні та драйвері.

    DCD (Carrier Detect – наявність несучої) – вхід на комп'ютері, вихід на модемі. Зводиться модемом в одиницю після встановлення з'єднання з модемом з боку, скидається в нуль при розриві зв'язку. Апаратура комп'ютера може видавати переривання під час такої події.

    RI (Ring Indicator – сигнал виклику) – вхід на комп'ютері, вихід на модемі. Зводиться модемом в одиницю після виявлення сигналу виклику телефонного дзвінка. Апаратура комп'ютера може видавати переривання під час такої події.

    SG (Signal Ground - сигнальна земля) - загальний сигнальний провід порту, не є спільною землею, Як правило, ізольований від корпусу ЕОМ або модему.

    У нуль-модемному кабелі використовуються дві перехрещені пари: TXD/RXD та RTS/CTS.

    Вихідно в IBM PC і IBM PC/XT апаратура порту була побудована на мікросхемі UART 8250 фірми National Semiconductor, потім мікросхема була замінена на 16450, програмно сумісної з попередніми, але що дозволяла використовувати швидкості аж до 115200 біт в секунду, потім з'явилася мікросхема двонаправлений FIFO буфер даних зниження навантаження на контролер переривань. В даний час включена в SuperIO мікросхему на материнській платі разом з іншими пристроями.