По известному алгоритму установления TCP/IP соединения, сначала надо произвести 3 чудо команды
1) AT+CSTT="WWW.UMC.UA","MTS","MTS" - задать APN, пользователя и пароль
2) at+CIICR - поднять соедиение
3) AT+CIFSR - получить статус.
потом можно поднимать сервер или соединение...
Перед первой командой надо бы убедиться, что AT+CIPSTATUS выдаёт IP INITIAL (начальное состояние). Ещё не плохо бы убедится, что GPRS сервис подлючён. Для этого можно узнать текущее состояние при помощи AT+CGATT?, и если ответит AT+CGATT=0, то подключить сервис командой AT+CGATT=1. Подключение может быть с задержкой.
Так вот, решил я проверить правильность реализации в контроллере АТ комманд, поднимающие TCP/IP соединение. Перед вызывом чудо команд, проверяю состояние AT+CIPSTATUS, если оно не равно IP INITIAL, то провожу деактивацию контекста (AT+CIPSHUT), что должно гарантировано вернуть состояние IP INITIAL и потом смело посылаю чудо команды.
Алгоритм обработки комманд устроен так, что следующая не посылается, пока не получен ответ на предыдущую.
Так вот, после суток биения головой об монитор, нахожу такую закономерность: если не дать модулю постоять после получения ответа SHUT OK на команду AT+CIPSHUT, то модуль сходит сума.
Вот кусок беседы с модулем:
//Проверяем состояние модуля
AT+CIPSTATUS
>>OK
>>STATE: IP INITIAL
//устанавливием параметры GPRS подключения
AT+CSTT="WWW.UMC.UA","MTS","MTS"
>>OK
//Проверяем состояние модуля
AT+CIPSTATUS
>>OK
>>STATE: IP START
//поднимаем GPRS подключение
at+CIICR
>>OK
//Проверяем состояние модуля
AT+CIPSTATUS
>>OK
>>STATE: IP GPRSACT
//получаем ip-адерес
AT+CIFSR
>>88.214.69.76
//Проверяем состояние модуля
AT+CIPSTATUS
>>OK
>>STATE: IP STATUS
//теперь сессия готова к использования, что бы попробывать поднять её ещё раз, надо деативировать
//контекст, что приведёт модуль в начальное состояние. Для этого используем команду +CIPSHUT
AT+CIPSHUT
>>SHUT OK
если сейчас, после сообщения "SHUT OK", не сделать паузу хотя бы 1 сек, то в 90% будет вот что
AT+CSTT="WWW.UMC.UA","MTS","MTS"
--OK
AT+CIICR
+PDP: DEACT <- Какого !(,!,:? вылазит это сообщение? Ведь вроде получили, что "SHUT OK", Видно модуль хоть и выдал сообщение, но деактивация контекста не была произведена.
PS: Постил такое же сообщение на другом форуме, один человек сказал, что вообще все команды, которые я использовал - тормозят, после всех нужно ждать. Спорить с ним не стал.
У себя пробывал выливать команды CSTT, CIICR, CIFSR даже не дожидаясь между ними прихода эха и ответа. Ошибки небыло, конечно если до этого состояние было IP INITIAL.