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

 
 
> Краткий курс по 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
Ответов
Dron_Gus
сообщение Oct 21 2008, 21:26
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Перед AT+CIPSHUT надо AT+CIPCLOSE.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
david_off
сообщение Oct 21 2008, 22:04
Сообщение #3


Участник
*

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



Цитата(Dron_Gus @ Oct 22 2008, 00:26) *
Перед AT+CIPSHUT надо .


Может где-то и надо, но в SIM300С это не к чему.
AT+CIPSHUT гарантировано включает в себя дейтвия команды AT+CIPCLOSE
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Oct 21 2008, 23:15
Сообщение #4





Guests






Цитата(david_off @ Oct 22 2008, 02:04) *
...

С TCP/IP я не работал, а вот с обычной модемной связью приходилось иметь дело. Из этого опыта вынес следующее: нужно четко понимать, что кроме, собственно, Вашего модема, есть еще линия связи и другой абонент. Успешное выполнение команды и получение сообщения об этом означает, лишь, что модем правильно воспринял команду и выполнил все предписанные действия. Что происходит при этом на другом конце линии не всегда достоверно известно.
За примерами далеко ходить не нужно, можно взять стандартную команду установки связи ATD. После успешного соединения выдается ответ CONNECT, и по идее уже можно передавать данные, но это не так. Проводили такие эксперименты: ставили рядом два компьютера, каждый со своим модемом, подключенным к своему отдельному телефонному номеру, и пытались установить связь между ними.
Когда на компьютере, инициирующем связь, уже выдавалось сообщение CONNECT, на втором его еще не было. Оно всегда выдавалось с задержкой 1-3 сек. Попытка сразу начать передавать данные приводила к глухому зависанию. Была возможность попробовать сочетания разных/одинаковых модемов и различного/одинакового ПО на компьютерах. Результат был примерно одинаков: только выдержка до передачи данных 3-секундной паузы после CONNECT гарантировала надежное соединение.
Go to the top of the page
 
+Quote Post



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

 


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


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