|
|
|
GPRS для чайников |
|
|
|
May 19 2015, 17:11
|
Участник
Группа: Участник
Сообщений: 33
Регистрация: 6-05-15
Пользователь №: 86 547
|
Подскажите, где взять прошивку для SIM900R? Мне нужно сбросить модем в заводские настройки. Спс!
UPD Вопрос снимается, разобрался.
Сообщение отредактировал ISG2015 - May 19 2015, 17:22
|
|
|
|
|
May 19 2015, 17:46
|
Местный
Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682
|
Цитата Если бы не пролезали, алгоритм конечного автомата управления модулем можно было бы очень упростить. Вот как люди умудряются усложнять себе жизнь... Я давно работаю с Quectel ОЦПУ, и никогда не сталкивался с проблемами в этом плане. Конечно, при ожидании ответа на АТ-запрос может прийти левый URC, но ведь все равно все должно проверяться, перед тем, как парситься. Т.е. одной state-машины недостаточно, надо каждые данные парсить и проверять на соответствие ожидаемым. Для этого используется strstr. Ради интереса посмотрите код Quectel RIL (от производителя). Там обработчик события UART с подключаемыми парсерами, которые формируют callback-и. Честно, тут я категорически не согласен со Stanley - он пошел на поводу юзерофильности, и потерялась изящность и прозрачность предыдущих версий ОЦПУ с опросом getEvent в цикле. Теперь фиг поймешь, в контексте какой нити выполняются callback-и и какие данные защищать мутексами. Но зато школьники тащутся - привычная и уютная среда...
Не заморачивайтесь на абстракциях. Просто попробуйте сесть, сосредоточиться и ясно представить, как реально будет идти обмен с модулем, и предвидеть по возможности все ситуации, а также предусмотреть вывод отладочного лога с указанием номеров строк и параметров. ПС: АТ-ответы и URC никогда не разрываются другими URC - все становится в очередь. Любой ответ и URC, как правило, имеет префикс, указывающий на его принадлежность.
|
|
|
|
|
May 21 2015, 07:59
|
Участник
Группа: Участник
Сообщений: 33
Регистрация: 6-05-15
Пользователь №: 86 547
|
Подскажите ,а как идентифицировать оператора на SIM-карте? Запрашивать номер, вырезать первые цифры и по этим цифрам распзнавать? Может быть есть элегантнее способ!? Спс!.
|
|
|
|
|
May 21 2015, 16:01
|
Участник
Группа: Участник
Сообщений: 33
Регистрация: 6-05-15
Пользователь №: 86 547
|
А для Украины MNC кодами не поделится никто? Пишу свою реализацию работы с модемом. Наметилось несколько вопросов: 1. При инициализации UDP сокета, команда "AT+CIFSR" возвращает локальный адрес, но не возвращает финального "ОК"! Я анализирую ответ от модема и считаю, что команда выполнена успешна именно по этому "ОК". Получается как то не але Приходится городить что то типа такого: Код if ( SearchRespondSIM900( "OK" ) || SearchRespondSIM900( "." ) ) Точка является разделителем в IP адресе, но вполне может встретиться еще где-то. 2. Какое время установки сессии? У меня получается зарегистрироваться в течении 10,55 сек. с момента подачи питания на модем и 2,28 сек. если модем уже был включен.
Сообщение отредактировал ISG2015 - May 21 2015, 16:04
|
|
|
|
|
May 22 2015, 02:50
|
Частый гость
Группа: Участник
Сообщений: 125
Регистрация: 13-04-11
Из: Суровый Челябинск
Пользователь №: 64 337
|
1. Для Украины код MCC = 255, а идентификатор MNC присваивается в порядке регистрации: - MNC:01 Ukrаinian Mobile Communication, UMC; - MNC:02 Ukrainian Radio Systеms, URS; - MNC:03 Kyivstаr GSM; - MNC:04 Internаtional Telecommunications Ltd; - MNC:05 Gоlden Telecom; - MNC:06 Astelit; - MNC:07 Ukrtelecom; - MNC:21 CJSC - Telеsystems of Ukraine. 2. AT+CIFSR является неподтверждаемой (без OK), и таких команд достаточно много. Ищите блоками заканчивающимися на концевик 0x0D 0x0A, большинство из них имеют префикс для распознавания ("+CREG:", например). Я пришедшие блоки маркирую в отдельном буфере и ищу ответы уже по нему.
Прототип функции обработки команд: TStruct_OpResult AtOp_Template(TStruct_AtCommand *MyAtCommand, uint8_t CmdAnswer, bool IsUnsolicited, uint8_t RepeatCmd, uint16_t RepeatAnswer, bool ClearAnswerBuf);
Пример для AT+CIFSR:
AtOp_Template(AtCommand, cCmdData, TRUE, 3, 30, TRUE); - Ищем данные без префикса, подтверждающий OK не требуется, 3 повтора при неответе, ищем ответ 30 циклов, очистить перед посылкой буфер ответов;
3. Регистрируется у вас долго, но это зависит от оператора.
|
|
|
|
|
May 26 2015, 06:59
|
Участник
Группа: Участник
Сообщений: 33
Регистрация: 6-05-15
Пользователь №: 86 547
|
RadikX, спасибо! 1. Не хватает "Life", UMC это МТС нынешний? 2. На сколько я понял 0x0D 0x0A обрамляются все ответы модема. При этом с 2х сторон непосредственно ответа. Короче мне пока не ясно это дело. 3. Записывал на логическом анализаторе пакеты в обе стороны. Внимательно анализировал результаты. Судя по результатам все более менее ок.
|
|
|
|
|
May 27 2015, 04:38
|
Участник
Группа: Участник
Сообщений: 33
Регистрация: 6-05-15
Пользователь №: 86 547
|
Цитата(RadikX @ May 27 2015, 03:10) Life - это торговая марка Астелит. а UMC - да, МТС до ребрендинга. Правила формирований команд и ответов, а также базовый набор АТ-команд подробно описаны в документе "ITU-T Recommendation V.25 ter". В 99% процентах ответы обрамляются с двух сторон "концевиками" 0x0D 0x0A. Есть еще 1% который надо особо разбирать (вроде приглашение ввода при отправке SMS), ну да бог разработчикам протокола судья. Да. Спасибо. По поводу ответов модема: здорово что обрамляются с 2х сторон 0x0D 0x0A, это и правда замечательно! Я только не совсем понял почему для одной из команд в ответе нет "ОК" Хорошо, это не главная часть ракеты так сказать, разберемся.
|
|
|
|
|
Aug 26 2015, 18:41
|
Участник
Группа: Участник
Сообщений: 33
Регистрация: 6-05-15
Пользователь №: 86 547
|
Доброго времени! Пилю проект с модемами SIM900R. Столкнулся с такой траблой: время от времени в открытой UDP сессии происходит смена номера порта. То есть, IP не меняется, а вот порт меняется. Так происходит если модем ничего не передает/принимает в течении приблизительно >8с. Это я так понимаю нормально? У меня устройство выходит на связь с сервером реже (30с). Сервер отмечает у себя текущий слот с которого обратился модем. К тому времени когда мне необходимо обратится к модему/устройству данные по слоту(порту) устаревают. Получается мне необходимо все время поддерживать линк отправкой/получением пакета только для того чтоб менялся порт слота? Спасибо!
Сообщение отредактировал ISG2015 - Aug 26 2015, 18:42
|
|
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|