воскресенье, 8 января 2017 г.

COM порт (RS-232) Асинхронный обмен данными (теория) ч.2

ФИЗИЧЕСКИЙ УРОВЕНЬ 

    Реализация RS-232 на физическом уровне существует в двух вариантах:

9-ти пиновом и
25-ти пиновом разъемах.
    
    В дальнейшем мы будем касаться исключительно 9-ти пинового варианта реализации. Не знаю нужно ли приложить фото с изображением COM порта, на всякий пожарный, ниже фото фрагмента материнской платы. Вдруг кто-то COM порта не видел никогда)))...

9-ти пиновые разъемы COM бывают 2-х видов: 


DB - сокращение от D-subminiature, 9 - количество контактов, F и M в конце аббривеатуры
означают Female и Male ("мама" и "папа" соответственно). 

Ниже рассмотрим что означает и для чего служит каждый пин разъема DB9


И так пробежимся по контактам:

Контакт N5 "GND" - земля. Все сигналы передаются относительно линии N5 GND. Земля в нашем случае не имеет контакта с аналогичной землей ПК и используется исключительно для обеспечения связи.

Контакт №1 "DCD" - Data Carrier Detected (обнаружение носителя данных), Входящий сигнал уведомляющий компьютер об обнаружении другого компьютера или терминала (устройства на другом конце провода). Например компьютер, обнаружил другой компьютер, который хочет инициализировать обмен данными.
Компьютер1 устанавливает сигнал DCD=True, который обнаруживается на аналогичном входе DCD Компьютера 2. И если Компьютер 2 готов к обмену данными, то он на сигнал DCD=True должен выставить сигнал готовности к обмену данными DTR=True (см. контакт №4), после чего можно начинать обмен данными между двумя терминалами.

Контакт №4 "DTR" - Data Terminal Ready (готовность терминала данных), выход которым мы сообщаем на вход DSR (см. контакт №6) конечного устройства о готовности компьютера(терминала) к обмену данными с оконечным устройством.

Контакт №6 "DSR" - Data Set Ready (готовность набора данных к передаче), вход сообщающий, что конечное устройство выполнило все необходимые установки и готово начать передавать и принимать данные.
DSR=True воспринимается компьютером (терминалом) что связь установлена и начать передачу данных по каналу можно в любой момент.

Контакт№7 "RTS" - Request To Send (запрос на передачу), выход стучащийся в CTS
конечного устройства (см. контакт №8), уведомляя о наличии у компьютера данных которые необходимо отправить на конечное устройство по каналу TXD (см. контакт №3).

Контакт №8 "CTS" - Clear To Send (очищен для передачи) вход, который говорит о том, что конечное устройство готово принимать данные от терминала от канала (по каналу) TXD.

Контакт№3 "TXD" - Transmited Data, асинхронный канал для передачи данных на приемный канал RXD - конечного устройства (см. контакт №2).

Контакт №2 "RXD" - Received Data, асинхронный канал для приема данных с линии TXD.
который мы будем при получении обрабатывать (выводить эти данные на экран например, или еще как нибудь).

Контакт №9 "RI" - Ring Indicator (индикатор звонка), вход уведомляющий компьютер (терминал) что с конечного устройство поступает сигнал вызова.
 
  Теперь попробуем в динамике рассмотреть механизм обмена данными между двумя компьютерами. Соединяем нуль модемным кабелем два ПК через COM порты (см. рис ниже)


1)  В момент открытия порта:
   Соединенные между собой через контакты №1 "DCD" - Data Carrier Detected компьютеры ПК1 и ПК2 видят несущую друг от друга, что говорит о том что устройства в сети и можно осуществлять дальнейшее подключение.
     Имея на контактах №1 "DCD" - Data Carrier Detected = True,  порты ПК1 и ПК2 
взводят свои сигналы "DTR" (Контакт №4 "DTR" - Data Terminal Ready) устанавливая их в состоянии TRUE на весь сеанс связи.
    Как видно из рисунка контакты № 4 "DTR" ПК1 соединен с контактом №6 "DSR" ПК2 и наоборот (контакт "DTR" ПК2 соединен с контактом  "DSR" ПК1).
   Таким образом получая информацию на свои входы -"DSR" - (Data Set Ready) о состоянии уровней "DTR" (а у нас DTR обоих компьютеров = TRUE) - друг друга, они понимают что порты открыты, связь установлена и в любой момент можно начать обмен запросами на передачу данных.
 
  Как видно роль контакта №6 "DSR" аналогична контакту №4 "DTR", только в данном случае "DSR" выступает в роли приемной составляющей о готовности портов.

2)  После того как выполнен предыдущий шаг (назовем его инициализацией)
    С контактов №7 "RTS" (Request To Send) компьютеров подаются сигналы друг другу на контакты №8 "CTS" (Clear To Send) сообщая таким образом о своем намерении приступить к обмену данными (прием/передача).
   Далее ПК2 будет считывать в свой буфер через контакт №2 "RXD" (Received Data) то, что ему будет передавать ПК1 с линии №3 "TXD" (Transmited Data) и отправлять необходимые данные на контакт№2 "RXD" (Received Data) ПК1 со своей линии №3 "TXD" (Transmited Data). 

  Как видно на рисунке контакт №8 "СTS" ПК1 связан с контактом №7 "RTS" ПК2 и наоборот (контакт№8 "СTS" ПК2 связан с контактом №7 "RTS" ПК1). Сигналы "СTS" аналогичны сигналам "RTS", только выступают в роли приемной составляющей регистрируя намерение принимать/передавать данные.

3) После реализации предыдущего шага с контакта №3 "TXD" ПК1 на контакт №2 "RXD" ПК2 (в буфер порта ПК2) и наоборот, потекут данные в двоичном виде.
 Обмен данными будет происходить в Асинхронном режиме пакетами по байтно но об этом немного позже...  

    Ну в целом примерно все выглядит как-то так.

  На чем хотелось бы еще заострить внимание? На соединительном кабеле. Если нужна полноценная работа с модемом. Кабель должен иметь распайку как показано на схеме выше. Такой кабель, называется нуль модемным кабелем. Приведенная выше распайка главное отличие кабеля нуль модемного (для обмена данными), от обычного кабеля удлинителя. Важно также знать что COM не любит (горячих) подключений/отключений, особенно если питание их или какого либо из них - автономное. Можно спалить порт. Перед подключением или отключением устройств отключайте питание.

    Также нужно сказать о том, что разъемы СОМ портов на материнских платах всегда "папа" - (DB 9M). Разъемы на концах нуль модемного кабеля всегда "мама"/"мама" (DB 9F/DB 9F). А разъемы на концах обычного удлинителя "папа"/"мама" (DB 9M/DB 9F).

    На практике же, если речь идет не о модеме и прочих телекоммуникациях, а например о связи между двумя компьютерами или компьютером и микроконтроллером, тогда для обмена данными вполне достаточно трех проводного соединения см. рисунок ниже:


    При таком раскладе кабель также будет называться нуль модемным, только без полной распайки и всего по трем проводкам. Такое упрощенное соединение годится и для наших с Вами целей.

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.