Перейти к содержанию
    

CMUX полуработает

Прошу помощи кто воевал с CMUX:

Странности:

1. Даю команды

AT+CMUX?

+CMUX: -1,0,5,127,10,3,30,10,2

OK

AT+CMUX=0,0,5,31,10,3,30,10,2

OK

модем переходит в режим, я его там инициализирую на 2 виртуальных порта, и прверяю на одном из портов

AT+CMUX?

+CMUX: 0,0,5,127,10,3,30,10,2

Почему во первых mode сначала -1, а затем 0? Типа выключено/включено? И самое главное - почему значение размера пакета остается по умолчанию - 127, я же ясно пишу 31!?

 

2. Когда пакеты короткие, то все нормально, но когда передается GPRS, где один PPP пакет состоит из нескольких пакетов CMUX - у меня данных накидывает даже более 127 байт. При чем количество объявляет 127, а пофакту вижу, что прилетело на несколько штук больше (3-4), при чем лишних каких нибудь данных в пакете не наблюдается (побайтно проверил - все четко), как будто он действительно нарезает не по 127, а скажем по 130 байтов. Что за...?

 

Информация о модеме:

ATI

Quectel_Ltd

Quectel_M72

Revision: M72R01A05N32

OK

В целом более менее работает - на одном порту поднимаю PPP, другой оставляю на АТ командах, и оно работает за исключением пунктов выше. Но мне это критично. Что не так я делаю?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Второй вопрос вроде снимается, похоже на ошибки по драйверу порта - захлебывается на высокой скорости. Снизил до 19200 и стало стабильно: в прерывании разбирать CMUX не совсем оптимально (STM32 16МГц, FREERTOS), в то же время без CMUX на 115200 отлично работает. Доведу до ума - выложу здесь исходник драйвера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И самое главное - почему значение размера пакета остается по умолчанию - 127, я же ясно пишу 31!?
А с какой целью уменьшаете размер пакета?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

дело в том, что у Sierra и SIMCOM по умолчанию размер пакета 31 байт. У Quectel - 127.

И думаю, для переносимости кода на другие платформы следует уметь регулировать настройки.

31 в принципе нормальный размер :-))) - буфер не большой, а при 127 не на много производительнее будет, зато памяти съест больше в 4 раза.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблемный момент:

Например случилось, что я кидаю в канал GPRS данные, а ответа нет, типа висит в неизвестном состоянии. Или просто хочу переоткрыть сессию. В обычном режиме отпарвлял +++ и модем переходил в AT режим. Тут же отправляю +++ через CMUX - бесполезно. Хотя просто +++ - работает (видимо при этом CMUX закрыается автоматом), но закроются и остальные каналы мультиплексора - а там своя жизнь и возможно никаких проблем и нет.

Закрытие одного лишь проблемного канала через средства CMUX решит проблему? И закроется ли соединение GPRS когда я закрою этот канал? Или есть другие варианты?

 

Сам же отвечу. Не помогает переоткрытие витртуального порта. Как порт в GPRS режиме находился, так и продолжает. Пробовал кидать ATH по другому каналу - тоже нулевая реакция.

Что делать....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что делать....
Вы личные сообщения читали? Дайте свою аську, скайп или мыло.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы личные сообщения читали? Дайте свою аську, скайп или мыло.

У меня уведомления видимо в спам ссыпались (если они были). Зашел в личку - много интересного за годы накопилось:-)))))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уважаемые знатоки,

при использовании команды CMUX модем отвечает всего две секунды, после затыкается и далее не реагирует ни на AT команды ни на мультплексорные. Хотя в первые две секунды полностью отвечает и на те и на другие.

использую модем Sierra Wireless WS6318.

В чем может быть проблема?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблемный момент:

Например случилось, что я кидаю в канал GPRS данные, а ответа нет, типа висит в неизвестном состоянии. Или просто хочу переоткрыть сессию. В обычном режиме отпарвлял +++ и модем переходил в AT режим. Тут же отправляю +++ через CMUX - бесполезно. Хотя просто +++ - работает (видимо при этом CMUX закрыается автоматом), но закроются и остальные каналы мультиплексора - а там своя жизнь и возможно никаких проблем и нет.

Закрытие одного лишь проблемного канала через средства CMUX решит проблему? И закроется ли соединение GPRS когда я закрою этот канал? Или есть другие варианты?

 

Сам же отвечу. Не помогает переоткрытие витртуального порта. Как порт в GPRS режиме находился, так и продолжает. Пробовал кидать ATH по другому каналу - тоже нулевая реакция.

Что делать....

 

А зачем Вам в режиме CMUX отправлять +++?

У Вас как минимум 3 виртуальных канала. Если Вы по одному открыли соединение с сервером, то проконтролировать статус соединения вероятно можно по другому.

Например в Telit при открытии соккета по одному каналу, можно отправлять команду AT#SS (Soket Status) по другому каналу и прекрасно мониторить текущее состояние соединения. Я использую такой подход помимо отлавливания стандартных ERROR/NO CARRIER, которые могут прийти по каналу, по которому открыто соединение.

 

По поводу +++ и работы с виртуальными каналами

When in Multiplexed mode, the escape sequence ‘+++’ will not be detected by 
the module. It is responsibility of the application to use the break octet of the 
MSC (Modem Status Command) instead. Break octet of the MSC produce the 
same effect as ‘+++’ escape sequence.

 

 

 

MSC прекрасно работает заменяя при этом контроль линий управления потоком, которые в режиме CMUX не доступны. В одном из недавних проектов MSC были успешно использовано для RTS/CTS управления потоком при передаче больших блоков данных.

 

Ещё Вы писали по поводу ограничения размера пакетов в 31 байт. В самом описании CMUX сказано что пакеты могут содержать до 127 байт - и это действительно так. Я без каких-либо сбоев отправлял как одиночные байты, так и посылки по 127 байт. Но в проектах использую в основной пакеты по 64 байта.

И по поводу скорости работы процессора - 12 МГц вполне достаточно для обработки пакетов CMUX на скорости 115200. С этим справлялась 16тимегагерцовая ATMega, а CORTEX-M3/M0 и подавно. Возможно у Вас просто недостаточный размер буффера UART (если конечно используете FIFO) или Вы просто теряете одиночные байты из-за чего у Вас получаются битые пакеты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как еще можно разорвать режим передачи данных для GPRS соединения, без команды WIPCLOSE и использования +++ в мультиплексорном режиме?

Проблема заключается в том чтобы на другую сторону не передался +++ и желательно не закрывалась сесия GPRS

 

модем WS6318

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...