Цитата(kan35 @ Mar 1 2013, 10:53)

Проблемный момент:
Например случилось, что я кидаю в канал 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) или Вы просто теряете одиночные байты из-за чего у Вас получаются битые пакеты.