Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не всегда регистрируется и не выключается SIM300D.
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Сотовая связь и ее приложения
Mingrief
Здравствуйте, уважаемые.

Перед описанием неисправности пару слов о правильной работе моего изделия.
Итак, имеем спаянные на заводе платы с модулем SIM300DZ (1008B14SIM300D32_SST34HF3284). После прошивки микроконтроллера включаю устройство для проверки, при этом работа с модулем проходит следующим образом:
1. Включение модуля через PWRKEY (контроль STATUSа);
2. Инициализация модуля;
3. Проверка наличия сим-карты, считывание записной книжки;
4. Ожидание регистрации в сети (если нет, то по таймауту в 30с выкл. модуль, пауза 2с и в п.1.);
5. Дальнейшая работа (звонки, передача данных).
На данный момент из 30 шт. проверенных таким образом приборов с первого раза правильно заработали только 20.

Остальные 10 непонятно ведут себя с п.4:
4. Ожидание регистрации в сети. Модуль не регистрируется в сети, постоянно идет обмен командами
Код
AT+CPAS // запрос на регистрацию

+CPAS: 2 // модуль не готов отвечать на инструкции

OK
AT+CPAS

+CPAS: 2

OK

Выходит таймаут в 30с, после чего микроконтроллер должен отключить модуль через PWRKEY, затем пауза 2с и повторить все с п.1.
НО! модуль не реагирует на операцию выключения через PWRKEY, при этом светодиод NET мигает 1 раз в 3с (найдена GSM сеть).

Фокус в том, что если снять питание в ручную и снова подать питание, то модуль начинает _правильно_ работать с этой попытки и впредь такое больше не повторяется. Пробовал включить/выключить модуль раз 10 подряд - все равно работает правильно. Если я отключаю антенну и повторяю эксперимент в надежде повторить глюк по истечению таймаута, то все равно модуль правильно отключается и затем снова правильно включается.
Т.е. этот глюк появляется в 30% устройств и только один раз при первом включении.

Железо.
SIM300D питается от 4В, МК от 3.3В, согласование сигналов TxD, DTR, RTS через резисторы 240 Ом, PWRKEY включен через транзистор с открытым коллектором, до включения и перед выключением модуля выводы МК переводятся в третье состояние.
Harbinger
Видимо, "затыкаются" на считывании записной книжки или ещё чего-то из SIM-карты.
А если тайм-аут на регистрацию увеличить? 30 с иногда мало.
Budek
Немного не по теме, но хочу поведать еще об одной вещи.
Несколько модулей из последней партии при подаче питания не хотят видеть данные по uart (хотя в остальном полностью работают и даже выдают ring при дозвоне на них). Помогает только снятие питания на 30 секунд (естественно, после выключения через powerkey), но далеко не с первого раза (почему то напряжение на модуле продолжаем очень медленно падать (за 30 секунд может упасть до 2В, а может почти до нуля). Сразу скажу, левой подпитки никакой нет (специально тупо отпаял uart). Пришлось поставить резистор на 4,7К для ускорения разрядки конденсатора (у меня стоит 1000мкФ) . Правда, питание было 4,35В (вроде CADILO как то писал, что последние модули не хотят включаться при 4,4В (но ведь у меня полностью работают, за исключением входа uart). Уменьшил до 4,2В. Пока ,вроде запускается устойчиво.
Mingrief
Цитата(Budek @ Nov 12 2008, 21:34) *
Немного не по теме, но хочу поведать еще об одной вещи.
Несколько модулей из последней партии при подаче питания не хотят видеть данные по uart (хотя в остальном полностью работают и даже выдают ring при дозвоне на них). Помогает только снятие питания на 30 секунд (естественно, после выключения через powerkey), но далеко не с первого раза (почему то напряжение на модуле продолжаем очень медленно падать (за 30 секунд может упасть до 2В, а может почти до нуля). Сразу скажу, левой подпитки никакой нет (специально тупо отпаял uart). Пришлось поставить резистор на 4,7К для ускорения разрядки конденсатора (у меня стоит 1000мкФ) . Правда, питание было 4,35В (вроде CADILO как то писал, что последние модули не хотят включаться при 4,4В (но ведь у меня полностью работают, за исключением входа uart). Уменьшил до 4,2В. Пока ,вроде запускается устойчиво.

Может быть и по теме, я тоже наблюдал такое, как раз вот в своем же глюке - первые 30...60с модуль не отвечает на АТ-команды. Выглядит это так, МК на всех скоростях начиная с 1200 и заканчивая 115200 pbs передает по три команды "АТ" пока модуль не ответит, если весь ряд скоростей пройден и связь не установлена, то откл/вкл через PWRKEY, пауза 2с и снова повтор.
Через 30...60с таких синхронизаций модуль с очередного включения нормально отвечает, но тут начинается вышеописанный глюк с "нерегистрацией в сети".
И опять же это происходит ТОЛЬКО ОДИН РАЗ. Все последующие включения проходят "на ура".

А как у вас с повторяемостью глюка?
Mingrief
Думал, может операция внутрисхемного программирования МК всему виной, оказалось что нет.
Из партии тех, что заработали со второго раза взял 5шт, перепрошил и включил - пошли с первого раза. Не могу никак заставить их глючить снова.
Это вроде бы хорошо, но как-то не спокойно.
Budek
У меня программа ждет пока модуль оживет (в данном случае хотя-бы начнет принимать команды) секунд 30. Потом передергивает питание (конечно перед этим нажав на powerkey). Без питания держит секунд 30. Так вот, бывает запустится со второго раза, а один раз ждал не менее получаса (выходит раз 30 пытался запуститься), так и не дождался, выключил вообще блок питания и снова включил, запустился сразу.
M_Z
Цитата(Mingrief @ Nov 13 2008, 11:04) *
Может быть и по теме, я тоже наблюдал такое, как раз вот в своем же глюке - первые 30...60с модуль не отвечает на АТ-команды. Выглядит это так, МК на всех скоростях начиная с 1200 и заканчивая 115200 pbs передает по три команды "АТ" пока модуль не ответит, если весь ряд скоростей пройден и связь не установлена, то откл/вкл через PWRKEY, пауза 2с и снова повтор.

А зачем перебирать скорости обмена
Я по умолчанию использую 115200. Проблем с обменом не замечал. Может перебом скоростей голову дуоите модулю?
Mingrief
Цитата(M_Z @ Nov 13 2008, 15:25) *
А зачем перебирать скорости обмена
Я по умолчанию использую 115200. Проблем с обменом не замечал. Может перебом скоростей голову дуоите модулю?

Еще до меня разработчики использовали Q2403A кажется, так вот работали на одной скорости по умолчанию, потом им стали приходить модули с установленной другой скоростью. Как и что я уже не узнаю, но учитывая такое дело решил перестраховаться и сканировать на разных скоростях, чтобы уж наверняка. А есть негативный опыт с таким подходом?
Harbinger
Цитата(Mingrief @ Nov 13 2008, 15:54) *
Еще до меня разработчики использовали Q2403A кажется, так вот работали на одной скорости по умолчанию, потом им стали приходить модули с установленной другой скоростью.

9600 и 115200.
По даташиту скорость по умолчанию у Q2403A - 9600. Но со 115200 - да, встречались, и много. Как по мне, оно и к лучшему - всё равно в изделии при первом включении, если не отвечали на этой скорости, то переводились на неё.
Budek
Возникла мысль (тупая вроде, но учитывая адрес производителя sim, думаю имеет право на жизнь).
Может модуль начинает тупить, если при включении начать общаться с ним не на его "родной" скорости 115200. У меня в программе скорость не перебирается, работаю на 38400. Как назло, теперь глюк исчез (я думаю, из-за уменьшения питалова с 4,35 до 4,2 (писал ранее). Но вы, наверное, имеете возможность протестировать, работая ТОЛЬКО на 115200.
Harbinger
Цитата(Budek @ Nov 13 2008, 17:28) *
Но вы, наверное, имеете возможность протестировать, работая ТОЛЬКО на 115200.
Да почему, собственно. Можно и на любой другой, 38400 так 38400... только момент. Первое, что с ним сделаю, это: AT+IPR=38400;&W. Чтобы после сброса гарантированно работал именно на этой скорости.
(В прошивках под Spansion версий вплоть до 13-й происходили в этом плане чудеса, ещё как-то на AT+CFUN завязанные - скорость вовсе не обязательно запоминалась; подозреваю, что с SST то же самое. Начиная с 14, не замечал неадекватностей).
CADiLO
>>>В прошивках под Spansion версий вплоть до 13-й происходили в этом плане чудеса

Да, там было чудилово если AT+IPR=0.

А вот это работало правильно не когда AT+IPR=38400;&W, а так
AT+IPR=38400
AT&W
и выключить-включить.
M_Z
Цитата(Mingrief @ Nov 13 2008, 17:54) *
Еще до меня разработчики использовали Q2403A кажется, так вот работали на одной скорости по умолчанию, потом им стали приходить модули с установленной другой скоростью. Как и что я уже не узнаю, но учитывая такое дело решил перестраховаться и сканировать на разных скоростях, чтобы уж наверняка. А есть негативный опыт с таким подходом?

просто в даташите на SIM300D есть запись
Serial Port supports the communication rate as following:
300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 Default as 115200bps.
Поэтому я не искал приключений и использовал 115200
Ну а если вдруг по умолчанию пойдут другие скорости, начиная с какой то версии, то многие настройки в том числе и скорость обмена с SIMом програмируется по последовательному интерфейсу имеющемуся в устройстве.
И потом при последующей компиляции программы по умолчанию будет другая скорость.
PIC_Embedder
Цитата(M_Z @ Nov 14 2008, 16:24) *
просто в даташите на SIM300D есть запись
Serial Port supports the communication rate as following:
300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 Default as 115200bps.
Поэтому я не искал приключений и использовал 115200

Тоже использовал скорость 115200. Потом перевел на 9600. При более низкой скорости, допустим больший разброс частоты тактового генератора. Решил, что так будет надежнее.
Mingrief
Цитата(Mingrief @ Nov 13 2008, 09:04) *
Может быть и по теме, я тоже наблюдал такое, как раз вот в своем же глюке - первые 30...60с модуль не отвечает на АТ-команды. Выглядит это так, МК на всех скоростях начиная с 1200 и заканчивая 115200 pbs передает по три команды "АТ" пока модуль не ответит, если весь ряд скоростей пройден и связь не установлена, то откл/вкл через PWRKEY, пауза 2с и снова повтор.
Через 30...60с таких синхронизаций модуль с очередного включения нормально отвечает, но тут начинается вышеописанный глюк с "нерегистрацией в сети".
И опять же это происходит ТОЛЬКО ОДИН РАЗ. Все последующие включения проходят "на ура".

А как у вас с повторяемостью глюка?


Наврал с алгоритмом установки скорости.
Начинается синхронизация с отправки трех команд АТ на скорости 9600, если неудачно, то тогда переходит на скорость 115200 и т.д. до скорости 1200. Если модуль ответил на одной из скоростей, то на ней производится запись "AT+IPR=9600" - установка на 9600. Т.о. при следующем включении и впредь модуль будет работать на 9600 бит/с. Скорее всего в этом вся магическая закономерность "первого раза".
Теперь осталось разобраться почему модуль "подвисает" если в нем установлена 115200, а обращаются к нему на 9600.
CADiLO
Запросите модуль AT+IPR?
Последние модули (с SST) идут после исправления ошибок с IPR=0 - автоопределение. Причем сами китайцы рекомендуют при первом включении перейти на фиксированую скорость и не использовать автобандинг.
Mingrief
Цитата(CADiLO @ Nov 14 2008, 16:22) *
Запросите модуль AT+IPR?
Последние модули (с SST) идут после исправления ошибок с IPR=0 - автоопределение. Причем сами китайцы рекомендуют при первом включении перейти на фиксированую скорость и не использовать автобандинг.


Сейчас пока не проверю, все имеющиеся в наличии симкомы уже включил, а значит записал в них скорость 9600.
НО! Одно такое глючное включение записал в *.wav файл, и новость об автобаудрейте кое что прояснила.

Вот что записано.
1. МК шлет в модуль по три команды АТ на 9600, 115200 ... 1200, от модуля нет ответов, рестарт.
2. п.1 повторяется 4 раза.
3. МК шлет в модуль АТ на скорости 9600 и сразу получает ответ - вот он, оказывается автобауд где smile.gif
4. Дальше инициализация модуля, безуспешный запрос на регистрацию и, как писалось выше, зависон до ручного выключения питания с игнорированием выключения через PWRKEY.

Может для автоопределения скорости трех команд АТ мало?
CADiLO
Если нет разброса в скорости у меня на вторую (при любой начальной скорости) уже приходит OK.
Вот только что прошелся терминалом.
Budek
А может некоторым модулям не нравится иногда нарастание питающего напряжения при включении блока питания? Специально проделывал следующее: у меня питается от LM2576 (4,2В), емкости - 1000 до и 2000 после ключа, временно отключил uart от МК. Включаю блок питания в сеть, жму руками powerkey, подключаю после этого шнурок к компу. Часто бывало, что модуль не принимал AT команды (но при дозвоне на него RING отсылал). Отключение через powerkey, снятие питания с модуля (у меня через ключ IRLML6202) ни к чему не приводило. Но стоило выдернуть розетку 220В, потом воткнуть снова и модуль уже мог запуститься с первого раза.
Я уже писал до этого, что происходило при питании модуля 4,35В, как только снизил до 4,2В добиться зависания не могу, работает железно.
И еще, пока писал, сам обратил внимание на очень важную вещь: у меня МК и терминалка на 38400, но в программе я никогда не устанавливал этой скорости (как писал CADILO, со второго запроса на AT отвечает OK). Так вот, когда модуль не реагировал на команды (я пытался их вводить вручную) на звонок он отвечал RING на скорости 38400, а ведь по идее должен на 115200. То есть он их видел (настроил же скорость на 38400), но не отвечал. Сейчас думаю, надо было попробовать дать ему ATD..., похоже позвонил бы.
Сейчас думаю снова поднять питание до 4,35В, потерзать его.
stream
Цитата(Mingrief @ Nov 14 2008, 18:56) *
1. МК шлет в модуль по три команды АТ на 9600, 115200 ... 1200, от модуля нет ответов, рестарт.
Может для автоопределения скорости трех команд АТ мало?

Там настолько кривой автободер, что мне, как человеку, сделавшего несколько модемов, просто не понять, КАК так можно извратиться.

Делай так:
1) Сначала шли на 115200 - ее он, если в автободе, хватает лучше всего
2) Посылаешь AT и ждешь ответа.
3) Если модуль молчит - ЖДЕШЬ СЕКУНДЫ ТРИ и потом посылаешь AT на той же скорости ЕЩЕ РАЗ.
4) Если опять молчит - тогда уже начинаешь перебирать скорости.

Эти магические таймауты меня просто убили. Прочее шаманство типа сдублированной буквы "A" не помогает. А еше, если слать в модуль, пребывающий в такой позе, много всяких буков, можно получить совершенно шизофренические ответы вплоть до перезагрузки.
Baser
Цитата(Mingrief @ Nov 14 2008, 16:56) *
Может для автоопределения скорости трех команд АТ мало?

Цитата(stream @ Nov 15 2008, 20:17) *
Там настолько кривой автободер, что мне, как человеку, сделавшего несколько модемов, просто не понять, КАК так можно извратиться.

Угу, китайцы это сами признают, рекомендуя сразу установить фиксированную скорость и не мучиться smile.gif

Действительно, таймауты должны быть по нескольку секунд и на низких скоростях автободинг работает плохо. Сначала китайцы обещали работу от 1200 бит/с и выше, сейчас эту цифру подняли до 4800 и выше. Но все равно на 4800 работает отвратно.
Мучая модем в ручном режиме, сам пару раз наблюдал, как ответ ОК приходил только после четвертого АТ. И это при точном кварце. При разбросе частот (в пределах допустимых 3%) UART модема вообще плохо работает.
Mingrief
Цитата(stream @ Nov 15 2008, 20:17) *
А еше, если слать в модуль, пребывающий в такой позе, много всяких буков, можно получить совершенно шизофренические ответы вплоть до перезагрузки.

Кстати, я вот подумал, что в связи с необходимостью править прошивку нужно добавить в нее идентификатор - номер или дату сборки, чтобы отследить какая из моих прошивок глючит с какой версией симкома. Для контроля версии симкома всегда отправляю ATI, а как слать в туже шину свои символы и не повесить при этом модем? Можно конечно и просто слать, в ответ по идее должно прийти "ERROR", но при этом модуль может и повиснуть. Может есть какая-нибудь АТ-команда с передачей не особенно важного текста в модуль?
stream
Цитата(Mingrief @ Nov 16 2008, 14:50) *
Для контроля версии симкома всегда отправляю ATI, а как слать в туже шину свои символы и не повесить при этом модем? Можно конечно и просто слать, в ответ по идее должно прийти "ERROR", но при этом модуль может и повиснуть.

Если модуль нормально встал на скорость, то уже не повиснет, честно ответит ERROR. Или шли что-то типа ATI999, этому модулю по фигу, какой там параметр после ATI, он всегда отвечает одинаково.
M_Z
Цитата(Budek @ Nov 14 2008, 20:30) *
А может некоторым модулям не нравится иногда нарастание питающего напряжения при включении блока питания? Специально проделывал следующее: у меня питается от LM2576 (4,2В), емкости - 1000 до и 2000 после ключа, временно отключил uart от МК.

Емкость после ключа 2000 я бы не ставил. до ключа да, желательно побольше. После ключа я ставлю 100мкФ а то и меньше. сопротивление ключа мало и падение на нем даже при токах 2А невелико. а вот наростание питания будет быстрым.
реально я пока не замечал проблем с обменом между контроллером и СИМ300. хотя если умножить количество работающих устройств на время их работы то получтися не один десяток лет. т.е. статистика довольно большая. что касается скоростей обмена то я использую 115200. после включения модуля я жду от него ответа о регистрации в сети. И потом шлю в него команды инициализации модема и GPRS.
Mingrief
Итак, все решилось.
Причина глюка - невнимательное прочтение даташита. Там в главе про автобауд написано, что перед отправкой первой АТ нужно выждать 3...5 с. У меня было около 1с.
Провел эксперимент, установил на 10 модулях (тех что висли раньше) автобауд и включил их со своей (теперь уже старой) прошивкой, как и ожидалось из 10 повесилось 6.
Снова установил автобауд в тех же модулях, а в своей проге поставил задержку перед первой АТ в 3 с и все 10 модулей пошли как дети в школу.
Большое спасибо всем ответившим за помощь. В данном случае к симкому никаких претензий, сам во всем виноват.
P.S. Идентификатор поставил сразу после синхронизации с модулем, он честно выдает ERROR smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.