Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: CMX869B automodem
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам
Ruslan-maniak
Приветствую, коллеги. Завожу связь между двумя модемами cmx869B. Завёл все нужные мне протоколы в ручном режиме. А вот в автоматическом режиме с QAM модуляцией ни как. Судя по регистру QAM status, всё застопоривается когда модемы начинают договариваться о скорости обмена. Опишу что я наблюдаю на линии и в регистрах.
Есть 2 модема настроенных как Отвечающий (Answer) и Вызывающий (Calling).
1. Включаю отвечающий модем. Он начинает слать в линию тон 2100 Гц являющийся ответным и при этом в его QAM status регистре мы наблюдаем событие о том что он шлёт этот самый тон. Если в этот момент подключить к нему вызывающий модем, то в его QAM status регистре мы увидим что он детектирует этот тон. Вроде бы всё как надо. Однако через несколько секунд после включения, сигнал меняется на 2 сложенных синусоиды частотами примерно 2900 Гц и 610 Гц. И если уже с таким сигналом подключить к вызывающему модему, то ответный тон детектирован им не будет.
2. Далее, не важно с чистым ответным тоном либо с теми 2 синусоидами, в обоих модемах, и в ответном и в вызывающем в QAM status регистре по очереди возникают сообщения: детектирована V.32 преамбула (V.32 preamble detected) и Повторное начало настройки (Emergency retrain started). Оба сообщения относятся к режиму Настройки скорости (Training / Rate negotiation) что я так же вижу в этом регистре.

И второй пункт зацикливается. Что делать не допераю. Может что сделать нужно, но вроде же это автоматический режим. У кого какие комментарии? Может кто что подскажет?
DmitryM
Цитата(Ruslan-maniak @ Mar 11 2014, 10:36) *
2. Далее, не важно с чистым ответным тоном либо с теми 2 синусоидами, в обоих модемах, и в ответном и в вызывающем в QAM status регистре по очереди возникают сообщения: детектирована V.32 преамбула (V.32 preamble detected) и Повторное начало настройки (Emergency retrain started). Оба сообщения относятся к режиму Настройки скорости (Training / Rate negotiation) что я так же вижу в этом регистре.

И второй пункт зацикливается. Что делать не допераю. Может что сделать нужно, но вроде же это автоматический режим. У кого какие комментарии? Может кто что подскажет?


Подробнее осветите QASR->MODE, QASR->SNR. Какие уровни у Вас заданы по приему/передаче в RMR/TMR.
Ruslan-maniak
QAM status register в обоих модемах по очереди принимает следующее значение:
0b0100110000000100 (обнаружена V.32 преамбула, сигнал/шум ещё не определено, режим установления скорости (Training / Rate negotiation))
0b0101010000000100 (аварийно начата новая настройка (Emergency retrain started), сигнал/шум ещё не определено, режим установления скорости (Training / Rate negotiation))

Уровни приёма передачи задавал разные, но картина не менялась. Но если честно я не сильно разбираюсь в этом вопросе, если есть что посоветовать - с удовольствием выслушаю.

На самых низких уровнях иногда отвечающий модем выдаёт, что "carrier lost".
DmitryM
Цитата(Ruslan-maniak @ Mar 12 2014, 03:00) *
QAM status register в обоих модемах по очереди принимает следующее значение:
0b0100110000000100 (обнаружена V.32 преамбула, сигнал/шум ещё не определено, режим установления скорости (Training / Rate negotiation))
0b0101010000000100 (аварийно начата новая настройка (Emergency retrain started), сигнал/шум ещё не определено, режим установления скорости (Training / Rate negotiation))

Уровни приёма передачи задавал разные, но картина не менялась. Но если честно я не сильно разбираюсь в этом вопросе, если есть что посоветовать - с удовольствием выслушаю.

На самых низких уровнях иногда отвечающий модем выдаёт, что "carrier lost".


Используется 2-проводное или 4-проводное подключение?

В моем случае используется 2-проводное, особое внимание настройке дифф-системы, поскольку при высоких уровнях передачи, собственный заворот забивает полезный сигнал.
Инициализация:
TMR => 0xF016; //Start-Stop -10,5 dB V.32b, V.32, V.22b, V.22 QAM AutoModem
RMR => 0xF036; //Start-Stop -10,5 dB V.32b, V.32, V.22b, V.22 QAM AutoModem
QMCR => mode_mdm ? 0x001F : 0x0017;//mode_mdm ? Answer_mode : Calling_mode

может дело в бите F в регистре QMCR, обратите на него внимание. "In V.32 or V.32 bis Automodem modes: If F is set to 1 a faster but less accurate echo cancellation training algorithm is used."

Ну и процедура retrain по таймеру.
Ruslan-maniak
Но я так полагаю что ретрэйн мне пока не интересен? Пока модем хотя бы раз не установил связь. Ведь так?

Вот кстати при уровне -10.5 дБ, и происходит "carrier lost".
DmitryM
Цитата(Ruslan-maniak @ Mar 12 2014, 05:32) *
Но я так полагаю что ретрэйн мне пока не интересен? Пока модем хотя бы раз не установил связь. Ведь так?

Не совсем так, retrain - это принудительно заставить модем возобновить попытку соединения.
Цитата
Вот кстати при уровне -10.5 дБ, и происходит "carrier lost".

У Вас 2-проводное соединение? Смотрите обвязку аналоговой части. На каком расстоянии включены модемы? Если на столе, то -10.5 Дб достаточно чтобы установить соединение что называется "влет" с качеством "Very good; could increase rate or retrain" или "Good".

У себя наблюдаю именно такую картину.
Ruslan-maniak
Да, 2-проводное. Просто он у меня не перестаёт устанавливать связь, по этому я и говорю что пока нужды в ретрэйне нет. Я даже осциллографом вижу на линии как секунд 6 шлётся какая-то информация, затем секунд 5 - пауза и всё по новой. И так без конца. Хорошо, посмотрю аналоговую часть. сейчас у меня, грубо говоря, код выглядит следующим образом:

Код
    SetRegister(0xE0, 0x0180);
  
    SetRegister(0xE0, 0x0100);
  
    SetRegister(0xE1, 0xF016);

    SetRegister(0xE2, 0xF036);

    SetRegister(0xEA, 0x0017); //  SetRegister(0xEA, 0x001F);  - здесь в зависимости от модема (опрашивающий, отвечающий)

while(1)
{
   Qamstatus = GetQamModemStatusRegister();
}

Задержки и проверки в коде не стал отображать.
DmitryM
Цитата(Ruslan-maniak @ Mar 12 2014, 08:08) *
Да, 2-проводное. Просто он у меня не перестаёт устанавливать связь, по этому я и говорю что пока нужды в ретрэйне нет. Я даже осциллографом вижу на линии как секунд 6 шлётся какая-то информация, затем секунд 5 - пауза и всё по новой. И так без конца. Хорошо, посмотрю аналоговую часть. сейчас у меня, грубо говоря, код выглядит следующим образом:


Можно перевести в режим TX single Tone, и измерить уровень в линии, уровень заворота, а также чувствительность приемника, если генерить, например, 2100Hz.
Ruslan-maniak
Хорошо, попробую. То есть вы считаете что проблема в аналоговой линии? Просто Answer тон (2100 Гц) модем распознаёт всегда.
DmitryM
Цитата(Ruslan-maniak @ Mar 12 2014, 10:42) *
Хорошо, попробую. То есть вы считаете что проблема в аналоговой линии? Просто Answer тон (2100 Гц) модем распознаёт всегда.


Я у себя на столе проблем с установлением соединения не наблюдал. Всегда связываются друг с другом и даже со сторонним модемом. А вот когда пытался увеличить уровень сигнала до 0 дБ (и TX и RX), то могли не договориться. Осциллограф показал что сильный заворот в дифсистеме. Вернулся на -10.5. Можете показать как производится преобразование 2<=>4 ?
Ruslan-maniak
Попробую раздобыть схему (там всё сложно). На -10.5 почти всегда на 2ой-3ей попытке настройки скорости происходит carrier lost в отвечающем модеме.
DmitryM
Цитата(Ruslan-maniak @ Mar 13 2014, 03:03) *
Попробую раздобыть схему (там всё сложно).

Да всю не надо, только участок обвязки аналоговой части.
Цитата
На -10.5 почти всегда на 2ой-3ей попытке настройки скорости происходит carrier lost в отвечающем модеме.

Хм. Вот это и смущает.
Ruslan-maniak
Да, действительно проблема была в аналоговой обвязке. Схемотехник в входном фильтре, который прямо перед RXAFB засандалил вместо 100 пФ - 100 нФ. заменили - всё заработало. Огромное спасибо.
А кстати по поводу ретрэйна по таймеру - это просто для профилактики связи? А с какой периодичностью вы совершаете ретрэйн?
И ещё один вопрос: получается модемы сами выбирают максимально возможную скорость при данном качестве связи? Просто у меня за 10 секунд связь скатывается до 4800 Бод - наблюдаю это в QAM status регистре.
DmitryM
Цитата(Ruslan-maniak @ Mar 14 2014, 04:25) *
А кстати, по поводу ретрэйна по таймеру - это просто для профилактики связи? А с какой периодичностью вы совершаете ретрэйн?

Retrain по факту не установления связи (T=120 с или если количество неподтвержденных посылок превысило порог). Если связь есть, никакого retrain. Контроль по потоку данных.
Цитата
И ещё один вопрос: получается модемы сами выбирают максимально возможную скорость при данном качестве связи?

На то он и автомодем.
Цитата
Просто у меня за 10 секунд связь скатывается до 4800 Бод - наблюдаю это в QAM status регистре.

Не наблюдал такого, связь стабильная 14400. Со сторонним модемом, как установилась 9600 (определяется сторонним модемом, в этом режиме он на такой же модем не поднимает выше 9600), так и стоит как вкопанная.
Ruslan-maniak
Вновь хочу поднять эту тему. Появилась цель связать по одной линии несколько этих модемов в автоматическом режиме. Взял три модема. Любые 2 из них прекрасно связываются друг с другом в автоматическом режиме. Однако если к этим 2 подрубить третий на линию. То связь мгновенно рушится и больше не восстанавливается. Связь отслеживаю по статусу автомодема, сам ничего не шлю в линию, в линии только служебное общение автомодемов. Сконфигурированы они так: 1 вызывающий (Calling) и 2 отвечающих (Answer). Кто соединял их таким способом - подскажите что я не так делаю.
DmitryM
Цитата(Ruslan-maniak @ May 8 2014, 12:20) *
Вновь хочу поднять эту тему. Появилась цель связать по одной линии несколько этих модемов в автоматическом режиме. Взял три модема. Любые 2 из них прекрасно связываются друг с другом в автоматическом режиме. Однако если к этим 2 подрубить третий на линию. То связь мгновенно рушится и больше не восстанавливается. Связь отслеживаю по статусу автомодема, сам ничего не шлю в линию, в линии только служебное общение автомодемов. Сконфигурированы они так: 1 вызывающий (Calling) и 2 отвечающих (Answer). Кто соединял их таким способом - подскажите что я не так делаю.
И как Вы это себе представляете? Вообще-то Point-to-Point, с кем связываться Calling модему?
Ruslan-maniak
Ааа, ну у меня было подозрение что там точка-точка, но я всё таки надеялся. Спасибо за такой быстрый ответ. Таким образом высокая скорость в нём доступна только для точка-точка. Увы (
Ruslan-maniak
Хочу снова поднять эту тему. Пытаюсь связать 2 модема по протоколу V.22 bis (не QAM). Но не могу понять как их настроить. Перепробовал разные вариации с High и Low band и RX и TX settings. Но так ничего и не получилось. И нигде не могу найти данных как правильно нужно настроить модем для работы в этом протоколе. Подскажите кто знает.
DmitryM
Цитата(Ruslan-maniak @ Feb 25 2015, 11:25) *
Хочу снова поднять эту тему. Пытаюсь связать 2 модема по протоколу V.22 bis (не QAM). Но не могу понять как их настроить. Перепробовал разные вариации с High и Low band и RX и TX settings. Но так ничего и не получилось. И нигде не могу найти данных как правильно нужно настроить модем для работы в этом протоколе. Подскажите кто знает.


Serial data from the USART is fed to the FSK modulator if V.21, V.23, Bell 103 or Bell 202 mode has
been selected
, or to the QAM modulator for V.22 bis, V.22, V.32 bis and V.32 modes.
Ruslan-maniak
Извините, перепутал. Я имел в виду: связать 2 модема по протоколу V.22 bis (НЕ АВТОМОДЕМ). Я так полагаю USART в моём случае это SPI? Давайте я приведу настройки которые использую:
1)первый модем
генеральный регистр
Код
        genConfig.Equalise       = ENABLE_EQUALISE_GenEqualiseCMX869B;
        genConfig.InputGain      = RXBN_OPEN_CIRCUIT_GenInputGainCMX869B;
        genConfig.PaternDetect   = STANDART_PATERN_DETECT_GenPaternDetectCMX869B;
        genConfig.Loopback       = LOOPBACK_DISABLE_GenLoopbackCMX869B;
        genConfig.Character      = CHARACTER_1_GenCharacterCMX869B;
        genConfig.RelayDrive     = RDRVN_PULL_TO_VDD_GenRelayDriveCMX869B;
        genConfig.PowerUp        = NORMAL_POWER_GenPowerUpCMX869B;
        genConfig.Reset          = NORMAL_GenResetCMX869B;
        genConfig.Irqnen         = IRQN_PIN_ENABLE_GenIrqnenCMX869B;

настройка отправки
Код
        txConfig.Mode         = V_22_BIS_HIGH_MODE_TxRxModeCMX869B;
        txConfig.Level        = L_10_5_DB_LEVEL_TxRxLevelCMX869B;
        txConfig.GuardTone    = NO_TX_GUARD_TONE_TxGuardToneCMX869B;
        txConfig.Scrambler    = DISABLE_SCRAMBLER_ScramblerCMX869B;
        txConfig.DataFormat   = START_STOP_NO_PARITY_TxDataFormatCMX869B;
        txConfig.DataSize     = DATA_8_BITS_TxRxDataSizeCMX869B;

2) второй модем
генеральный регистр - такой же как в первом

настройка приёма
Код
        rxConfig.Mode         = V_22_BIS_LOW_MODE_TxRxModeCMX869B;
        rxConfig.Level        = L_10_5_DB_LEVEL_TxRxLevelCMX869B;
        rxConfig.AutoEqualise = DISABLE_AUTO_EQUALISE_RxAutoEqualiseCMX869B;
        rxConfig.Scrambler    = DISABLE_SCRAMBLER_ScramblerCMX869B;
        rxConfig.DataFormat   = START_STOP_NO_OVERSPEED_RxDataFormatCMX869B;
        rxConfig.DataSize     = DATA_8_BITS_TxRxDataSizeCMX869B;

В результате в линии прослеживается аналоговый сигнал при отправке. Но принимающий модем вообще ничего не видит.
DmitryM
[quote name='Ruslan-maniak' date='Feb 27 2015, 06:57' post='1318335']
Вроде в норме. А Automodem V.22 работает?
Ruslan-maniak
Да, в автомодеме работает.
DmitryM
Цитата(Ruslan-maniak @ Mar 2 2015, 06:33) *
Да, в автомодеме работает.


Чем не устраивает?
Ruslan-maniak
На линии более 2 модемов. И цель - выжать максимальную скорость в таких условиях.
Ruslan-maniak
При использовании протокола V_23_FSK_1200_BPS я принимал байты при условии статус регистра: if((status & (1 << 6)) && !(status & (1 << 4))).
Может при протоколе v.22bis это условие не подходит. Я уже не знаю что делать. Не получается запустить 2400 б/с в ручном режиме. Кстати в протоколе v22bis у меня постоянно выставляется четвёртый бит статус регистра (Set to 1 on Rx UART framing error or HDLC FCS error) - то есть контроль не проходит и проблема в линии? Или я неправильно использую этот протокол в ручном режиме? Какой-то конкретной информации о использовании этого протокола я не нашёл.
DmitryM
Цитата(Ruslan-maniak @ Apr 7 2015, 15:01) *
При использовании протокола V_23_FSK_1200_BPS я принимал байты при условии статус регистра: if((status & (1 << 6)) && !(status & (1 << 4))).
Может при протоколе v.22bis это условие не подходит. Я уже не знаю что делать. Не получается запустить 2400 б/с в ручном режиме. Кстати в протоколе v22bis у меня постоянно выставляется четвёртый бит статус регистра (Set to 1 on Rx UART framing error or HDLC FCS error) - то есть контроль не проходит и проблема в линии? Или я неправильно использую этот протокол в ручном режиме? Какой-то конкретной информации о использовании этого протокола я не нашёл.


Вот тут V22bis-Full-Duplex-Call-Set-up-on-CMX869A
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.