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

SIM900: если модуль завис

Гость SUPPORT7/6
Используйте аппаратный таймер... Если в течении 5-6 секунд не пришёл ОК - ребут модема или повторение запроса( хотя если документированый ОК не пришёл - то это точно висяк и спасёт только ребут). Я так делаю. На каждую команду 5 сек ожидаение ОК( на самом деле приходит моментально и таймер останавливается - но вдруг). CREG? CGREG - делаю опрос с интервалом 2 секунды до 20 раз пока не приходит +CREG: 0,1 . Превышен лимит опроса - ребут модема. Вообщем в любом случае отловите зависон. Т.е. идеально на каждую команду проверка ответа - тогда висяки не страшны. Ну и ограничить кол-во перезагрузок 2-3 штуки.

 

Спасибо, логика понятна. Сейчас правил код - сделал не через аппаратный таймер, а через декремент двухбайтовой переменной в процедуре ожидания от модема ОК. Рассчитал двухбайтовое значение - сколько будет до "0" через 3 сек, вношу перед посылкой АТ, затем запускаю процедуру чтения в цикле приемного буфера с уменьшением двухбайтовой переменной. Выход из процедуры с флажком= 1, если ОК- дождадись, флажок=0 если двухбайтовая переменная обнулилась, до поступления ОК.

Дальше рестарт модему, если флажок=0

Проверил - так работает.

 

С аппаратным таймером у меня не получится в данном проекте сделать, так как его обнуление нужно отлавливать через прерывание, а у меня они уже задействованы спец. образом. На момент работы с модемом - отключены. Но я уже прикинул как сделаю в след. проекте на аппаратном таймере.

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


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

В этих 8 из 10 случаев регистрация в сети появляется, но жпрс не поднимается? Или нет и регистрации? Если последнее, то возможно, есть недокументированные команды из расширенного инженерного меню, позволяющие принудительно перерегистрировать в сети по IMEI (получить новый TIMSI). Тогда нет необходимости дергать питание. Уточните у Эдуарда.

В 8 из 10 случаев CREG неизменно выдает 0,1, а CGREG выдает 0,0, на команду AT+CGATT=1 получаю ответ ERROR. То есть регистрация есть, а GPRS нет. При этом если ребутнуть модем - появляется и GPRS тоже. Вот мне бы как раз команду принудительной разрегистрации или повторной регистрации в сети. Это бы могло помочь.

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


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

Вот мне бы как раз команду принудительной разрегистрации или повторной регистрации в сети. Это бы могло помочь.

См. AT+COPS

 

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


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

В 8 из 10 случаев CREG неизменно выдает 0,1, а CGREG выдает 0,0, на команду AT+CGATT=1 получаю ответ ERROR. То есть регистрация есть, а GPRS нет. При этом если ребутнуть модем - появляется и GPRS тоже. Вот мне бы как раз команду принудительной разрегистрации или повторной регистрации в сети. Это бы могло помочь.

 

 

А после того как приходит PDP DEACT AT+CIPSHUT делаете?

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


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

См. AT+COPS

Пробовал AT+COPS=1,0,"Beeline", и еще AT+COPS=4,0,"Beeline". Никак не реагирует, на AT+COPS? выдает 0 (автоматический режим).

 

А после того как приходит PDP DEACT AT+CIPSHUT делаете?

По приходу PDP DEACT ничего не делаю вообще.

 

AT+CIPSHUT делаю в двух случаях:

1) при подключении GPRS, если на AT+CIPSTATUS отвечает не INITIAL;

2) при установлении TCP-соединения, если на AT+CIPSTATUS отвечает не INITIAL, не STATUS и не CLOSED.

Всё по даташиту.

 

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


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

Хм...а если не проверять cipstatus? Я вот проверяю CGREG, CGATT и если на CIICR приходит PDP DEACT - делаю рестарт. Просто что конкретно даст AT+CIPSTATUS в плане проверки ?

Изменено пользователем MKdemiurg

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


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

По приходу PDP DEACT ничего не делаю вообще.

 

Ну и зря.

Делаем cipshut и открываем сессию заново. Как правило со второго раза соединяется ок.

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


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

Хм...а если не проверять cipstatus? Я вот проверяю CGREG, CGATT и если на CIICR приходит PDP DEACT - делаю рестарт. Просто что конкретно даст AT+CIPSTATUS в плане проверки ?

Ничего путевого не даст. Еще с незапамятных времен приколотил на эту кривую команду. CGATT и CIICR - с головой хватает.

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


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

Хм...а если не проверять cipstatus? Я вот проверяю CGREG, CGATT и если на CIICR приходит PDP DEACT - делаю рестарт. Просто что конкретно даст AT+CIPSTATUS в плане проверки ?

Я на CIPSTATUS не жалуюсь, загвоздка не в нем, а в том, что при выполнении CGATT=1 получаю сразу ERROR. Я тут CIPSTATUS даже и не вызываю нигде. Если CGATT=1 ответит ОК, то тогда уже IPSTATUS, но там дальше всё нормально.

 

Еще раз: проблема в том, что если появился GPRS, то модем сам его не обнаруживает, на CGATT=1 выдает ERROR, и помогает только перезагрузка с отключением питания модема.

 

Наши поставщики щас ищут, какой командой можно пнуть модем, чтобы он без рестарта поискал GPRS.

 

Ну и зря.

Делаем cipshut и открываем сессию заново. Как правило со второго раза соединяется ок.

Именно так, как только появляются новые данные на отправку, я делаю CIPSEND, получаю ERROR, иду на закрытие TCP-соединения, дальше дается CIPSHUT и при попытке CIPSTART получаю ERROR, то есть со второго раза не соединяется, и дальше так и не соединяется сколько ни пытается. Через паузу иду на закрытие GPRS и пытаюсь подключить GPRS снова, но на CGATT=1 получаю стабильно ERROR. Найти GPRS помогает только сброс модема по PWRKEY и питанию.

 

Ничего путевого не даст. Еще с незапамятных времен приколотил на эту кривую команду. CGATT и CIICR - с головой хватает.

Если GPRS есть, то CGATT и CIICR проходят чудесно. Если его нет, то на CGATT=1 уже получаем ERROR. Вот щас выкинул вообще вызов CIPSTATUS из алгоритма, загнал опять в то же состояние - проблема та же. CIPSTATUS не влияет.

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


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

В 8 из 10 случаев CREG неизменно выдает 0,1, а CGREG выдает 0,0, на команду AT+CGATT=1 получаю ответ ERROR. То есть регистрация есть, а GPRS нет. При этом если ребутнуть модем - появляется и GPRS тоже. Вот мне бы как раз команду принудительной разрегистрации или повторной регистрации в сети. Это бы могло помочь.

 

Обратите внимание на предисторию этой ситуации: я так понял, возникает при переводе работающей симки оператором из состояния "Запасы" в состояние "Работа". Очень похожая ситуация возникает при игре с клоном симки: при включенном оригинале включаем клон, делаем исходящий звонок и затем клон тушим. При этом оригинал в сети (по CREG), но жпрс поднять не можем. Связано с тем, что клон затребовал другой TMSI, и прописанный в оригинале устарел.

Попробуйте:

1. Доходят ли в таком состоянии входящие звонки на модем?

2. Сделать исходящий звонок (возможно, с первого раза не получится) и затем пробовать жпрс;

3. Ну и опять же, попробовать перерегистрацию в сети каким-либо образом (скорее всего, то, что Вы пробовали, не возымело эффекта, т.к. собственно, перерегистрации и не было - сеть оставлась та же).

 

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


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

Обратите внимание на предисторию этой ситуации: я так понял, возникает при переводе работающей симки оператором из состояния "Запасы" в состояние "Работа". Очень похожая ситуация возникает при игре с клоном симки: при включенном оригинале включаем клон, делаем исходящий звонок и затем клон тушим. При этом оригинал в сети (по CREG), но жпрс поднять не можем. Связано с тем, что клон затребовал другой TMSI, и прописанный в оригинале устарел.
Да, очень похоже. По CREG я тоже получаю 0,1.

 

Попробуйте:

1. Доходят ли в таком состоянии входящие звонки на модем?

Сим-карта не поддерживает вх/исх звонков (только m2m).

 

Попробую сделать в такой ситуации сброс модема по PWRKEY и по питанию с повтором не чаще 20 минут.

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


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

Будет возможность, попробуйте все ж ради хохмы ATD

Мне кажется, что статус исходящих по идее будет проверяться уже после регистрационных моментов.

Суть такова: мы пытаемся инициировать сеанс устаревшим TMSI. По идее, сеть не может распознать абонента и в ответ инициирует идентификацию пи IMSI и пропишет в симку новый TMSI, и только потом даст отлуп на исходящий согласно тарифного плана. Но т.к. перерегистрация уже произойдет, то жпрс может подключиться после этого.

Это чистая теория, но все ж какая то вероятность есть.

 

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


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

Будет возможность, попробуйте все ж ради хохмы ATD

Мне кажется, что статус исходящих по идее будет проверяться уже после регистрационных моментов.

Суть такова: мы пытаемся инициировать сеанс устаревшим TMSI. По идее, сеть не может распознать абонента и в ответ инициирует идентификацию пи IMSI и пропишет в симку новый TMSI, и только потом даст отлуп на исходящий согласно тарифного плана. Но т.к. перерегистрация уже произойдет, то жпрс может подключиться после этого.

Проверили следующим образом. Ввели модем в описанное выше состояние, симка в режиме "Активирована", на CGATT=1 выдает ERROR. Далее делаем звонок ATDxxxxxx, небольшая пауза, NO CARRIER. Далее пробуем CGATT=1 - ERROR. Пробовали звонки на разные номера, делать IPSHUT, CGATT=0, разные комбинации - сдвигов нет, к сожалению, GPRS не подключается, помогает только полный сброс.

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


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

Именно так, как только появляются новые данные на отправку, я делаю CIPSEND, получаю ERROR, иду на закрытие TCP-соединения, дальше дается CIPSHUT и при попытке CIPSTART получаю ERROR, то есть со второго раза не соединяется, и дальше так и не соединяется сколько ни пытается. Через паузу иду на закрытие GPRS и пытаюсь подключить GPRS снова, но на CGATT=1 получаю стабильно ERROR. Найти GPRS помогает только сброс модема по PWRKEY и питанию.

 

Как часто появляются данные? Может ТСР закрывается по таймауту?

Тогда тут болезнь модуля на закрытие сессии проявляется.

 

Китайцы проинформированы, ждем исправлений.

 

 

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


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

Добрый день!

Подскажите пожалуйста, в случае зависания sim900 на пине STATUS будет присутствувать высокий уровень?

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


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

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

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

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

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

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

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

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

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

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