реклама на сайте
подробности

 
 
> Краткий курс по TCP/IP + Новый баг SIM300C (прошивка 12).
david_off
сообщение Oct 21 2008, 20:12
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 37
Регистрация: 15-10-08
Из: Одесса, Украина
Пользователь №: 40 978



По известному алгоритму установления 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.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Baser
сообщение Oct 22 2008, 08:59
Сообщение #2


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(david_off @ Oct 21 2008, 23:12) *
//теперь сессия готова к использования, что бы попробывать поднять её ещё раз, надо деативировать
//контекст, что приведёт модуль в начальное состояние. Для этого используем команду +CIPSHUT
AT+CIPSHUT
>>SHUT OK

если сейчас, после сообщения "SHUT OK", не сделать паузу хотя бы 1 сек, то в 90% будет вот что

AT+CSTT="WWW.UMC.UA","MTS","MTS"
--OK
AT+CIICR
+PDP: DEACT <- Какого !(,!,:? вылазит это сообщение? Ведь вроде получили, что "SHUT OK", Видно модуль хоть и выдал сообщение, но деактивация контекста не была произведена.

Я с этими всеми командами тоже долго боролся и изучал их, пока писал оптимальную (на мой взгляд smile.gif ) процедуру обработки ошибок и сбоев. Кое чего понял.

Так вот, то что вы считаете следствием команды AT+CIICR, а именно ответ +PDP: DEACT, на самом деле является второй частью ответа на вашу первую команду AT+CIPSHUT.

Нужно понимать одну вещь (я её тоже не сразу понял): есть модем со своим стеком команд (не совсем прямым smile.gif ) и есть GSM сеть. А команда AT+CIPSHUT - есть управляющая команда как для модема, так и для GSM сети. Так что, не на 90%, как вы пишите, а на все 100% должно быть следующее:

Ваш PDP контекст активирован, вы подаете команду:
AT+CIPSHUT

Модем сбрасывает свой стек в начальное состояние, посылает команду в GSM сеть и отвечает:
>>SHUT OK

GSM сеть деактивирует ваш PDP контекст и присылает подтверждение, которое модем транслирует вам:
+PDP: DEACT (тут может быть и другой текст, в зависимости от возможных ошибок).

Между первым и вторым ответом может проити достаточное время, и если вы в эту паузу начнете управлять модемом, то результаты могут быть мало предсказуемыми sad.gif

Я после AT+CIPSHUT просто тупо жду 5-10 сек без анализа ответов.
Но вполне могут быть случаи, когда деактивация контекста сетью будет происходить гораздо дольше.
Мне еще предстоит на это нарваться... smile.gif
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 11:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01357 секунд с 7
ELECTRONIX ©2004-2016