У стандартного модемного интерфейса (rs232) кроме линий RxD и TxD есть еще куча разных, их называют “сигналами квитирования”. Я всегда путался в них — во всех этих RTS’ах, CTS’ах и прочих DSR’ах. В этой статье, я попробую систематизировать и кратко описать эти сигналы.
Итак, первое что стоит знать – интерфейс rs232 соединяет два типа устройств
DTE (Data Terminal Equipment) – это обычно компьютер или заменяющее его устройство. Для простоты, дальше я DTE буду называть компьютер. На компьютер устанавливается разъем типа “папа”
DCE (Data Circuit-terminating Equipment) – это обычно модем, или его заменяющее оборудование. Для простоты я буду называть DCE модемом. На DCE устанавливается разъем типа “мама”
Сигналы я буду описывать на примере 9-контактного разъема, так как он самый распространенный. Взглянем на него.
Как видно, контакты на разъемах перевернуты. Таким образом, прямой провод соединит контакты с одинаковыми номерами, тоесть, к примеру, контакту 2 на “папе” будет соответствовать контакт 2 на “маме”.
А вот и сводная табличка сигналов. Под названием вывода – номер его штырька в 9-контактном разъеме.
Сигналы, которыми управляет компьютер | Сигналы, которыми управляет модем |
Передача данных компьютером, прием модемом | TxD 3 | ||
RxD 2 | Передача данных модемом, прием компьютером | ||
Компьютер готов передавать данные, либо компьютер разрешает модему передавать данные | RTS 7 | ||
CTS 8 | Модем разрешает компьютеру передавать данные | ||
DSR 6 | Готовность модема к работе. | ||
Готовность компьютера к работе. | DTR 4 | ||
RI 9 | Индикатор звонка | ||
DCD 1 | Индикатор наличия несущей. Устанавливается после соединения. | ||
Земля | SG 5 | SG 5 | Земля |
Ну, и немного подробнее опишем каждый сигнал.
Я буду рассматривать сигналы обычных логических уровней – так, как они выглядят на выходах или входах микроконтроллера.
Сигналы в кабеле (после преобразователя уровня, к примеру max232) перевернуты и уровни сдвинуты. Так, логической 1 на выходе контроллера соответствуют уровни напряжения от –3 до –15 вольт, а логическому нулю – +3…+15 вольт.
Сразу скажу, что откуда в сокращении буква “x” – я не знаю.
По этой линии происходит передача данных от компьютера к модему. По умолчанию на ней — высокий уровень. Прием байта начинается по стартовому биту (а точнее, по переходу линии из высокого состояния в низкое). Стартовый бит всегда является логическим нулем.
Далее, передаются данные. Обычно это 8 бит, хотя бывает и по другому. Данные передаются младшим битом вперед и в прямой логике (нулю на ножке контроллера соответствует принятый нулевой бит).
После этого идет не обязательный бит четности (на картинке его нет). Бит четности дополняет количество единиц до четного (even) или нечетного (odd). К примеру, если в байте было 3 единицы и четность установлена как “even”, то бит четности будет равен 1, чтобы дополнить количество единиц до четырех – четного числа. Четность служит для проверки правильности передачи байта.
После бита четности идет один, один с половиной или два стоп-бита. Стоп бит используется, чтобы правильно отработался старт-бит (чтобы между байтами всегда был перепад из высокого уровня в низкий). Это бит всегда установлен в логическую 1.
К примеру, передача 0xEE будет выглядеть на линии UART’а так:
Параметры последовательного порта обычно пишут так – “9600, 8N1”. 9600 – это скорость передачи бит/с, 8 – количество бит данных в посылке, N – бит четности не используется (может быть E или O, если используется), 1 – один стоп бит.
Заметьте, что количество передаваемых байт в секунду зависит не только от скорости передачи, но и от формата байта. К примеру, один байт в формате 8N1 занимает 10 бит (стартовый + 8 бит данных + стоповый), а в формате 8E1 уже 11бит – добавляется бит четности. Соответственно, байтовая скорость при битовой 9600бод станет 960байт/с в первом случае и 872.7байт/с во втором.
Тоже самое, что и TxD, только хозяин этой линии – модем.
Рассмотрим такую ситуацию – компьютер отправляет модему большое количество данных на скорости 38400 бод, а модем подключен к другому модему на скорости 9600 бод.
Буфер внутри модема быстро заполняется, и, для того, чтобы он не переполнился, модем должен сообщить компьютеру “прекрати передачу!”. Для этого и служит линия CTS.
Активный уровень CTS – низкий. Тоесть, модем разрешает передачу данных, когда на ножке контроллера 0.
Пример из руководства по LPC17xx.
Как видно, компьютер передавал данные, пока на ножке был ноль. Когда появился высокий уровень, компьютер закончил передавать текущий байт и остановился.
Вот с этой ножкой неразбериха. Проблема в том, что на месте этой ножки по стандарту могут быть два сигнала – RTS (номер цепи по стандарту — 105) и RTR (номер 133).
RTS (Ready To Send) – компьютер сигнализирует модему о том, что он сейчас будет передавать данные. Модем должен приготовиться и активировать CTS, после чего компьютер начинает передавать данные.
RTR (Ready To Receive) – компьютер сообщает модему о том, что он готов принимать данные. Это – аналог CTS, только со стороны компьютера.
Сейчас основная часть оборудования использует RTS как RTR! И даже аппаратное квитирование у LPC17xx, LPC2xxx, AT91SAM7 реализует именно механизм RTR.
Активный уровень как и у CTS – низкий.
Рассмотрим механизм подробнее на примере из руководства по LPC17xx
Сначала — сигнал RTS – низкий, принимаются байты.
Как только буфер приемника заполнился N символами, RTS переходит в высокое состояние, что запрещает модему передавать данные. Но, как видно, модем не успел среагировать на RTS и передал еще один байт, поэтому очень важно оставлять в буфере запас для как минимум одного байта.
Далее, байты читаются, и, когда их количество в буфере становится равным M, RTS возвращается в низкое состояние (разрешает модему передавать данные).
Подробнее про RTS/CTS — https://en.wikipedia.org/wiki/RS-232_RTS/CTS#RTS.2FCTS_handshaking
Сигнал от компьютера к модему, обозначающий, что компьютер включен и котов к работе с модемом. Активное состояние, как обычно, низкое. Тоесть, если на ножке контроллера 0, то модем должен подготовиться к подключению к линии. Если-же компьютер выставит на этой ножке логическую 1, то модем обязан отключиться от линии (положить трубку, к примеру)
DTR также часто использовался как источник питания для внешнего малопотребляющего оборудования (к примеру, для мышки).
Подробнее: https://en.wikipedia.org/wiki/Data_Terminal_Ready
Сигнал от модема к компьютеру. Говорит о том, что модем включен, проинициализирован, и готов к общению с компьютером. До тех пор, пока этот сигнал не активен нет смысла передавать что-либо в модем. Модем готов, когда на ножке контроллера логический 0.
Сигнал от модема к компьютеру. Как не сложно догадаться, этот сигнал дергается, когда на модем звонят. Скорость переключения сигнала – маленькая, порядка секунд, сигнал довольно точно повторяет огибающую звонка (огибающую того, что вы слышите, когда звонит аналоговый телефон).
На практике, этот сигнал используется редко. Обычно программа просто ждет сообщения “RING” от модема.
Логический 0 на ножке контроллера значит, что идет вызов.
подробнее: https://en.wikipedia.org/wiki/Ring_Indicator
Сигнал от модема к компьютеру. Сообщает компьютеру о том, что модем подключен к удаленному модему. Эта ножка – очень важна, так как дает возможность определить спонтанные отключения.
Логический 0 означает, что связь между модемами активна.
подробнее: https://en.wikipedia.org/wiki/Data_Carrier_Detect
Теперь про кабель. Стандарт определяет максимальную емкость кабеля как 2.5нФ. Это, примерно, 25метров.
Однако, на практике, это ограничение игнорируют, так как целостность сигнала определяется не только емкостью но и скоростью. Вот максимальные длинны, используемые на практике для низких скоростей.
Скорость (бод) | Длинна экранированного кабеля, метры | Длинна неэкранированного кабеля, метры |
110 | 1500 | 300 |
300 | 1200 | 300 |
1200 | 900 | 150 |
2400 | 600 | 150 |
4800 | 150 | 75 |
9600 | 75 | 30 |
Если у вас остались какие-то вопросы, то лучше обратиться непосредственно к стандарту. как оказалось, найти его довольно сложно, поэтому выкладываю еще и у себя.
Новый! Скачать Юнионпедия на вашем Android™ устройстве!
Скачать
Более быстрый доступ, чем браузер!
Все страницы · Предыдущая (Rozenbergs) · Следующий (Rudolf Mayer)
Из:
RTS1 | RTS2 | RTSH |
RTSI | RTSJ | RTSP |
RTT | RTTI | RTU |
RTV (телеканал, Словакия) | RTV SLO | RTV Slovenija |
RTVE | RTVI | RTVi |
RTVideo | RTVS | RTVSLO |
RTW 1 | RTW 2 | RTX |
RTZ | RTZ1 | RTZ10 |
RTZ11 | RTZ2 | RTZ3 |
RTZ4 | RTZ5 | RTZ6 |
RTZ7 | RTZ8 | RTZ9 |
RTД | Ru | RU |
RU Cancri | RU Center | RU Cnc |
RU Music | RU TV | RU Рака |
RU-27 | Ru-Board | Ru-board |
Ru-board. com | Ru-Center | RU-CENTER |
RU-COM | Ru.Board | Ru.board |
RU.FM | RU.FM (радио) | RU.TV |
Ru.wikipedia.org | RU3AX | RuArts |
Ruíz | RUB | Rubacer |
Rubato | Rubén Amorín | Rubén Ayala |
Rubén Baraja | Rubén Bentancourt | Rubén Blades Bellido de Luna |
Rubén Blanco | Rubén Botta | Rubén Castro |
Rubén da Silva | Rubén Da Silva | Rubén de la Red |
Rubén Galván | Rubén García Santos | Rubén González |
Rubén González Rocha | Rubén Héctor Sosa | Rubén José Suñé |
Rubén Marcelo Gómez | Rubén Marino Navarro | Rubén Miño |
Rubén Morán | Rubén Olivera da Rosa | Rubén Omar Romano |
Rubén Omar Romano Cachía | Rubén Oscar Glaría | Rubén Oscar Glaria |
Rubén Oscar Pagnanini | Rubén Oswaldo Díaz | Rubén Pagnanini |
Rubén Pardo | Rubén Paz | Rubén Pérez del Mármol |
Rubén Plaza Molina | Rubén Rochina | Rubber Soul |
Rubber Soul (band) | Rubber Soul (группа) | Rubbernecking |
Rube Lautenschlager | Rubel | Rubella Ballet |
Rubem Fonseca | Rubempré | Ruben Gunawan |
Ruben Loftus-Cheek | Ruben Yttergård Jenssen | Ruben Zadkovich |
Rubens Barrichello | Rubens de Falco da Costa | Rubens Fernando Moedim |
Rubens Josué da Costa | Rubens Minelli | Rubens Osvaldo Jesús Udaquiola Laport |
Rubens Sambueza | Rubenstein | Rubeola |
Rubeola maritima | Rubeosaurus | Rubettes |
Rubia | Rubia cretacea | Rubia palustris |
Rubia tinctorum | Rubiaceae | Rubicon |
Rubicon Group | Rubicon Race Team | Rubiconia |
Rubidgea | Rubidgea atrox | Rubieae |
Rubik’s 360 | Rubiner | Rubinius |
Rubinoboletus balloui | Rubinoboletus ballouii | Rubinoboletus rubinus |
Rubio Rubin | Rubisco | Rubius |
Rubkow | Rublacklist. net | Ruboard |
RuBoard | Rubroboletus legaliae | Rubroboletus pulcherrimus |
Rubroboletus rhodoxanthus | Rubus | Rubus (subgenus) |
Rubus abruptus | Rubus aestivalis | Rubus aetneus |
Rubus albescens | Rubus appenninus | Rubus arcticus |
Rubus armeniacus | Rubus avellanifolius | Rubus ×loganobaccus |
Rubus baronicus | Rubus bellidiflorus | Rubus bujedanus |
Rubus caesius | Rubus canduliger | Rubus castellanus |
Rubus ceratifolius | Rubus chamaemorus | Rubus chinensis |
Rubus cocullotinus | Rubus comintanus | Rubus commersonii |
Rubus communis | Rubus coronarius | Rubus crispulus |
Rubus cyrenaicae | Rubus debilis | Rubus edouardii |
Rubus ellipticus | Rubus erectus | Rubus ernestibolli |
Rubus exaltatus | Rubus fastigiatus | Rubus franciscanus |
Rubus fructicosus | Rubus fruticosus | Rubus gerundensis |
Rubus glandulosopunctatus | Rubus glaucus | Rubus hawaiensis |
Rubus helleri | Rubus hispanicus | Rubus holmiensis |
Rubus hopingensis | Rubus idaeus | Rubus jamaicensis |
Rubus karstianus | Rubus laciniatus | Rubus legionensis |
Rubus lejeunei | Rubus lindleianus | Rubus longipetiolatus |
Rubus macropetalus | Rubus menziesii | Rubus mingendensis |
Rubus minusculus | Rubus nelliae | Rubus nessensis |
Rubus neveus | Rubus niveus | Rubus oculus-junonis |
Rubus odoratus | Rubus panormitanus | Rubus phoenicolasius |
Rubus plicatus | Rubus polymorphus | Rubus procerus |
Rubus ribifolius | Rubus rosifolius | Rubus rosulentus |
Rubus rusticanus | Rubus saxatilis | Rubus siculus |
Rubus sinusifolius | Rubus sirbenus | Rubus spectabilis |
Rubus spicifolius | Rubus stenopetalus | Rubus subg. Rubus |
Rubus subgen. Anoplobatus | Rubus subgen. Rubus | Rubus tagallus |
Rubus taiwanianus | Rubus teutobergensis | Rubus ulmifolius |
Rubus ursinus | Rubus vadalis | Rubus valentinus |
Rubus vulgaris | Ruby | Ruby Bhatia |
Ruby Blue | Ruby Jerins | Ruby on Rails |
Ruby on rails | Ruby Tuesday | Rubycon |
RubyGems | RubyMine | RUC |
RuCenter | Rucervus duvaucelii | Rucervus eldii |
Rucervus schomburgki | RUCOM | Rud Immanuel Langgaard |
RuDa | Ruda | Rudas gyógyfürdő |
Rudé právo | Rudé Právo | Rudbeckia |
Rudbeckia hirta | Rudbeckia purpurea | Rude |
Rude Awakening | Rude Awakening (DVD) | Rude Boy |
Rude boys | Rude Boys | Rudebox |
Rudel | Rudge | Rudi Assauer |
Rudi Bommer | Rudi Garcia | Rudi Gutendorf |
Rudi Kargus | Rudi Schuricke | Rudi Völler |
Rudi Zygadlo | Rudiger Vogler | Rudimental |
Rudimentary Peni | Rudisiricius | Rudisiricius belli |
Rudnei da Rosa | Rudolf August Wilhelm Bockelmann Louis | Rudolf Brunnenmeier |
Rudolf Caracciola | Rudolf Franz Joseph Bing | Rudolf Gutendorf |
Rudolf Heinrich Greinz | Rudolf Kampf | Rudolf Kämpf |
Rudolf Kämpf Porzellan fabrik GmbH, Grünlas | Rudolf Keller | Rudolf Kirchschläger |
Rudolf Klein-Rogge | Rudolf Kner | Rudolf Leuckart |
Laird настоятельно рекомендует разработчикам использовать RTS/CTS для управления потоком в своих приложениях.
При обращении к CTS/RTS:
Модуль UART CTS является входным модулем
RTS является выходным 3,3 В или выше
Модуль UART CTS является входом и подключен к RTS хоста, который, следовательно, является выходом.
Хост может сообщить модулю, что он готов принимать данные через UART, управляя его выходом RTS, который сигнализирует модулю через вход CTS модуля. Таким образом, модуль не будет отправлять данные, пока не будет подтверждено CTS. По сути, подтвержденный вывод RTS сообщает узлу, что отправка данных узлом безопасна.
Хост может остановить модуль, отправляющий ему данные, установив высокий уровень RTS, который, в свою очередь, установит высокий уровень CTS модуля. Точно так же модуль может остановить отправку данных хостом, приняв высокий уровень RTS, что приведет к высокому уровню CTS хоста.
Рис. 1: Рекомендуемый минимум проводки UART при правильном использовании CTS/RTS (рекомендуется).
Отключение управления потоком
Однако, если приложение требует пропускной способности в эфире, которая ниже, чем пропускная способность настройки UART (скорость передачи, контроль четности и стоповые биты) или риск потенциальной потери данных или сброс модуля принимается разработчиком, тогда входная линия CTS может быть подключена к 0v/Gnd, а выходная линия RTS может быть плавающей, как показано на рисунке 2.
9.0003Рисунок 2: Минимальная проводка UART без правильного использования управления потоком CTS/RTS (не рекомендуется).
Прежде чем отказываться от правильного использования CTS/RTS, обратите внимание на следующее
Проблема №1: модуль не отвечает на команды
Модуль UART_CTS является входом, и не рекомендуется оставлять его плавающим. Если он непреднамеренно окажется на уровне 3,3 В из-за конструкции схемы, модуль будет считать, что хост не готов к приему данных. Хост отправляет ему команду, например «at», но не получает ответа, поскольку модуль определяет, что он не может отправить, потому что хост не готов получать данные от модуля. Это обычная проблема для разработчиков, которые пропускают использование комплекта разработчика и подключаются напрямую к модулю, используя только UART TX, RX и GND.
Решения
1. Правильно используйте управление потоком (настоятельно рекомендуется), см. рис. 1.
2. Привяжите модуль UART CTS к 0 В, чтобы модуль всегда предполагал, что хост готов к приему данных (не рекомендуется) , см. рис. 2.
Проблема № 2: переполнение модуля, вызывающее потерю данных
В отличие от проводного соединения, радиосоединение более подвержено ухудшению качества из-за увеличения радиуса действия и помех. В какой-то момент пропускная способность по воздуху может упасть ниже пропускной способности UART (обратите внимание, что максимальная пропускная способность при отсутствии четности и настроенном одном стоповом бите составляет 80% от скорости передачи), и в этот момент модуль включит свои руки. эфир и сказать: «Подождите, прекратите отправлять данные, чтобы я мог наверстать упущенное». Он делает это, поднимая свой RTS (выход) на высокий уровень. Хост видит, что его CTS (вход) следует его примеру, и прекращает отправку данных. Давайте рассмотрим, что происходит, когда CTS/RTS используется неправильно, а модуль UART_CTS привязан к Gnd или 0V. Когда это происходит, модуль переполняется данными от хоста, вскидывает руки в воздух и говорит «хватит», но модуль UART_RTS никуда не уходит, поэтому хост продолжает отправлять, не обращая внимания на бедственное положение модуля. В какой-то момент может произойти переполнение, что может привести к потере данных или, возможно, даже к сбою модуля.
Решения
1. Используйте надлежащее управление потоком CTS/RTS (настоятельно рекомендуется, см. рис. 1.
2. Смиритесь с тем, что вы можете потерять данные.
Вопрос № 3: А как насчет хоста? также ожидает правильного использования CTS/RTS, у него также могут возникнуть проблемы, когда дело доходит до отправки данных в модуль, поскольку ему может не быть сообщено, что модуль готов принять его данные. 0 В, прежде чем он будет обмениваться данными.Однако перевод хоста CTS в 0 В или привязка хоста CTS к RTS приводит к тем же потенциальным проблемам, которые модуль видит в проблемах выше.0003
Решения
1. Привяжите хост CTS к 0В.
2. Правильно используйте управление потоком CTS/RTS (настоятельно рекомендуется), см. рис. 1.
Дополнительные линии UART
может создать функциональность, используя любой доступный запасной GPIO и используя команды smartBASIC / AT для обеспечения поведения по мере необходимости, пожалуйста, обратитесь к документации по соответствующему модулю для получения дополнительной информации.
Рисунок 3: Полная проводка UART, включая дополнительные функции.
Джим Гейер
13 августа 2002 г.
90 002 Узнайте, как работает дополнительная функция Request to Send/Clear to Send стандарта 802.11, и понять, когда и почему вы должны его использовать.В качестве дополнительной функции стандарт 802.11 включает функцию RTS/CTS (Request to Send/Clear to Send) для управления доступом станции к среде. Как правило, только более дорогие беспроводные локальные сети высокого класса предлагают RTS/CTS в картах радиосетевого интерфейса (NIC) и точках доступа — вы не найдете этого в недорогих продуктах для дома или SOHO. Благодаря правильному использованию RTS/CTS вы можете точно настроить работу вашей беспроводной локальной сети в зависимости от операционной среды.
Если вы включите RTS/CTS на определенной станции, она будет воздерживаться от отправки кадра данных до тех пор, пока станция не завершит подтверждение связи RTS/CTS с другой станцией, например с точкой доступа. Станция инициирует процесс, посылая кадр RTS. Точка доступа получает RTS и отвечает кадром CTS. Станция должна получить кадр CTS перед отправкой кадра данных. CTS также содержит значение времени, которое предупреждает другие станции о воздержании от доступа к среде, пока станция, инициирующая RTS, передает свои данные.
Квитирование RTS/CTS обеспечивает положительный контроль над использованием общей среды. Основной причиной внедрения RTS/CTS является минимизация коллизий между скрытыми станциями. Это происходит, когда пользователи и точки доступа разбросаны по всему объекту, и вы обнаруживаете относительно большое количество повторных передач, происходящих в беспроводной локальной сети.
Представьте, что есть два конечных пользователя 802.11 (станция A и станция B) и одна точка доступа. Станция A и станция B не слышат друг друга из-за высокого затухания (например, из-за большого радиуса действия), но обе они могут обмениваться данными с одной и той же точкой доступа. Из-за этой ситуации Станция А может начать передачу кадра, не заметив, что Станция В в данный момент ведет передачу (или наоборот). Это, скорее всего, вызовет коллизию между станцией A и станцией B в точке доступа. В результате и станции A, и станции B потребуется повторно передать свои соответствующие пакеты, что приведет к увеличению служебной информации и снижению пропускной способности.
Если Станция A или Станция B активируют RTS/CTS, коллизия не произойдет. Перед передачей станция B должна отправить RTS и получить CTS от точки доступа. Значение синхронизации в CTS (которое также получает станция A) заставит станцию A задержаться на время, достаточное для того, чтобы станция B могла передать кадр. Таким образом, использование RTS/CTS уменьшает коллизии и повышает производительность сети при наличии скрытых станций.
Один из лучших способов определить, следует ли вам активировать RTS/CTS, — это отслеживать беспроводную локальную сеть на предмет коллизий. Если вы обнаружите большое количество коллизий, а пользователи находятся относительно далеко друг от друга и, вероятно, вне диапазона, попробуйте включить RTS/CTS на соответствующих пользовательских беспроводных сетевых адаптерах. Вы можете активировать эту функцию, щелкнув «включить RTS/CTS» где-нибудь на экранах настройки пользователя. В этом случае вам не нужно включать RTS/CTS на точке доступа. После получения кадра RTS от сетевой платы радиомодуля пользователя точка доступа всегда будет отвечать кадром CTS.
Конечно, имейте в виду, что мобильность пользователей может изменить результаты. Высокомобильный пользователь может быть скрыт в течение короткого периода времени, например, во время тестирования, а затем большую часть времени находиться ближе к другим станциям. Если конфликты возникают между пользователями, находящимися в пределах досягаемости друг друга, проблема может быть связана с высокой загрузкой сети или, возможно, с радиопомехами.
После активации RTS/CTS проверьте, уменьшилось ли количество коллизий и улучшилась ли результирующая пропускная способность. Поскольку RTS/CTS вносит дополнительные затраты, вы должны отключить его, если обнаружите падение пропускной способности, даже если у вас меньше коллизий. В конце концов, цель состоит в том, чтобы улучшить производительность.
Способ включения RTS/CTS на точках доступа отличается от способа включения сетевых адаптеров. Для точек доступа вы включаете RTS/CTS, устанавливая определенный порог размера пакета (0–2347 байт) в пользовательском интерфейсе настройки.