About COM port...
У Ком порта 8 сигнальных линий, при этом для приёма-передачи используются только две. Подскажите, если реализовывать хост COM на МК, то какие линии нужно делать? (кроме, понятно, RX и TX) Этот COM предназначен для работы с модемом, у которого отключено управление потоком.
- Реклама
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Если оторвать все выводы, кроме RX TX и GND модем перестаёт работать. Так что тут что-то ещё нужно...
На модеме есть индикаторы? Если да, то в каком они состоянии, когда пытаетесь передавать данные?
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
J. Ganssle
Нет, индикаторов, кроме наличия питания, нет.
- Реклама
Попробуйте на 9-контактном разъеме со стороны модема закоротить между собой линии CTS и RTS (выводы 7 и 8 ), а также DTR и DSR (выводы 4 и 6).
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
J. Ganssle
Goldsmith, благодарю, помогло. Не думал, что так всё просто решится парой перемычек...
Ещё такой вопрос: на какую линию порта и что должен подать хост, чтоб "попросить" модем подождать с передачей данных? (при этом данные не должны потеряться)
Ещё такой вопрос: на какую линию порта и что должен подать хост, чтоб "попросить" модем подождать с передачей данных? (при этом данные не должны потеряться)
Погодите, не все сразу. То, что перемычки помогли, означает только одно: вот этоAI_Disable писал(а):Goldsmith, благодарю, помогло. Не думал, что так всё просто решится парой перемычек...![]()
Ещё такой вопрос: на какую линию порта и что должен подать хост, чтоб "попросить" модем подождать с передачей данных? (при этом данные не должны потеряться)
- неправда. На самом деле факт, что без перемычек модем отказывается работать, указывает на то, что управление потоком на модеме не выключено. Перемычками мы как раз имитировали постоянную готовность оконечного оборудования данных.AI_Disable писал(а):Этот COM предназначен для работы с модемом, у которого отключено управление потоком.
Почему вы решили, что управление потоком отключено, или каким образом пытались его отключить (и зачем)?
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
J. Ganssle
Я решил, что управления потоком нет, т.к., в настройках ком порта, на компьютере, указывал "Управление потоком: Нет" и модем нормально работал.
Ну а теперь по поводу:
Аппаратное управление осуществляется сигналами на разъеме RS-232. Они включают (выводы указаны для разъема 9 pin, вход/выход по отношению к терминальному оборудованию):
7 RTS (Request to Send) выход - терминал готов к передаче данных. Если модем полудуплексный, переключение модема на передачу может занять некоторое время.
8 CTS (Clear to Send) вход - модем готов к передаче данных. Если этого сигнала нет, не пытайтесь передавать данные - они просто потеряются.
4 DTR (Data Terminal Ready) выход - готовность терминального оборудования. Терминал сообщает модему, что он готов к обмену данными.
6 DSR (Data Set Ready) вход - готовность модема. Модем сообщает терминалу, что питание включено, оборудование в норме.
1 DCD (Data Carrier Detect) вход - модем обнаружил несущую от другого модема, т.е. успешно законнектился с другой стороной.
А теперь - по протоколу управления потоком.
Если терминал передает данные слишком быстро, модем снимает сигнал CTS. В этом случае терминал должен немедленно прекратить передачу до тех пор, пока CTS снова не установится, иначе передаваемые данные потеряются. Это возможно, если скорость порта выше, чем скорость передачи (например, потр настроен на 115200, а модемы саоннектились на 33600).
Если терминал не успевает принимать данные от модема, он снимает готовность DTR. Модем перестает отправлять принятые с линии данные и копит во внутреннем буфере. Злоупотреблять им не следует, поскольку с другой стороны модем ничего не знает и продолжает слать данные, а буфер не резиновый и рано или поздно переполнится. Использовать только в крайних случаях и кратковременно.
Без сигнала DTR не будет никакого обмена с модемом, а без RTS не будет передачи данных.
Данные принимать только при наличии DTD.
Не слишком сложно объяснил? Понятно, почему пришлось коротить DTR-DSR и RTS-CTS?
Чтобы данные при обмене не терялись, необходимо использовать то самое управление потоком. Управление потоком бывает аппаратным и программным.AI_Disable писал(а):Ещё такой вопрос: на какую линию порта и что должен подать хост, чтоб "попросить" модем подождать с передачей данных? (при этом данные не должны потеряться)
Аппаратное управление осуществляется сигналами на разъеме RS-232. Они включают (выводы указаны для разъема 9 pin, вход/выход по отношению к терминальному оборудованию):
7 RTS (Request to Send) выход - терминал готов к передаче данных. Если модем полудуплексный, переключение модема на передачу может занять некоторое время.
8 CTS (Clear to Send) вход - модем готов к передаче данных. Если этого сигнала нет, не пытайтесь передавать данные - они просто потеряются.
4 DTR (Data Terminal Ready) выход - готовность терминального оборудования. Терминал сообщает модему, что он готов к обмену данными.
6 DSR (Data Set Ready) вход - готовность модема. Модем сообщает терминалу, что питание включено, оборудование в норме.
1 DCD (Data Carrier Detect) вход - модем обнаружил несущую от другого модема, т.е. успешно законнектился с другой стороной.
А теперь - по протоколу управления потоком.
Если терминал передает данные слишком быстро, модем снимает сигнал CTS. В этом случае терминал должен немедленно прекратить передачу до тех пор, пока CTS снова не установится, иначе передаваемые данные потеряются. Это возможно, если скорость порта выше, чем скорость передачи (например, потр настроен на 115200, а модемы саоннектились на 33600).
Если терминал не успевает принимать данные от модема, он снимает готовность DTR. Модем перестает отправлять принятые с линии данные и копит во внутреннем буфере. Злоупотреблять им не следует, поскольку с другой стороны модем ничего не знает и продолжает слать данные, а буфер не резиновый и рано или поздно переполнится. Использовать только в крайних случаях и кратковременно.
Без сигнала DTR не будет никакого обмена с модемом, а без RTS не будет передачи данных.
Данные принимать только при наличии DTD.
Не слишком сложно объяснил? Понятно, почему пришлось коротить DTR-DSR и RTS-CTS?
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
J. Ganssle
Понятно. Дело в том, что модем и терминал ничего друг о друге не знают, и вы просто отключили управление потоком со стороны компьютера, т.е. сигналы на стороне компьютера постоянно залипли в состоянии готовности и не проверяется готовность модема. Вообще говоря, это чревато потерями данных при интенсивном обмене.AI_Disable писал(а):Я решил, что управления потоком нет, т.к., в настройках ком порта, на компьютере, указывал "Управление потоком: Нет" и модем нормально работал.
Модем по-прежнему ждет этих сигналов. Отключить их можно только на самом модеме. Как - зависит от модема. На некоторых есть перемычки или микрики, на некоторых - диалоговое меню настройки. Я потому и переспросил, что не все знают, как это делается.
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
J. Ganssle
Кстати, пообещал, но забыл сказать о программном протоколе управления потоком, он же протокол Xon/Xoff.
В этом случае аппаратные сигналы не используются. Если модем не успевает принимать данные от терминала, он передает ему специальный символ Xoff (прекратить передачу). В ответ терминал должен немедленно прекратить передачу и ждать от модема символа Xon (продолжить передачу). Тогда обмен возобновляется.
То же самое и со стороны терминала: когда терминал не успевает принимать данные, он приостанавливает поток посылкой Xoff в сторону модема, а затем возобновляет посылкой Xon.
Само собой, это накладывает ограничения. Поток данных становится непрозрачным, т.к. в нем не должны случайно встретиться символы Xon и Xoff. Для простых текстовых терминалов это не страшно, а в двоичных данных они могут встретиться.
Символ Xon (DC1) соответствует <Ctrl>+Q (0x11), символ Xoff - <Ctrl>+S (0x13).
В этом случае аппаратные сигналы не используются. Если модем не успевает принимать данные от терминала, он передает ему специальный символ Xoff (прекратить передачу). В ответ терминал должен немедленно прекратить передачу и ждать от модема символа Xon (продолжить передачу). Тогда обмен возобновляется.
То же самое и со стороны терминала: когда терминал не успевает принимать данные, он приостанавливает поток посылкой Xoff в сторону модема, а затем возобновляет посылкой Xon.
Само собой, это накладывает ограничения. Поток данных становится непрозрачным, т.к. в нем не должны случайно встретиться символы Xon и Xoff. Для простых текстовых терминалов это не страшно, а в двоичных данных они могут встретиться.
Символ Xon (DC1) соответствует <Ctrl>+Q (0x11), символ Xoff - <Ctrl>+S (0x13).
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
J. Ganssle
Goldsmith, ещё раз, спасибо.
Теперь всё кажется более понятным. Уже помучил денёк модем, команды всегда доходят корректно, несмотря на то, что я не обращаю внимания на сигналы о готовности модема к приёму. Так что, думаю, даже в законченном варианте просто обойтись перемычками 
Ну это как повезет. На небольших потоках данных, скорее всего, прокатит, на больших может и не повезти. Но во всяком случае теперь будете знать, что делать, если данные вдруг начнут теряться.AI_Disable писал(а):Так что, думаю, даже в законченном варианте просто обойтись перемычками
Имейте в виду еще еще такую тонкость: скорость обмена между модемом и терминалом может не совпадать со скоростью обмена между модемами. Например, можно настроить СОМ-порт на 115200, а модемы соединятся на 33600. Понятное дело, что модем может захлебнуться при передаче. А если еще и канал с помехами, то все еще хуже.
Возможно и наоборот: если модем реализует протокол сжатия данных V.42bis, то реальная скорость приема данных будет гораздо выше, чем скорость соединения. Тут уже есть риск захлебнуться терминалу.
Так что я бы очень рекомендовал последить за состоянием сигналов управления потоком. Например, навесьте на них триггеры-ловушки или одновибраторы с сигнальными лампочками и понаблюдайте за их поведением в работе. Если они молчат, значит, простой вариант сработал. Ну а если начнут мигать, придется реализовывать полное управление потоком, деваться некуда. Все равно это гораздо проще, чем городить протокол гарантированной доставки данных.
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
J. Ganssle


