Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: M10: неизвестная ошибка при аттаче к GPRS-сервису.
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Сотовая связь и ее приложения
jokolemene
Всем здравствуйте!

Продолжаю писать программу для дивайса, в котором установлен M10 (Revision: M10BR06). При попытке аттача к GPRS-сервису (сразу после инициализации модуля) командой "AT+CGATT=1" появляется сообщение об ошибке "+CME ERROR: unknown". В большинстве случаев после выполнения пятисекундной задержки и повторной передачи команды "AT+CGATT=1" GPRS-сервис поднимается нормально, но один раз эта ошибка появлялась в течение нескольких минут. При этом в то-же самое время другой дивайс с модулем SIM340DZ и карточкой того-же самого провайдера поднял GPRS и соединился с сервером "на ура". Проблема не связана с каким-то конкретным оператором - проверялось на разных операторах с разными карточками (VegaLine и Tele2). Вот кусок лога работы дивайса:

Код
[00:00:00] {MAIN} ADC(0)=712; Vbat=4.17В
[00:00:00] {GSM } Включаем GSM-модуль
[00:00:02] {GSM }  ANSW: RDY
[00:00:02] {GSM }  COMM: AT+IPR?
[00:00:02] {GSM }  ANSW: +CFUN: 1
[00:00:02] {GSM }  ANSW: +CPIN: SIM PIN
[00:00:02] {GSM }  ANSW: AT+IPR?
[00:00:02] {GSM }  ANSW: +IPR: 38400
[00:00:02] {GSM }  ANSW: OK
[00:00:02] {GSM }  COMM: AT+IFC?
[00:00:03] {GSM }  ANSW: AT+IFC?
[00:00:03] {GSM }  ANSW: +IFC: 0,0
[00:00:03] {GSM }  ANSW: OK
[00:00:03] {GSM }  COMM: ATZ
[00:00:03] {GSM }  ANSW: ATZ
[00:00:03] {GSM }  ANSW: OK
[00:00:03] {GSM }  COMM: ATE0
[00:00:03] {GSM }  ANSW: ATE0
[00:00:03] {GSM }  ANSW: OK
[00:00:03] {GSM }  COMM: ATX4
[00:00:03] {GSM }  ANSW: OK
[00:00:03] {GSM }  COMM: AT+CMEE=2
[00:00:03] {GSM }  ANSW: OK
[00:00:03] {GSM }  COMM: AT+CREG=0
[00:00:03] {GSM }  ANSW: OK
[00:00:03] {GSM }  COMM: AT+QIURC=0
[00:00:03] {GSM }  ANSW: OK
[00:00:03] {GSM } Проверяем наличие и залоченность SIM-карты
[00:00:03] {GSM }  COMM: AT+CPIN?
[00:00:03] {GSM }  ANSW: +CPIN: SIM PIN
[00:00:03] {GSM }  ANSW: OK
[00:00:03] {GSM } Включена защита PIN-кодом
[00:00:03] {GSM } Считываем ID SIM-карты
[00:00:03] {GSM }  COMM: AT+QCCID
[00:00:03] {GSM }  ANSW: 89997776112013633181
[00:00:03] {GSM }  ANSW: OK
[00:00:03] {GSM } Считываем количество оставшихся попыток набора PIN-кода
[00:00:03] {GSM }  COMM: AT+QTRPIN
[00:00:03] {GSM }  ANSW: +QTRPIN: 3,3,10,10
[00:00:03] {GSM }  ANSW: OK
[00:00:03] {GSM } Пытаемся разлочить карточку
[00:00:03] {GSM }  COMM: AT+CPIN=2586
[00:00:03] {GSM }  ANSW: +CPIN: READY
[00:00:03] {GSM }  ANSW: OK
[00:00:03] {GSM } Проверяем наличие и залоченность SIM-карты
[00:00:03] {GSM }  COMM: AT+CPIN?
[00:00:03] {GSM }  ANSW: +CPIN: READY
[00:00:03] {GSM }  ANSW: OK
[00:00:03] {GSM } SIM-карточка открыта
[00:00:03] {GSM } Проверяем регистрацию в сети
[00:00:03] {GSM }  COMM: AT+CREG?
[00:00:04] {GSM }  ANSW: +CREG: 0,2
[00:00:04] {GSM }  ANSW: OK
[00:00:04] {GSM } Поиск сети
[00:00:04] {GSM } Измеряем уровень сигнала
[00:00:04] {GSM }  COMM: AT+CSQ
[00:00:04] {GSM }  ANSW: +CSQ: 99,99
[00:00:04] {GSM }  ANSW: OK
[00:00:04] {GSM } Уровень сигнала = -113 dBm
[00:00:08] {GSM } Проверяем регистрацию в сети
[00:00:08] {GSM }  COMM: AT+CREG?
[00:00:08] {GSM }  ANSW: +CREG: 0,2
[00:00:08] {GSM }  ANSW: OK
[00:00:08] {GSM } Поиск сети
[00:00:08] {GSM } Измеряем уровень сигнала
[00:00:08] {GSM }  COMM: AT+CSQ
[00:00:08] {GSM }  ANSW: +CSQ: 23,0
[00:00:08] {GSM }  ANSW: OK
[00:00:08] {GSM } Уровень сигнала = -67 dBm
[00:00:10] {MAIN} ADC(0)=687; Vbat=4.03В
[00:00:13] {GSM } Проверяем регистрацию в сети
[00:00:13] {GSM }  COMM: AT+CREG?
[00:00:13] {GSM }  ANSW: +CREG: 0,1
[00:00:13] {GSM }  ANSW: OK
[00:00:13] {GSM } Есть регистрация в сети
[00:00:13] {GSM } Измеряем уровень сигнала
[00:00:13] {GSM }  COMM: AT+CSQ
[00:00:13] {GSM }  ANSW: +CSQ: 23,0
[00:00:13] {GSM }  ANSW: OK
[00:00:13] {GSM } Уровень сигнала = -67 dBm
[00:00:13] {TCP } Проверяем состояние канала
[00:00:13] {GSM }  COMM: AT+QISTAT
[00:00:13] {GSM }  ANSW: OK
[00:00:13] {GSM }  ANSW: STATE: IP INITIAL
[00:00:13] {TCP } Подключаем GPRS-сервис
[00:00:13] {GSM }  COMM: AT+CGATT=1
[00:00:13] {GSM }  ANSW: +CME ERROR: unknown
[00:00:13] {TCP } ERROR: нет ответа 'OK'
[00:00:15] {TCP } Проверяем состояние канала
[00:00:15] {GSM }  COMM: AT+QISTAT
[00:00:15] {GSM }  ANSW: OK
[00:00:15] {GSM }  ANSW: STATE: IP INITIAL
[00:00:15] {TCP } GPRS-канал закрыт
[00:00:15] {TCP } ERROR: неудачная попытка открыть GPRS-канал


Вопрос: что это за ошибка - "unknown"? И как от неё избавиться?
V125
Может надо сначала APN задать?
jokolemene
Я же говорю, что через пять секунд после "unknown" дивайс даёт эту команду повторно, получает "ОК" и дальше работает нормально. APN задаётся чуть позже - перед выполнением команды "AT+QIACT". Опять-же, точно такой-же дивайс, но с модулем SIM340DZ, аттачится к GPRS-сервису с пол-пинка, работая по точно такому-же алгоритму. Тем не менее, сделал для проверки установку APN заранее. Вот лог результата:

Код
[00:00:00] {MAIN} ADC(0)=715; Vbat=4.19В
[00:00:00] {GSM } Включаем GSM-модуль
[00:00:03] {GSM }  ANSW: RDY
[00:00:03] {GSM }  COMM: AT+IPR?
[00:00:03] {GSM }  ANSW: AT+IPR?
[00:00:03] {GSM }  ANSW: +IPR: 38400
[00:00:03] {GSM }  ANSW: OK
[00:00:03] {GSM }  COMM: AT+IFC?
[00:00:03] {GSM }  ANSW: AT+IFC?
[00:00:03] {GSM }  ANSW: +IFC: 0,0
[00:00:03] {GSM }  ANSW: OK
[00:00:03] {GSM }  COMM: ATZ
[00:00:03] {GSM }  ANSW: ATZ
[00:00:03] {GSM }  ANSW: OK
[00:00:03] {GSM }  COMM: ATE0
[00:00:03] {GSM }  ANSW: ATE0
[00:00:03] {GSM }  ANSW: OK
[00:00:03] {GSM }  COMM: ATX4
[00:00:03] {GSM }  ANSW: OK
[00:00:03] {GSM }  COMM: AT+CMEE=2
[00:00:03] {GSM }  ANSW: OK
[00:00:03] {GSM }  COMM: AT+CREG=0
[00:00:03] {GSM }  ANSW: OK
[00:00:03] {GSM }  COMM: AT+QIURC=0
[00:00:03] {GSM }  ANSW: OK
[00:00:09] {GSM } Проверяем наличие и залоченность SIM-карты
[00:00:09] {GSM }  COMM: AT+CPIN?
[00:00:09] {GSM }  ANSW: +CPIN: SIM PIN
[00:00:09] {GSM }  ANSW: OK
[00:00:09] {GSM } Включена защита PIN-кодом
[00:00:09] {GSM } Считываем ID SIM-карты
[00:00:09] {GSM }  COMM: AT+QCCID
[00:00:09] {GSM }  ANSW: 89997776112013633181
[00:00:09] {GSM }  ANSW: OK
[00:00:09] {GSM } Считываем количество оставшихся попыток набора PIN-кода
[00:00:09] {GSM }  COMM: AT+QTRPIN
[00:00:09] {GSM }  ANSW: +QTRPIN: 3,3,10,10
[00:00:09] {GSM }  ANSW: OK
[00:00:09] {GSM } Пытаемся разлочить карточку
[00:00:09] {GSM }  COMM: AT+CPIN=2586
[00:00:09] {GSM }  ANSW: +CPIN: READY
[00:00:09] {GSM }  ANSW: OK
[00:00:09] {GSM } Проверяем наличие и залоченность SIM-карты
[00:00:09] {GSM }  COMM: AT+CPIN?
[00:00:09] {GSM }  ANSW: +CPIN: READY
[00:00:09] {GSM }  ANSW: OK
[00:00:09] {GSM } SIM-карточка открыта
[00:00:10] {GSM } Проверяем регистрацию в сети
[00:00:10] {GSM }  COMM: AT+CREG?
[00:00:10] {GSM }  ANSW: +CREG: 0,2
[00:00:10] {GSM }  ANSW: OK
[00:00:10] {GSM } Поиск сети
[00:00:10] {GSM } Измеряем уровень сигнала
[00:00:10] {GSM }  COMM: AT+CSQ
[00:00:10] {GSM }  ANSW: +CSQ: 99,99
[00:00:10] {GSM }  ANSW: OK
[00:00:10] {GSM } Уровень сигнала = -113 dBm
[00:00:10] {MAIN} ADC(0)=714; Vbat=4.18В
[00:00:15] {GSM } Проверяем регистрацию в сети
[00:00:15] {GSM }  COMM: AT+CREG?
[00:00:15] {GSM }  ANSW: +CREG: 0,1
[00:00:15] {GSM }  ANSW: OK
[00:00:15] {GSM } Есть регистрация в сети
[00:00:15] {GSM } Измеряем уровень сигнала
[00:00:15] {GSM }  COMM: AT+CSQ
[00:00:15] {GSM }  ANSW: +CSQ: 20,0
[00:00:15] {GSM }  ANSW: OK
[00:00:15] {GSM } Уровень сигнала = -73 dBm
[00:00:15] {TCP } Проверяем состояние канала
[00:00:15] {GSM }  COMM: AT+QISTAT
[00:00:15] {GSM }  ANSW: OK
[00:00:15] {GSM }  ANSW: STATE: IP INITIAL
[00:00:15] {TCP } Устанавливаем имя точки доступа, логин и пароль
[00:00:15] {GSM } Считываем номер оператора из GSM-модуля
[00:00:15] {GSM }  COMM: AT+COPS=0,2
[00:00:15] {GSM }  ANSW: OK
[00:00:15] {GSM }  COMM: AT+COPS?
[00:00:15] {GSM }  ANSW: +COPS: 0,2,"40177"
[00:00:15] {GSM }  ANSW: OK
[00:00:15] {GSM }  COMM: AT+CGDCONT=1,"IP","internet"
[00:00:15] {GSM }  ANSW: OK
[00:00:15] {GSM }  COMM: AT+QIREGAPP="internet","",""
[00:00:15] {GSM }  ANSW: OK
[00:00:15] {TCP } Подключаем GPRS-сервис
[00:00:15] {GSM }  COMM: AT+CGATT=1
[00:00:15] {GSM }  ANSW: +CME ERROR: unknown
[00:00:15] {TCP } ERROR: нет ответа 'OK'


Дополнение:
Проблема решилась так: не давать команду "AT+CGATT" совсем. Никогда. Такой "workaround" пока-что работает. Буду наблюдать. Но в любом случае "unknown" - это баг. Негоже модулю выдавать такие сообщения об ошибках на вполне легальные команды.
GeGeL
Почему workaround? Ни в GSM_TCPIP_AN_V1.01, ни в GSM_TCPIP_Recommended_Process_V1.0 эта команда даже не упоминается. И вобще ее суть трудно понять.
kovz
Цитата(GeGeL @ Jan 6 2012, 09:10) *
Почему workaround? Ни в GSM_TCPIP_AN_V1.01, ни в GSM_TCPIP_Recommended_Process_V1.0 эта команда даже не упоминается. И вобще ее суть трудно понять.


Суть её ясна - регистрация в сервисе GPRS. А ошибка возможно возникает из-за того, что модуль после включения самостоятельно пытается зарегистрироваться в GPRS. Попробуйте проверять не только CREG но и CGREG. И подавать CGATT только если он равен 0, по аналогии с CREG.
jokolemene
С неделю назад мне так уже рекомендовали делать. Я проверил - результат был аналогичный (правда, при проверке команда CGREG дала ответ 2, а не 0):
Код
[00:00:12] {GSM } Проверяем регистрацию в сети
[00:00:12] {GSM }  COMM: AT+CREG?
[00:00:12] {GSM }  ANSW: +CREG: 0,1
[00:00:12] {GSM }  ANSW: OK
[00:00:12] {GSM } Есть регистрация в сети
[00:00:12] {GSM } Измеряем уровень сигнала
[00:00:12] {GSM }  COMM: AT+CSQ
[00:00:12] {GSM }  ANSW: +CSQ: 18,0
[00:00:12] {GSM }  ANSW: OK
[00:00:12] {GSM } Уровень сигнала = -77 dBm
[00:00:12] {TCP } Проверяем состояние канала
[00:00:12] {GSM }  COMM: AT+QISTAT
[00:00:12] {GSM }  ANSW: OK
[00:00:12] {GSM }  ANSW: STATE: IP INITIAL
[00:00:12] {TCP } Проверяем состояние сети
[00:00:12] {GSM }  COMM: AT+CGREG?
[00:00:12] {GSM }  ANSW: +CGREG: 0,2
[00:00:12] {GSM }  ANSW: OK
[00:00:12] {TCP } Нет регистрации в сети
[00:00:12] {TCP } Подключаем GPRS-сервис
[00:00:12] {GSM }  COMM: AT+CGATT=1
[00:00:12] {GSM }  ANSW: +CME ERROR: unknown
[00:00:12] {TCP } ERROR: нет ответа 'OK'

Возможно, что если бы команда CGREG ответила 0, а не 2, то модуль на команду CGATT ответил бы ОК. Но во время тестирования команда CGREG ни разу не ответила 0. Только 2 или 1.
CupuyC
Прежде чем давать команду AT+CGATT=1 проверте, не подключен ли уже ЖПРС AT+CGATT?.
Неизвестная ошибка - возможно это ругань от сети, что модуль уже в ней. Попробуйте пропинговать какой-то сервер, например: AT+QPING="www.grandelectronic.com" sm.gif
EugenyAM
Цитата(CupuyC @ Jan 6 2012, 18:06) *
Прежде чем давать команду AT+CGATT=1 проверте, не подключен ли уже ЖПРС AT+CGATT?.
Неизвестная ошибка - возможно это ругань от сети, что модуль уже в ней. Попробуйте пропинговать какой-то сервер, например: AT+QPING="www.grandelectronic.com" sm.gif


Путем внимательного изучения документации по M10 и ряда экспериментов был найден работоспособный алгоритм инициализации для установления связи с TCP-сервером

Проверить сигнал STATUS, если 0, перейти на включение питания
Выключение питания
Ожидание STATUS=0, если за 1 минуту не дождались, выполнить отключение по аварийному сигналу
Ожидание 5 секунд
Включение питания
Ожидание STATUS=1, если не дождались - неисправность модема
Ожидание 1 секунда
ATE0 - запретить эхо
AT+IPR=115200 - зафиксировать скорость обмена
AT+IFC=0,0 - отключить управление потоком (если оно не используется)
AT+CMEE=2 - установить расширенный формат вывода сообщений об ошибках
AT+QSIMSTAT? - запросить наличие SIM-карты - ожидаем ответ +QSIMSTAT: 0,1
AT+CIMI - запросить код сети (первые 5 цифр в ответе), далее используется для выбора из таблицы параметров APN,username,password
AT+CSQ - запросить уровень сигнала сети - ожидаем ответ, отличный от +CSQ: 99,99
AT+CREG? - ожидаем ответ +CREG: 0,1 - если не дождались - ошибка регистрации в сети
AT+CGATT? - ожидаем ответ +CGATT: 1 - если не дождались - ошибка подключения GPRS
далее, если нужно, проводим настройку параметров стека TCP/IP (AT+QIPROMPT=0 и.т.д.)
AT+CSGP=1,"APN","username","password" - задать параметры подключения к APN
AT+QISTAT - получить состояние стека TCP/IP
- далее, в зависимоcти от состояния:
- IP INITIAL, IP STATUS, IP CLOSE - устанавливаем соединение:
-- AT+QIOPEN="TCP","xxx.xxx.xxx.xxx",port - ждем CONNECT OK, если CONNECT FAIL, переходим на QT+QISTAT
-- AT+QISEND=... передаем данные на сервер
- IP START, IP CONFIG, IP IND, IP GPRSACT - деактивируем контекст
-- AT+QIDEACT, переходим на AT+QISTAT
- TCP CONNECTING - отменяем предыдущую попытку соединения
-- AT+QICLOSE, затем сразу на AT+QIOPEN...
- PDP DEACT - если получили такой ответ - идем на начало

Работает с симками МТС, Билайн, Мегафон в Омске, когда будут результаты из других регионов - сообщу.
GeGeL
8 месяцев...
Не пробовали залить над оцпу-шной прошивкой пример example_tcpip и за 5 мин доработать его, чтобы он прозрачно принимал-отправлял данные через Uart3? И ничего не глючит, и напряга ноль sm.gif
EugenyAM
Цитата(EugenyAM @ Sep 10 2012, 11:03) *
Работает с симками МТС, Билайн, Мегафон в Омске, когда будут результаты из других регионов - сообщу.


В Хабаровске на Билайне заработало нормально (раньше с новыми симками не подключалось к серверу по TCP).
В Красноярске на МТС аналогично.
В Московской области (Билайн, Мегафон) связь стала заметно устойчивее (раньше устройство могло после разрыва сутками не выходить на связь,
пока ему не передернут питание)

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.