Difference between revisions of "Сериен порт"
(193 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== Цел на упражнението == | == Цел на упражнението == | ||
− | + | Запознаване със сериен порт | |
− | == | + | == RS-232C == |
− | + | Интерфейсът RS-232 е с повече от половин век история и в момента когато казваме "сериен порт" най-често става дума за RS-232. В сравнение със съвременните мегабитови интерфейси като USB (също сериен интерфейс), RS-232 връзката изглежда бавна и ненужна, но тя e същественa поради няколко причини: | |
+ | *За разбиране на процеса на комуникация с операционната система. Текстовият интерфейс е в основата на всяка една операционна система, а той e базиран върху концепцията на серийния терминал. Днес хардуерният текстов терминал е заместен с псевдо терминал. | ||
− | + | [[Image:pty.png|thumb|right|250px|Псевдо терминал Linux]] | |
+ | [[Image:ASR-33.jpg|thumb|left|250px|ASR-33 TeleTYpe]] | ||
+ | [[Image:vt05.jpg|thumb|center|250px|VT05 Първият терминал с екран]] | ||
− | |||
− | + | *Все още се ползва, въпреки че е загубила широката си употреба. Серийния интрефейс се среща за връзка с индустриални контролери и комуникационна апаратура. | |
− | + | *USB, Bluetooth, IrDA предлагат средства за емулиране на RS232 серийна връзка | |
− | |||
− | |||
− | |||
− | |||
+ | [[Image:DB25.png|thumb|400px|DB-25]] | ||
+ | [[Image:DB9.png|thumb|400px|DB-9]] | ||
+ | [[Image:RJ45.png|thumb|400px|RJ-45]] | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | Повечето серийни интерфейси с ниска скорост са някакъв вариант на RS-232C стандарта. Този стандарт определя електрическите характеристики и значението на сигнала по всеки от проводниците, както и разположението на пиновете в традиционния 25 пинов конектор (DB-25p фиг.4). | ||
+ | |||
+ | Пълният стандарт RS-232C (EIA-232-E, ITU-T V.24) реално не се използва, защото определя множество сигнали, които са ненужни при обикновена комуникация. DB-25 конекторите са неудобни и поради големината си. В резултат на това те са заместени от 9 пинов конектор (DB-9, фиг.5), а като удобна алтернатива се ползва и RJ-45. | ||
+ | |||
+ | В таблицата са дадени наименованията на сигналите и разположението им на пиновете. Обикновено се ползват 7 проводника за осъществяване на връзка (DSR и DCD; FG и SG; ползват общ проводник). | ||
+ | |||
+ | '' '''Таблица със значенията на пиновете (мъжки куплунг) за различните конектори.''' '' | ||
+ | <table border=2 cellpadding=3 cellspacesing=1> | ||
+ | <tr> | ||
+ | <td>DB-25</td><td>DB-9</td><td>RJ-45</td><td>Име</td><td>Значение</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>1</td><td> - </td><td> - </td><td>FD</td><td>Frame Ground</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>2</td><td>3</td><td>6</td><td>TD</td><td>Transmitted Data</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>3</td><td>2</td><td>5</td><td>RD</td><td>Received Data</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>4</td><td>7</td><td>8</td><td>RTS</td><td>Request To Send</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>5</td><td>8</td><td>7</td><td>CTS</td><td>Clear To Send</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>6</td><td>6</td><td>1</td><td>DSR</td><td>Data Set Ready</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>7</td><td>5</td><td>4</td><td>SG</td><td>Signal Ground</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>8</td><td>1</td><td>2</td><td>DCD</td><td>Data Carrier Detect</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>20</td><td>4</td><td>3</td><td>DTR</td><td>Data Terminal Ready</td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | |||
+ | На фигури 4,5 и 6 са дедени разположенията на мъжките пинове, в женския конектор те са разположени огледално. | ||
+ | |||
+ | === Свързване === | ||
+ | При свързване на две устройства с RS-232 сигналът за предаване (Tx,TD) от едно устройство трябва да се подава на пин за приемане (Rx,RD) на второто устройство. Съществуват два типа конфигурации на серийните устройствата: | ||
+ | *DTE (Data Terminal Equipment) - формално управлява връзката (master) стандартна схема на свързване | ||
+ | *DCE (Data Communications Equipment) - (slave) обърната сигнализация. | ||
+ | Принципно могат да се свързват устройства DTE към DCT, DTE към DTE, DCT към DCT | ||
+ | |||
+ | Примерно: | ||
+ | *компютър (DTE)-rs232-(DCE)modem-FM-modem(DCE)-rs232-(DTE)компютър | ||
+ | *компютър (DTE)-(DTE)компютър. | ||
+ | |||
+ | Всяко едно устройство може да е конфигурирано или като DTE или като DCE, рядко може да поддържа и двата варианта, но не в един и същ момент. | ||
+ | |||
+ | Когато устройствата са еднотипни за връзка между тях трябва да се ползва кръстосан кабел, наречен още '''null modem''' кабел. За връзка DТE-DCE се ползва '''прав кабел'''. Съществува и трета разновидност на кабели използвана при cisco апаратура наречени '''"rollover"''' кабели, при които изводите в единия край са огледално пренаредени в другия. | ||
+ | |||
+ | '' '''Конфигурация на Null Modem кабел''' '' | ||
+ | <table border="2" cellpadding="3" cellspacing="1"> | ||
+ | <tr > | ||
+ | <td colspan=2 style="text-align:center">DB9-1 пин/проводник</td> | ||
+ | <td colspan=2 style="text-align:center">DB9-2 пин/проводник</td> </tr> | ||
+ | <tr> | ||
+ | <td>Receive Data</td> | ||
+ | <td><div align="center">2</div></td> | ||
+ | <td><div align="center">3</div></td> | ||
+ | <td>Transmit Data</td> | ||
+ | |||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>Transmit Data</td> | ||
+ | <td><div align="center">3</div></td> | ||
+ | <td><div align="center">2</div></td> | ||
+ | <td>Receive Data</td> | ||
+ | </tr> | ||
+ | |||
+ | <tr> | ||
+ | <td>Data Terminal Ready</td> | ||
+ | <td><div align="center">4</div></td> | ||
+ | <td><div align="center">6+1</div></td> | ||
+ | <td>Data Set Ready + Carrier Detect</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>System Ground</td> | ||
+ | |||
+ | <td><div align="center">5</div></td> | ||
+ | <td><div align="center">5</div></td> | ||
+ | <td>System Ground</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>Data Set Ready + Carrier Detect</td> | ||
+ | <td><div align="center">6+1</div></td> | ||
+ | |||
+ | <td><div align="center">4</div></td> | ||
+ | <td>Data Terminal Ready</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>Request to Send</td> | ||
+ | <td><div align="center">7</div></td> | ||
+ | <td><div align="center">8</div></td> | ||
+ | |||
+ | <td>Clear to Send</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>Clear to Send</td> | ||
+ | <td><div align="center">8</div></td> | ||
+ | <td><div align="center">7</div></td> | ||
+ | <td>Request to Send</td> | ||
+ | |||
+ | </tr> | ||
+ | </table> | ||
+ | |||
+ | === Скорост на предаване === | ||
+ | За успешна комуникация скоростта на предаване на едното устройство трябва да е равна на скоростта на приемане на второто устройство. Повечето серийни контролери не поддържат автоматичен избор на скоростта, затова се налага ръчна конфигурация за съгласуване на двете устройства. | ||
+ | |||
+ | Поддържаните скорости зависят от серийния контролер, обикновено са в границите между '''50 bit/s 110, 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 bit/s'''(= 1.8432 MHz / 16) | ||
+ | |||
+ | Възможна е асиметрична връзка (скоростта в двете посоки (Up/Down link) е различна). | ||
+ | |||
+ | Понякога името на параметъра дефиниращ скоростта се нарича ''baud'' (J. M. Emile Baudot, - бод - сивола в секунда.) | ||
+ | |||
+ | === Проверка по четност === | ||
+ | Към изпращания символ може да се добави един бит за откриване на грешки възникнали при предаване на сигнала. Възможни са три конфигурации: | ||
+ | *проверка по четност | ||
+ | *проверка по нечетност | ||
+ | *без бит за проверка | ||
+ | |||
+ | === Брой битове === | ||
+ | Възможни са различни конфигурации на за броя битове в един символ. Най-често се използва 8 бита съответсващи на един байт. Използват и 7 бита от които са достатъчни за един ASCII символ. | ||
+ | |||
+ | === Старт/стоп битове=== | ||
+ | След всеки предаден символ линията се поставя в ниско ниво с продължителност от 1, 1.5 или 2 бита. | ||
− | + | За начало на предаване пред всеки символ линията се поставя в високо ниво с продължите от 1 бит. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ===FLOW CONTROL=== | |
+ | При препълване на входните буферите може да се поиска спиране на предаването. Може да се реализира софтуерно и хардуерно. | ||
− | + | При софтуерна реализация (Xon/Xoff) по линията (RD/TD) от приемника се изпращат специални символи, които трябва да известят предаващата страна за спиране или възстановяване на предаването. | |
− | |||
− | + | При хардуерна реализация се ползват линиите RTS/CTS или DTR/DSR. За да има предаване двете линии трябва са да във високо ниво. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | == | + | === Задача: връзка DTE-DTE / Windows-Linux === |
− | |||
− | '' ''' | + | '''Задача'''. Свържете два компютъра един с Linux OS и един Windows OS с кръстосан сериен кабел(null modem) през RS232 порта. Настройте съответно двете програми Minicom и PuTTY да предават и приемат с еднакви параметри. |
− | + | *Тествайте различни настройки за скорости на предаване, проверка по четност и т.н. | |
− | |||
− | + | '' '''Упътване''' '' | |
+ | *За Ubuntu: | ||
+ | **Инсталирайте терминалната програма за комуникация през сериен порт minicom. Използвайте командата | ||
+ | :~$ apt-get install minicom | ||
+ | **След инсталацията може да намерите програмата в Applications -> Accessories. | ||
+ | **направете съответните настройки | ||
+ | *За Windows | ||
+ | **Свалете от Internet програмата Putty | ||
+ | **Стартирайте Putty и направете съответните настроийки''' | ||
+ | **Или ползвайте Hyper Terminal: | ||
+ | START -> Programs -> Accessories -> Communications -> Hyper Terminal | ||
− | + | ==сигнализация== | |
+ | RS232C определя следните нива на сигналите за предаване/приемане | ||
+ | *на логическа 1 от -15V до -3V | ||
+ | *на логическа 0 от +3V до +15V | ||
− | + | Максималното допустимо напрежение на празен ход е +/- 25V. | |
− | + | '''Примерен сигнал''' | |
+ | Подредба на битовете. Първо се изпраща бита с най-малко тегло. (small endian) | ||
− | < | + | Осцилограма на символа "К" от ASCII изпратен с 8 бита, един стопов бит и без контрол по чечност е дадена на фиг. 7. '''К <=> 01001011''' |
− | |||
− | |||
− | + | [[Image:rs232Diagram.png|frame|none|center|фиг7. Осцилограма на главна буква ASCII "K" (0x4b) с 1 старт, 8 данни и 1 стоп битове. LSB/MSB - Least/Most Significant Bit]] | |
− | + | '''Задача:''' Направете времева диаграма на първите две букви на името си, ако имате следната конфигурацията на серийната връзка | |
+ | *8 бита за символ | ||
+ | *проверка по четност/нечетност ако последната цифра на фак. номера ви е четна/нечетна | ||
+ | *2 стоп бита | ||
− | + | '''Задача:''' Да се реализира серийна връзка между две виртуални машини | |
− | + | '''Задача:''' Да се реализира достъп до серийния порт през Интернет с ser2net | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | (Инсталира се ser2net и се конфигурира). Използва се telnet | |
− | + | '''Задача:''' Да се реализира достъ до серийния порт през WEB (s ser2net, PHP и Apache) | |
+ | Достъпва като стандартен сокет. Ползвайте кода по-долу: | ||
+ | <code><pre> | ||
+ | if(isset($_POST['message'])) | ||
{ | { | ||
− | + | $fp =fsockopen("localhost", 2000); | |
− | + | ||
− | + | if( !$fp) { | |
− | + | echo "Error";die(); | |
− | + | } | |
− | + | fread($fp, 128); | |
− | + | fwrite($fp, "$_POST[message]"); | |
− | + | $status = fread($fp, 128); | |
− | + | fclose($fp); | |
− | + | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
+ | ?> | ||
+ | <html><head></head> | ||
+ | <body> | ||
+ | <form name="serial" action="" method="post"> | ||
+ | Message: <input name="message" type="text"><input type="submit" value="Send"> | ||
+ | |||
+ | <?= (isset($status))? $status:'' ?> | ||
+ | </form> | ||
+ | </body> | ||
+ | </html> | ||
</pre></code> | </pre></code> | ||
− | + | <math>x^1</math> | |
− | + | [[Category:Компютърни интерфейси| ]] | |
− | |||
− | |||
− | |||
− | |||
− | [[Category: |
Latest revision as of 09:29, 4 November 2019
Contents
Цел на упражнението
Запознаване със сериен порт
RS-232C
Интерфейсът RS-232 е с повече от половин век история и в момента когато казваме "сериен порт" най-често става дума за RS-232. В сравнение със съвременните мегабитови интерфейси като USB (също сериен интерфейс), RS-232 връзката изглежда бавна и ненужна, но тя e същественa поради няколко причини:
- За разбиране на процеса на комуникация с операционната система. Текстовият интерфейс е в основата на всяка една операционна система, а той e базиран върху концепцията на серийния терминал. Днес хардуерният текстов терминал е заместен с псевдо терминал.
- Все още се ползва, въпреки че е загубила широката си употреба. Серийния интрефейс се среща за връзка с индустриални контролери и комуникационна апаратура.
- USB, Bluetooth, IrDA предлагат средства за емулиране на RS232 серийна връзка
Повечето серийни интерфейси с ниска скорост са някакъв вариант на RS-232C стандарта. Този стандарт определя електрическите характеристики и значението на сигнала по всеки от проводниците, както и разположението на пиновете в традиционния 25 пинов конектор (DB-25p фиг.4).
Пълният стандарт RS-232C (EIA-232-E, ITU-T V.24) реално не се използва, защото определя множество сигнали, които са ненужни при обикновена комуникация. DB-25 конекторите са неудобни и поради големината си. В резултат на това те са заместени от 9 пинов конектор (DB-9, фиг.5), а като удобна алтернатива се ползва и RJ-45.
В таблицата са дадени наименованията на сигналите и разположението им на пиновете. Обикновено се ползват 7 проводника за осъществяване на връзка (DSR и DCD; FG и SG; ползват общ проводник).
Таблица със значенията на пиновете (мъжки куплунг) за различните конектори.
DB-25 | DB-9 | RJ-45 | Име | Значение |
1 | - | - | FD | Frame Ground |
2 | 3 | 6 | TD | Transmitted Data |
3 | 2 | 5 | RD | Received Data |
4 | 7 | 8 | RTS | Request To Send |
5 | 8 | 7 | CTS | Clear To Send |
6 | 6 | 1 | DSR | Data Set Ready |
7 | 5 | 4 | SG | Signal Ground |
8 | 1 | 2 | DCD | Data Carrier Detect |
20 | 4 | 3 | DTR | Data Terminal Ready |
На фигури 4,5 и 6 са дедени разположенията на мъжките пинове, в женския конектор те са разположени огледално.
Свързване
При свързване на две устройства с RS-232 сигналът за предаване (Tx,TD) от едно устройство трябва да се подава на пин за приемане (Rx,RD) на второто устройство. Съществуват два типа конфигурации на серийните устройствата:
- DTE (Data Terminal Equipment) - формално управлява връзката (master) стандартна схема на свързване
- DCE (Data Communications Equipment) - (slave) обърната сигнализация.
Принципно могат да се свързват устройства DTE към DCT, DTE към DTE, DCT към DCT
Примерно:
- компютър (DTE)-rs232-(DCE)modem-FM-modem(DCE)-rs232-(DTE)компютър
- компютър (DTE)-(DTE)компютър.
Всяко едно устройство може да е конфигурирано или като DTE или като DCE, рядко може да поддържа и двата варианта, но не в един и същ момент.
Когато устройствата са еднотипни за връзка между тях трябва да се ползва кръстосан кабел, наречен още null modem кабел. За връзка DТE-DCE се ползва прав кабел. Съществува и трета разновидност на кабели използвана при cisco апаратура наречени "rollover" кабели, при които изводите в единия край са огледално пренаредени в другия.
Конфигурация на Null Modem кабел
DB9-1 пин/проводник | DB9-2 пин/проводник | ||
Receive Data | 2 |
3 |
Transmit Data |
Transmit Data | 3 |
2 |
Receive Data |
Data Terminal Ready | 4 |
6+1 |
Data Set Ready + Carrier Detect |
System Ground | 5 |
5 |
System Ground |
Data Set Ready + Carrier Detect | 6+1 |
4 |
Data Terminal Ready |
Request to Send | 7 |
8 |
Clear to Send |
Clear to Send | 8 |
7 |
Request to Send |
Скорост на предаване
За успешна комуникация скоростта на предаване на едното устройство трябва да е равна на скоростта на приемане на второто устройство. Повечето серийни контролери не поддържат автоматичен избор на скоростта, затова се налага ръчна конфигурация за съгласуване на двете устройства.
Поддържаните скорости зависят от серийния контролер, обикновено са в границите между 50 bit/s 110, 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 bit/s(= 1.8432 MHz / 16)
Възможна е асиметрична връзка (скоростта в двете посоки (Up/Down link) е различна).
Понякога името на параметъра дефиниращ скоростта се нарича baud (J. M. Emile Baudot, - бод - сивола в секунда.)
Проверка по четност
Към изпращания символ може да се добави един бит за откриване на грешки възникнали при предаване на сигнала. Възможни са три конфигурации:
- проверка по четност
- проверка по нечетност
- без бит за проверка
Брой битове
Възможни са различни конфигурации на за броя битове в един символ. Най-често се използва 8 бита съответсващи на един байт. Използват и 7 бита от които са достатъчни за един ASCII символ.
Старт/стоп битове
След всеки предаден символ линията се поставя в ниско ниво с продължителност от 1, 1.5 или 2 бита.
За начало на предаване пред всеки символ линията се поставя в високо ниво с продължите от 1 бит.
FLOW CONTROL
При препълване на входните буферите може да се поиска спиране на предаването. Може да се реализира софтуерно и хардуерно.
При софтуерна реализация (Xon/Xoff) по линията (RD/TD) от приемника се изпращат специални символи, които трябва да известят предаващата страна за спиране или възстановяване на предаването.
При хардуерна реализация се ползват линиите RTS/CTS или DTR/DSR. За да има предаване двете линии трябва са да във високо ниво.
Задача: връзка DTE-DTE / Windows-Linux
Задача. Свържете два компютъра един с Linux OS и един Windows OS с кръстосан сериен кабел(null modem) през RS232 порта. Настройте съответно двете програми Minicom и PuTTY да предават и приемат с еднакви параметри.
- Тествайте различни настройки за скорости на предаване, проверка по четност и т.н.
Упътване
- За Ubuntu:
- Инсталирайте терминалната програма за комуникация през сериен порт minicom. Използвайте командата
:~$ apt-get install minicom
- След инсталацията може да намерите програмата в Applications -> Accessories.
- направете съответните настройки
- За Windows
- Свалете от Internet програмата Putty
- Стартирайте Putty и направете съответните настроийки
- Или ползвайте Hyper Terminal:
START -> Programs -> Accessories -> Communications -> Hyper Terminal
сигнализация
RS232C определя следните нива на сигналите за предаване/приемане
- на логическа 1 от -15V до -3V
- на логическа 0 от +3V до +15V
Максималното допустимо напрежение на празен ход е +/- 25V.
Примерен сигнал Подредба на битовете. Първо се изпраща бита с най-малко тегло. (small endian)
Осцилограма на символа "К" от ASCII изпратен с 8 бита, един стопов бит и без контрол по чечност е дадена на фиг. 7. К <=> 01001011
Задача: Направете времева диаграма на първите две букви на името си, ако имате следната конфигурацията на серийната връзка
- 8 бита за символ
- проверка по четност/нечетност ако последната цифра на фак. номера ви е четна/нечетна
- 2 стоп бита
Задача: Да се реализира серийна връзка между две виртуални машини
Задача: Да се реализира достъп до серийния порт през Интернет с ser2net
(Инсталира се ser2net и се конфигурира). Използва се telnet
Задача: Да се реализира достъ до серийния порт през WEB (s ser2net, PHP и Apache) Достъпва като стандартен сокет. Ползвайте кода по-долу:
if(isset($_POST['message']))
{
$fp =fsockopen("localhost", 2000);
if( !$fp) {
echo "Error";die();
}
fread($fp, 128);
fwrite($fp, "$_POST[message]");
$status = fread($fp, 128);
fclose($fp);
}
?>
<html><head></head>
<body>
<form name="serial" action="" method="post">
Message: <input name="message" type="text"><input type="submit" value="Send">
<?= (isset($status))? $status:'' ?>
</form>
</body>
</html>