|
SIM900: если модуль завис, Как определить что модуль завис |
|
|
|
Oct 12 2011, 09:55
|
Местный
  
Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682

|
А какую основную функцию будет выполнять модуль? Если это действие, инициализируемое вами, то запускайте таймер в начале отработки, и останавливайте при полном завершении отработки. Если таймаут - считаем, что завис. Так проще и надежнее всего. Если же действие инициируется извне (например, ожидание входящего звонка), то тут однозначно не получится советовать. Надо изворачиваться по ситуации. Зависнуть может, например, регистрация в сети, но на АТ отвечать будет.
|
|
|
|
|
Oct 12 2011, 09:59
|
Мыслящий
    
Группа: Свой
Сообщений: 1 729
Регистрация: 20-07-07
Из: Самара
Пользователь №: 29 270

|
Цитата(GeGeL @ Oct 12 2011, 13:55)  Зависнуть может, например, регистрация в сети, но на АТ отвечать будет. В этом случае можно контроллировать регистрацию в сети (AT+CREG?)
--------------------
FAQ по ADФорум по ADЗнание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью. ...стоит запомнить ...вернее задуматься.
|
|
|
|
|
Oct 13 2011, 05:26
|

Частый гость
 
Группа: Участник
Сообщений: 95
Регистрация: 4-04-11
Из: челябинск
Пользователь №: 64 111

|
Цитата(Master of Nature @ Oct 12 2011, 13:59)  В этом случае можно контроллировать регистрацию в сети (AT+CREG?) именно так проверяю. В основном можно понять как модуль завис - от него ничего не идет в ответ. В этом случае его ни программно ни аппаратно выключить не получается. Но во всех случаях через некоторое время (пару минут) он отвисает.
|
|
|
|
|
Oct 15 2011, 18:39
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 7-12-06
Пользователь №: 23 250

|
В документе "sim900_atc_v1 00.pdf" написано: "AT+CFUN=1,1 can be used to reset module purposely". Значит, подачей этой команды можно сбросить модем. Есть два НО: 1. Там же написано: "The <fun> power level will be written to flash except minimum functionality". То есть каждый раз при таком сбросе будет происходить запись во flash. Ресурс flash невелик (1 млн циклов записи), вдруг при полном отсутствии сети GSM будет постоянно лупить такой сброс? Flash в модуле сдохнет быстро. 2. При таком сбросе питание сим-карты снимается? Если да, то симки со счетчиком включений тоже будут сдыхать при длительном отсутствии сети GSM.
Коллеги, прокомментируйте, пожалуйста, эти выкладки. Как лучше делать сброс?
P.S. Реальная ситуация: прибор с SIM900B лежит на столе (стационар), работает, GPRS подключен, данные передаются по TCP. Через веб-клиент билайна переводим сим-карту в состояние "Запасы" (перестает регистироваться в сети). Модем выдает PDP DEACT и дальше мы не можем отправить данные по TCP, закрываем сокет, отключаемся от GPRS и периодически пробуем подключить GPRS. На AT+CGATT=1 стабильно получаем ERROR. AT+CREG возвращает 0,1, AT+CGREG возвращает 0,0. Теперь переводим симку в состояние "Активирована". В 2 случаях из 10 модем еще минуту отвечает ERROR на AT+CGATT=1, а затем-таки подключает GPRS. Дальше работает как обычно, нормально. Но в 8 случаях из 10 модем продолжает отвечать ERROR и только выкл/вкл по PWRKEY дает эффект, симка регистрируется и модем подключает GPRS. Да, можно так сбрасывать, но этот вариант мне не нравится исключительно из-за того, что симки со счетчиком включений будут дохнуть. КАК БЫТЬ?
|
|
|
|
|
Oct 16 2011, 06:06
|
Местный
  
Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682

|
Учитывая Ваши страхи, я бы организовал аглоритм где-то так: пробуем подключать жпрс каждую минуту (чаще не вижу смысла из-за инертности оператора). Если в течние 5 попыток не получилось, перезапускаем PWRKEY. Причем в этом случае тщательно конролируем STATUS: чтобы он стал 0, пауза, затем чтобы 1, пауза, опять 1 для гарантии. Если что-то не так, тогда дергаем питание. Т.о. перезапуск по POWERKEY будет раз в 5 мин при блокировке сим. Если и это пугает, то можно ввести счетчик перезапусков, и спосле 2-х подряд перезапусков пропустить, скажем, следующие 10. Т.о. 2 попытки перезапуска будут каждый час (если это допустимо задачей).
Что касается ресурсов флеш, то не морочьте себе голову - на гарантийный срок вашего устройства точно хватит. Многие, наоборот, в своих изделиях просят ввести рассчитанный износ, чтобы послегарантийно (платно) обслуживать. Что касается счетчика включения сим, то я про такой не слышал. Был счетчик запуска аутентификации (COMP128), но он все равно будет инкрементироваться при любой перерегистрации в сети, хоть со снятием питания с сим, хоть нет. Реально ни разу не видел симки, блокированной в штаном устройстве, только в ридере при сканировании.
Если есть желание, можете даже попробовать запитать сим отдельно, предварительно замеряв ее питание о модуля - не думаю, что идут какие-то манипуляции с ее питанием, на то есть RST. Только в таком случае если проц в сим зависнет, то надо и ее дергать будет...
PS: и еще - в этих 8 из 10 случаев регистрация в сети появляется, но жпрс не поднимается? Или нет и регистрации? Если последнее, то возможно, есть недокументированные команды из расширенного инженерного меню, позволяющие принудительно перерегистрировать в сети по IMEI (получить новый TIMSI). Тогда нет необходимости дергать питание. Уточните у Эдуарда.
Сообщение отредактировал GeGeL - Oct 16 2011, 06:14
|
|
|
|
|
Oct 16 2011, 09:29
|
Частый гость
 
Группа: Участник
Сообщений: 134
Регистрация: 12-08-11
Пользователь №: 66 701

|
Цитата(Romashki @ Oct 14 2011, 22:54)  1 - проверяем ногу статус (это нам скажет о том, что модуль может принимать команды). Без появления этого сигнала - дальнейшая работа с модулем бессмысленна. 2 - ожидаем окончания регистрации в сети (CREG), если регистрация долго отсутствует (например на протяжении 40 секунд), пытаемся перезапустить модуль (поверкей или CFUN=1,1). Без регистрации дальнейшая работа с модулем бессмысленна. .... не совсем понимаю где проблема??? Нет нет - нет проблем. Я собственно приблизительно такой алгоритм сейчас и реализовал вместо посылки АТ и ожиданием OK. Я был озадачен тем, на сколько это, как бы, объективно. С AT+CREG? это конечно лучше - так как и ответ придет (стык с модемом на уровне USART) и регистрацию проверяем (на канальном уровне GSM). Если что-то возникнет более существенное в опытной эксплуатации за 3 мес. - то буду править код под уже возникающие проблемы. Цитата(Romashki @ Oct 14 2011, 22:54)  Если боитесь перегрева - спрашивайте у модуля температуру; напряжение питания - спрашивайте питание; если и это не 100% - то спрашивайте текущее время и сравнивайте с предыдущим значением. Эти моменты я учел в проверке. Думаю на данном этапе все эти меры будут конечно не 100% гарантировать слежение за зависанием, но хотябы избежать большей части (если конечно это вообще наступит). Возник еще такой вопрос: Есть ли какой-либо параметр определяющий максимальное время ответа модема SIM900 по USART на команды? Т.е. я имею ввиду что, MCU посылает модему команду AT на скорости 9600, через какое максимальное время мне ожидать прием первого символа ответа? Я понимаю, что например в команде AT+CMGDA=6 - ответ идет долго - потому что стираются смски. Но для простых команд типа ATZ, ATE, AT и т.п есть ли такие временные рамки? Я к чему спрашиваю. К примеру, посылаю команду, в ответ ожидается "OK" и через сколько его ждать от SIM900? 100 мс, 300 мс, 1 с? Дело в программном ожидании ОК от модема. Через прерывания в данном случае не могу реализовать - там задействован другой код программы. Если я не буду ограничивать время ожидания ОК и если оно не придет - то гаджет бесконечно зациклится на этом ожидании. Думал решить такую проблему через "хитросбрасываемый" watchdog - но слишком уж жестко это, хотя...
Сообщение отредактировал Ildar Belkin - Oct 16 2011, 08:43
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|