Давайте вместе разберёмся, как же работает последовательный порт, и соберём самый крутой нуль-модемный кабель.
В стандартом современном последовательном порте 9 пинов. Вот их список:
- Carrier Detect (Обнаружена несущая)
- Receive Data (Принятые данные)
- Transfer Data (Отправленные данные)
- Data Terminal Ready (Терминал готов)
- Ground (Общий ноль)
- Data Set Ready (Сигнал готовности модема)
- Request To Send (Запрос на отправку)
- Clear To Send (Готов отправлять)
- Ring Indicator (Поступил звонок)
Я уже говорил ранее что модемы были изобретены до интернетов и использовались для терминального доступа.
Протокол общения между DTE и DCE называется в данном случае rs-232 и именно к нему относятся вышеуказанные сигналы.
Чтобы лучше понять куда какой сигнал поступает, давайте разделим их на сигналы которые посылает DTE и сигналы которые посылает DCE. Вот смотрю я на эту табличку и думаю какой же я бездарный. Ужасная табличка.
Но ладно. По табличке мы можем понять кто куда и что посылает.
Теперь давайте разберёмся с каждым сигналом кто за что отвечает.
Чтобы не запутаться, давайте пойдём по списку начиная с первого пина.
- Carrier Detect - Модем сообщает компьютеру о том что установлено соединение. Когда модем установит соединение, он подаст этот сигнал.
- Receive Data - Модем по этой линии передаёт на компьютер принятые данные.
- Transfer Data - Компьютер передаёт модему данные.
- Data Terminal Ready - Компьютер сообщает модему о том что готов к работе.
- GROUND - Общий ноль. В rs-232 уровень напряжения +15 вольт соответствует нулю. А -15 воль соответствует единице. А от нуля и считается этот плюс или минус.
- Data Set Ready - Не смотря на название, на самом деле этот сигнал устанавливается модемом когда он готов передавать данные.
- Request To Send - Этот сигнал передаётся от компьютера к модему, и означает что компьютер хочет передать данные.
- Clear to Send - Модем сообщает компьютеру о готовности передавать данные.
- Ring Indicatior - Модем сообщает компьютеру что в линию поступает звонок.
А ответ на самом деле довольно прост, как я уже говорил ранее, модем с последовательным портом - устройство автономное, у него свой процессор, свой внутренний мир, и мы должны отсеивать передающиеся данные в ЛИНИЮ от команд, которые мы передаём МОДЕМУ. Вот именно для того, чтобы разделить какие данные куда уходят и придуманы эти сигналы.
Как это работает:
Когда компьютер посылает модему команды, а не данные, компьютер не даёт сигнал на линию RTS. В таком режиме модем интерпретирует данные как команды себе, и ничего не посылает в линию.
Когда компьютер хочет послать данные не модему а в линию, компьютер даёт сигнал RTS, на что модем должен ответить сигналом DSR. Тогда компьютер может начать передачу.
Надеюсь вы не очень запутались в этих сигналах, потому что сейчас нам предстоит создать самый крутой нуль-модемный кабель, со всем функционалом, включая управление потоком данных.
Попытайтесь представить что нам нужно убрать из схемы оба DCE и оставить только два DTE, но сигналы с них нам нужно запутать так, чтобы каждый из них ничего не заподозрил.
- Земли (5 пин) обоих разъёмов соединяем.
- Начнём с самого простого. Там где один передаёт, второй должен принимать. Поэтому пины 2 и 3 мы перекрещиваем.
Пин 3 с первого разъёма должен приходить на пин 2 на втором разъёме и наоборот. - Теперь задачка посложнее. Поскольку у нас больше нет DCE, нам больше не нужно посылать на него команды. Мы теперь посылаем данные только в линию. И кстати, линия теперь у нас всегда доступна. Поэтому на каждом терминале теперь должны быть активны пины 1 (обнаружена несущая) и 6 (модем готов к передаче). А устанавливать на них высокий уровень будет у нас 4 пин, который сообщает о готовности компьютера. Иными словами, мы с 4 пина первого разьёма, должны подать сигнал на пины 1 и 6 второго разъёма и наоборот.
- И наконец последнее - управление потоком данных. У нас остались два сигнала RTS и CTS. Один из них отправляется компьютером, второй принимается компьютером. RTS говорит что хочет передать данные, CTS подтверждает что готов передавать данные.
То есть пин 7 первого разъёма, должен приходить на пин 8 второго разъёма, и наоборот.
Очевидно нам нужен кабель, желательно мягкий и не очень толстый, минимум с 7 жилами. И два разъёма типа "мама". Между 1 и 6 пином я кинул перемычку, мой кабель оказался с экраном, поэтому экран я припаял на корпус разъёма предварительно надев термоусадку, чтобы в случае чего он мне ничего не замкнул. После чего я надел на кабель две стяжечки, но не очень сильно их затянул. Они будут служить нам ограничителем, когда я надел корпус на разъём, эти стяжечки сдвинулись куда нужно, и осталось только их зятянуть посильнее и мазнуть всё термоклеем. И вуаля, у нас готов самый крутой в мире нуль модемный кабель. Теперь можно испытать его в играх дум и дюк нюкем.
DOOM: Duke Nukem: