Jump to content

    

Модуль SIM800 не отвечает на команды

Остается только загадка, почему модуль игнорирует оператора TELE2 - вообще не видит его в эфире....
Возможно, разгадка в этом:

модуль из Китая
М.б. партия не для продажи в Европу. Tele2 - он же европейский по происхождению?

(upd)

<\n>+CMGR: "REC UNREAD","245656p696+656","","18/07/30,16:41:26+12"<\r><\n>0204400435043700200031002D00350020043C0438043D04430442002E002004150441043B043

80020044D0442043E0433043E0020043D04350020043F0440043E04380437043E043904340435044

2

002C0020043F04350440043504370430043304400443043704380442043500200443044104420440

0

43E0439044104420432043E002E<\r><\n><\r><\n>OK<\r><\n>

Это кусок (конец?) SMS:

рез 1-5 минут. Если этого не произойдет, перезагрузите устройство.

Что-то надо было сделать.

Share this post


Link to post
Share on other sites

А какой вообще список сетей выдает модем с нормальной сим-картой? Я, например, за SIM800C заметил странность, что он иногда выдает ID сети вместо её имени (даже если настраиваешь вывод имени, я не ID). Может Tele2 есть в списке, но в виде ID. Просто как идея.

Edited by Grigorij

Share this post


Link to post
Share on other sites
Что-то надо было сделать.

Просто карту нужно было заменить)

 

Может Tele2 есть в списке, но в виде ID. Просто как идея.

Похоже так и есть.

Но факт остается фактом, с теле2 тоже нет коннекта, и, в отличие от предыдущей карты, попытки подключиться к сети быстро прекращаются.

Share this post


Link to post
Share on other sites
Но факт остается фактом, с теле2 тоже нет коннекта

 

Мы не поддерживаем 2G в Москве и Московской области

Пользоваться связью Tele2 в Москве и Московской области получится только если ваш телефон поддерживает 3G или 4G.

https://msk.tele2.ru/help/article/coverage

Share this post


Link to post
Share on other sites

Владивольт, окститесь, жизнь есть и за пределами МКАД. И интернет с электричеством тоже). То что я замкадыш, вытекает хотя бы из того, что у меня есть симкарта ТЕЛЕ2)

 

Grigoij, а проясните еще один практический момент, как рациональнее организовать обмен данными на микроконтроллере? Я ведь не только отправляю команды, но и принимаю различную информацию от модуля, а она может быть разной. И прийти ее может много. Скажем, контроллер занимается какими-то делами, а ему подряд приходит неколько сообщений RING.

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

Просто интересно, какой принцип хорошо зарекомендовал себя на практике?

Edited by zheka

Share this post


Link to post
Share on other sites
Владивольт, окститесь, жизнь есть и за пределами МКАД. И интернет с электричеством тоже).

Все равно было бы неплохо уточнить, поддерживает ли данный оператор в вашем регионе 2G. Сейчас идет тенденция на сворачивания 2G, чтобы освободить частоты под 4G. Мы уже на такое нарвались и сейчас обновляем приборы в некоторых странах.

 

Grigoij, а проясните еще один практический момент...

 

Однозначной рекомендации здесь наверное нет. Расскажу как примерно у меня все то дело работает.

 

Для обмена сообщенями я используют 2 буфера (один Rx, другой Tx) доступ к которым идет через DMA. Т.е. в явном виде взаимодействия с UART нет. Далее в программе есть отдельная задача (софт построен на базе FreeRTOS), которая отвечает за работу с GSM модемом. Сама эта задача представлена в виде машины состояний. В простом варианте у меня всего 5 состояний:

 

idle (вообще ничего не делаем)
инициализация модема (включаем модем и отправляем набор команд для настройки модема)
регистрация в сети (регистриуемся в сети)
TCP соединение (обрабатываем входящие/исходящие пакеты)
выключение (корректно выключаем модем AT командам и выключаем питание)

 

Каждое состояние (кроме TCP соединения) работает по примерно следующему сценарию:

 

если первый раз зашли в это состояние, то
    отправить первую AT команду
    инициализировать таймер для отслеживания timeout на ответ модема
    отдать управление FreeRTOS
если повторно зашли в это состояние (ну т.е. FreeRTOS нам управление вернула), то
    проверить, нет ли чего в буфере, а если есть, то обработать (например, перейти в следующее состояние
    или отрпавить какое-нибудь сообщение основной задаче)
    проверить не сработал ли timeout (например, модем не отвечает)

 

TCP соединение работает несколько иначе. Я сейчас отказался от стека внутри модема и использую LWIP. Это состояние работает по примерно следующему сценарию:

 

проверить, есть ли какая команда от главной задачи (например на выключение модема)
если команда есть - выполнить ее
если команды нет, то считать все, что есть в буфере и отправить это в LWIP на обработку

 

Вроде не сильно запутанно написал.

 

Еще надо учесть пару моментов. Во-первых, для модема у меня выключены URC. Это позволяет исключить "внезапный" набор каких-либо сообщений от модема. Т.е. получается система "запрос-ответ". Это позволяет легко определить, ждем мы что-нибудь от модема или нет. Во-вторых, мне нет необходимости обрабатывать СМСки или входящие звонки. С другой стороны наличие входящей СМС можно проверить по запросу, а такой поведение легко добавляет в машину состояний, описанную выше. А для входящего звонка обычно есть еще и отдельны вывод у модема, который о нем сигнализирует.

 

 

Share this post


Link to post
Share on other sites
причина в программе - с Terminal 1.9 не работает. Галка CR=CR+LF установлена.

Заработало с каким-то терминалом встроенным в Codevision AVR. Но он неудобный.

Putty у меня не запустился.

Какой еще терминал посоветуете? Или что делать с Terminal 1.9. ... я там жал куда можно только..

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

https://alex-exe.ru/programm/universal-terminal-st/ "

В ближайшее время выложу там терминал с новыми плюшками

Edited by ДЕЙЛ

Share this post


Link to post
Share on other sites
В своё время тоже озадачился поиском удобного терминала, но в итоге написал его сам. Терминал и описание здесь

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

Почему так криво с элементами GUI?

Почему только 115200 максимум?

Почему в окне выбора COM-порта присутствуют несуществующие в системе порты и отсутствуют существующие?

post-38713-1533118307_thumb.png

Share this post


Link to post
Share on other sites

Тема жива еще, коллеги?

У меня странная проблема нарисовалась... то ли я перемудрил и затупил, то ли просто чего-то не понимаю.

Ситуация такая: собрал схему своего устройства в протеусе, USART повесил на COMPIM, а к реальному порту подключил сам модуль SIM800L. В протеусе параллельно USART прицепил терминал, чтобы видеть обмен и вмешиваться в него при необходимости. Так вот, чудеса творятся: команды, вводимые вручную в терминале модуль понимает и отрабатывает. Команды, которые шлет микроконтроллер - не понимает, на все команды либо вообще не отвечает, либо отвечает ERROR. 

Обмен побайтно полностью идентичный и в ручном и в автоматическом режиме, скорость 9600. В чем может быть проблема?

Кстати, почитал тут тему - что-то странное вы пишите... команды в SIM800 надо отправлять без '\n', только '\r'. Когда я слал команды с '\r\n', модуль ругался.

Share this post


Link to post
Share on other sites
В 31.07.2018 в 17:58, Grigorij сказал:

Во-первых, для модема у меня выключены URC. Это позволяет исключить "внезапный" набор каких-либо сообщений от модема. Т.е. получается система "запрос-ответ". Это позволяет легко определить, ждем мы что-нибудь от модема или нет. Во-вторых, мне нет необходимости обрабатывать СМСки или входящие звонки. С другой стороны наличие входящей СМС можно проверить по запросу, а такой поведение легко добавляет в машину состояний, описанную выше. А для входящего звонка обычно есть еще и отдельны вывод у модема, который о нем сигнализирует.

Кстати, по этому тоже хотел бы посоветоваться. 

Я тоже с RTOS звамутил, только немного не так. У меня URC наоборот, активно заействованы: при приеме по прерываниям от модуля сразу проверяется наличие в потоке символа '\r", и как только он получен - выдается строка от предыдущего '\r'. Выдается в виде сообщения RTOS, где задача-диспетчер разбирает ответ и вызывает один из зарегистрированных обработчиков уведомлений. Все вроде хорошо, беда только с +UCSD и +CMGR: эти уведомления могут выдать данных больше, чем у меня кольцевой буфер... Поэтому приходится извращаться. Ну и забадывают постоянные ОК в ответ...

P.S. все вышеописанное отрабатывает "вручную", а вот в автомате заклинило на той проблеме, что написал: модуль SIM800 не принимает команды напрямую от МК...

Share this post


Link to post
Share on other sites
В 11.02.2019 в 11:30, ARV сказал:

команды, вводимые вручную в терминале модуль понимает и отрабатывает. Команды, которые шлет микроконтроллер - не понимает, на все команды либо вообще не отвечает, либо отвечает ERROR. 

Обмен побайтно полностью идентичный и в ручном и в автоматическом режиме, скорость 9600. В чем может быть проблема?

 

Значит, не полностью идентичный. Для начало вообще отключите автодетект скорости (он, кстати, может вызвать проблемы при отсутствии пауз между командами). Второе - эхо есть ? Соответствует переданному ? Ну и наконец - когда есть сомнение, надо проверить посылки от контроллера терминалом, но если на первый взгляд нормально, этим не ограничиваться. А проверить еще и скопом, а на самом деле удобнее всего копеечным анализатором, клоном saleae logic. Чудес-то не бывает...

 

И спрашивать лучше в профильном разделе (по интерфейсам), там больше шансов на компетентный ответ...

Edited by rx3apf

Share this post


Link to post
Share on other sites

Для начала, если уж Вы не хотите (не привыкли, и "это мне чуждо") аппаратно проверить, что происходит на "входе" модема,

то просто отключите временно SIM и поставьте перемычку на Tx-Rx компорта. Затем в протеусе проверьте, что отосланное на USART приходит обратно в неискаженном виде. 

Вообще, при постояннной работе с модемом, "кашерно" иметь аппаратный мониторный RS232 (обычно это 2-портовая плата NETMOS) и нуль-модемный кабель. 

В качестве терминала прекрасно обхожусь QModem Pro, которой уже столет. Есть отладочный режим с выдачей HEX. Недостаток только один - порты должны быть в интервале 1...9

 

Share this post


Link to post
Share on other sites
12 минут назад, rx3apf сказал:

Значит, не полностью идентичный.

Полностью идентичный. В процессе экспериментов выяснил, что простые задержки между отправляемыми байтами решают проблему. В настоящий момент задержки по 10 мс, и модуль все отлично понимает. Продолжаю разбираться в причинах. Грешу на многоступенчатость связи модуль-->протеус-->мой код. Тем более что модуль через переходник на крайне глючном клоне Prolific - замучился уже... драйвер периодически либо в BSOD выбивает систему, либо тупо перестает работать до перезагрузки системы... 

Вскоре планирую приступить к тестированию в реальном железе - вероятно, все глюки пропадут, и задержки не потребуются...

Только что, k155la3 сказал:

Вообще, при постояннной работе с модемом, "кашерно" иметь аппаратный мониторный RS232

Я ж любитель, стараюсь обходиться тем, что есть... А на все приблуды уже и USB не хватает. И каждая приблуда со своими выкрутасами. Тот же клон Selae Logic то не хочет работать, то хочет, и что ему не так - не ясно.

Share this post


Link to post
Share on other sites
3 hours ago, ARV said:

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

типичный для "железного" софта симптом, когда в USART грузят на передачу следующий байт, не проверив (или неправильно проверив) что регистр данных передачи USART свободен. 

Читая Вашу подпись к аватарке, "возьмите сразу" :)

STLabs

1077429.jpg

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this