Страница 117 из 124
В этой истории с последовательным интерфейсом имеется два источника неприятностей: (а) Определены два типа устройств, причем входные контакты устройств одного типа соответствуют выходным контактам другого; вам может понадобиться связать между собой два устройства одного типа или два взаимно дополняющих устройства; (б) Имеется пять сигналов квитирования; одни устройства генерируют эти сигналы и ожидают их приема, другие же игнорируют соответствующие входы (и ничего не подают на выходы). Чтобы все у вас работало, в этих деталях придется разобраться. Приступим.
Интерфейс RS-232 был разработан для связи DTE (Data Terminal Equipment — оконечное оборудование данных, ООД) с DCE (Data Communication Equipment — аппаратура передачи данных, АПД). Терминал всегда выглядит, как DTE, а модем всегда выглядит, как DCE; однако другие устройства, включая микрокомпьютеры, могут быть и тем, и другим. Компьютер IBM PC выглядит как DTE и укомплектован вилочной частью разъема, но большинство больших компьютеров имеют выход типа DCE. Подключая DTE к DCE, вы просто соединяете одноименные контакты разъемов DB-25 (которые могут быть как вилочными, так и розеточными!), и, если вам повезет, все будет работать. Мы говорим «если повезет», потому что результат все еще зависит от того, какие квитирующие сигналы одно устройство ожидает от второго, и устанавливает само. (Само собой разумеется, что решив проблему с кабелем, вы еще должны выбрать скорость передачи, четность и некоторые другие программные параметры!) С другой стороны, связывая два одинаковых устройства, вы не можете соединить одноименные контакты, потому что тем самым вы соедините вместе два выхода: DTE передает через контакт 2 и принимает через контакт 3, a DCE делает как раз наоборот. Поэтому такую пару устройств следует соединять кабелем (так называемым «нуль-модемом»), в котором контакты 2 и 3 соединяются друг с другом крест-накрест. К сожалению, это еще не все
В табл. 10.4 показаны все основные линии. TD и RD - это линии передачи и приема данных; RTS и CTS — запроса передачи и готовности передачи; DTR, DSR и DCD — «оконечное оборудование данных готово», «аппаратура передачи данных готова» и «детектор принимаемого линейного сигнала». В разъеме имеются две земли: защитное заземление (или корпус, контакт 1) и сигнальное заземление (контакт 7); в большинстве машин их просто соединяют вместе. Пять сигналов, не относящихся к данным, являются управляющими сигналами квитирования. Устройство DTE устанавливает RTS и DTR, когда оно готово к передаче, а устройство DCE устанавливает CTS и DSR, когда оно готово к приему. Некоторые устройства DTE требуют, чтобы до выполнения ими любых действий был установлен их вход DCD. На всех сигнальных линиях действуют биполярные уровни RS-232, причем установленные данные (TD, RD) имеют отрицательную полярность, а установленные управляющие сигналы (RTS, CTS, DSR, DTR, DCD) — положительную.
Заметьте, что названия сигналов имеют смысл только если их рассматривать со стороны DTE. Например, контакт 2 называется TD (Transmitted Data-передаваемые данные) на обеих сторонах, несмотря на то, что DTE устанавливает данные, a DCE принимает их. Поэтому название контакта не говорит вам однозначно, вход это или выход - вам еще надо знать, рассматривает ли себя устройство, как DTE или DCE (вы можете обойти это затруднение с помощью вольтметра!).
Если бы все устройства RS-232 устанавливали все сигналы, требующие установки, и анализировали состояние всех сигналов, требующих анализа, то всегда можно было бы просто соединить соответствующие контакты (для пары DTE-DCE) или соединить соответствующие контакты крест-накрест (для пар DCE-DCE или DTE-DTE). Если, однако, вы к устройству, игнорирующему все линии квитирования, подключите устройство, реализующее полный протокол квитирования, ничего хорошего из этого не получится. Разрабатывая стратегию своих действий, вы должны опираться на реальность; иногда для этого требуется некоторая хитрость. На рис. 10.17 показаны схемы кабелей, обеспечивающих правильные соединения для всех (ну, скажем, почти всех) ситуаций.
Рис. 10.17. Кабели RS-232, обеспечивающие правильные соединения. Указанные номера контактов соответствуют 25-контактным разъемам DB-25; разводка альтернативного 9-контактного разъема приведена на схеме д.
На схеме а показаны соединения для пары устройств DTE—DCE, когда оба устройства используют полный протокол квитирования. Одна пара квитирующих сигналов представлена линиями RTS/CTS, другая - линиями DTR/DSR. На схеме в показан кабель «нуль-модема» с перекрещенными входами и выходами для пары DTE-DTE. Тот же кабель годится и для пары DCE-DCE, только надо изменить направление стрелок на рисунке и опустить соединение контакта 8. Если, однако, одно устройство реализует протокол квитирования, а другое - нет, кабели а и в не годятся. В этом случае самое простое — распаять кабель таким образом, чтобы устройство само отвечало на свои же сигналы квитирования и разрешало самому себе переход к следующим операциям. Такое соединение показано на схеме б для пары DTE-DCE и на схеме г для пары DTE-DTE (или пары DCE-DCE, но тогда следует опустить соединение контакта 8). Как сделаться гением RS-232. Если вы распаяете эти четыре кабеля с розеткой и вилкой на каждом конце, вы сможете заставить что угодно работать с чем угодно (почти). Ваши коллеги признают в вас гения. Правда, только в том случае, если им в руки не попадется действительно профессиональная штучка — «индикаторная коробка для RS-232». Она оснащена световыми индикаторами на ЭЛД для каждой линии интерфейса, что позволяет наблюдать, какое устройство какие сигналы устанавливает, и имеет набор перемычек для соединения контактов разъемов в любом порядке. Использовать индикаторную коробку надо следующим образом. Прежде всего, наблюдая световые индикаторы, соедините правильно TD и RD, затем по состоянию индикаторов определите, какое устройство посылает сигналы квитирования. Если устройство устанавливает RTS, оно, скорее всего, ожидает ответной установки CTS. Если это делают оба устройства, соедините их друг с другом; в противном случае замкните RTS на CTS того же устройства. То же самое проделайте с сигналами DTR и DSR. Если в устройстве используется только одна пара квитирующих сигналов, то это, скорее всего, DTR/DSR. Вообще пара DTR/DSR используется для оповещения о том, что устройство на противоположной стороне подсоединено и включено, в то время как пара RTS/CTS запускает и останавливает передачу.
Если скупость не позволяет вам приобрести индикаторную коробку, можете проанализировать состояние линий с помощью вольтметра: любая линия, находящаяся под большим (> 4 В) отрицательным или положительным напряжением, несет установленный сигнал; если напряжение на линии около нуля, сигнал сброшен.
Программное квитирование. Некоторые устройства используют аппаратные сигналы квитирования RTS/CTS для индикации начала и конца передачи данных, в то время как более медленные устройства (например принтер) просто держат их установленными. Другие осуществляют программное квитирование: CTRL-S (для остановки) и CTRL-Q (для возобновления). Если вам повезет, у вас будет возможность выбора. Программный метод позволяет упростить кабель, и если устройства полностью игнорируют сигналы аппаратного квитирования, в кабеле будут лишь провода, подключенные к контактам 1, 2, 3 и 7 (вам только надо выяснить, соединять ли контакты 2 и 3 прямо или крест-накрест). Однако, даже если устройство использует CTRL-S и CTRL-Q для управления передачей, оно может требовать подключения линий аппаратного квитирования для установления связи. В этом случае вам понадобится одна из схем соединений, приведенных на рис. 10.17, б и г. Не забудьте только включить питание на обеих сторонах линий связи, так как ни одно из соединенных устройств не имеет никакой возможности определить, включено ли другое и вообще существует ли оно!