Полная версия этой страницы:
SIM20
Пишу программу для коммуникации через SIM20 в режиме команд.
Режим команд выбрал, для более гибкой работы с несколькими адресатами, а также для того, чтобы не было задержек ожидания передающего буфера.
1) Хотелось бы уточнить у знатоков, в каком порядке будут поступать данные от SIM20, если мой запрос на выполнение AT-команды совпадет с моментом получения данных от удаленного источника:
- Может ли ответ на АТ-команду "разорваться" вставкой полученных данных или они все же будут поступать последовательно друг за другом?
- При последовательном поступлении данных от SIM20 есть ли какой-либо проритет между отработкой AT-команд или приема данных от удаленного устройства?
2) Как обычно определяется скорость работы если устройство (в данном случае SIM20) может конфигурироваться. Поясню, у SIM20 "заводская скорость" - 115kbps, однако она может меняться по усмотрению пользователся. Т.е. я по включению должен все таки определить на какой скорости сейчас работает устройство и подстроить ее под себя, мало ли что мог поменять производитель или где до меня был этот SIM20? Как обычно поступают в таких случаях, по включению проверяются все скорости, пока не найдется нужная и уже на ней устройство, при необходимости, переконфигурируется на нужную скорость?
Цитата(Yaumen @ Oct 1 2013, 15:10)

Пишу программу для коммуникации через SIM20 в режиме команд.
Режим команд выбрал, для более гибкой работы с несколькими адресатами, а также для того, чтобы не было задержек ожидания передающего буфера.
1) Хотелось бы уточнить у знатоков, в каком порядке будут поступать данные от SIM20, если мой запрос на выполнение AT-команды совпадет с моментом получения данных от удаленного источника:
- Может ли ответ на АТ-команду "разорваться" вставкой полученных данных или они все же будут поступать последовательно друг за другом?
- При последовательном поступлении данных от SIM20 есть ли какой-либо проритет между отработкой AT-команд или приема данных от удаленного устройства?
2) Как обычно определяется скорость работы если устройство (в данном случае SIM20) может конфигурироваться. Поясню, у SIM20 "заводская скорость" - 115kbps, однако она может меняться по усмотрению пользователся. Т.е. я по включению должен все таки определить на какой скорости сейчас работает устройство и подстроить ее под себя, мало ли что мог поменять производитель или где до меня был этот SIM20? Как обычно поступают в таких случаях, по включению проверяются все скорости, пока не найдется нужная и уже на ней устройство, при необходимости, переконфигурируется на нужную скорость?
1. Нет. Не замечал.
2. "заводская скорость" у сим20 -9600 (реально и по даташит), но китайцы могут всё ;-)
Цитата(ssokol @ Oct 1 2013, 14:40)

2. "заводская скорость" у сим20 -9600 (реально и по даташит), но китайцы могут всё ;-)
Вопрос был в другом. Как правильнее начинать работать с модулем, скорость которого могла быть изменена до вставки в Ваше изделие. Перебирать все скорости, пока SIM20 не ответит на одной из скоростей?
Цитата(Yaumen @ Oct 1 2013, 15:55)

Вопрос был в другом. Как правильнее начинать работать с модулем, скорость которого могла быть изменена до вставки в Ваше изделие. Перебирать все скорости, пока SIM20 не ответит на одной из скоростей?
Имхо прочитать даташит или спросить у официала.
Sergey SN
Oct 3 2013, 12:50
Цитата(Yaumen @ Oct 1 2013, 15:55)

Вопрос был в другом. Как правильнее начинать работать с модулем, скорость которого могла быть изменена до вставки в Ваше изделие. Перебирать все скорости, пока SIM20 не ответит на одной из скоростей?
Можно и так. Но чаще всего модули поставляются предпрошитыми с установленной скоростью 9600 (реже) и 115200 bps (чаще). Кто бы после этого не юзал модуль и на какой бы его скорости не оставил - аппаратный RESET должен откатить его на заводские (прошивочные) установки по умолчанию. Т.е. - на одну из этих скоростей. • AT+SRDRESET =1 Reset after 1s without change any pre-set parameters
• AT+SRDRESET=0 Reset after 1s ,SIM20 parameters set to default
• All AT command send to SIM20 should be finished by "RETURN" ( ASCII HEX =
OD
Также однозначно поможет перепрошивка модуля, где вы заранее выберете нужную скорость.
Кстати, а что отвечает такой модуль на команду AT? Большинство SIMCom-вских модулей на такой запрос отвечает независимо от предустановленной скорости и после такого ответа есть возможность уточнить не какой он стоит сейчас, либо принудительно навязать ему нужную Вам скорость и уже после этого "вправить мозги" так, чтобы Ваша настройка оставалась у него по умолчанию.
Цитата(Sergey SN @ Oct 3 2013, 16:50)

Кстати, а что отвечает такой модуль на команду AT? Большинство SIMCom-вских модулей на такой запрос отвечает независимо от предустановленной скорости и после такого ответа есть возможность уточнить не какой он стоит сейчас, либо принудительно навязать ему нужную Вам скорость и уже после этого "вправить мозги" так, чтобы Ваша настройка оставалась у него по умолчанию.
На АТ сим20 ответит ЕРРОР тк такой команды у него нет. (1029 1044). Хотя можно и по ЕРРОР определять скорость НО тогда и стоповые биты и четность и размер данных перебирать надо , причем замечал , что если неправильно выбрать стоповые - работает , но с ошибками.
Aurochs
Oct 5 2013, 09:59
Цитата(ssokol @ Oct 3 2013, 17:34)

причем замечал , что если неправильно выбрать стоповые - работает , но с ошибками.
1 или 2 стоп-бита фактически определяют паузу между двумя последовательно выдаваемыми байтами. Если работает с 1, то тем более должно работать, если установить 2.
Опыт работы с отладочными модулями SIM20-TE говорит о том, что модуль на команду на неправильной скорости не ответит ничего, так как фактически он ничего не примет. Так что придется перебирать скорость, но это не беда.
Мне сложнее написать код для работы, так как опыта работы именно с АТ командами маловато. Вот вопросы, которые возникают:
1. При работе в режиме команд в момент пока я отправляю AT команду к SIM20, он может получить данные от удаленного устройства, т.е. фактически ожидая ответа на АТ команду, гипотетически, я могу получить в начале принятые удаленные данные, а лишь затем ответ на АТ команду. Т.е. в процедуре отбработки ответа на АТ команду, необходимо уметь вычленять собственно ответ и данные. Причем удаленные данные необходимо куда-то временно складывать, чтобы затем другой процедурой заняться их анализом.
2. Каким образом отслеживать окончание ответа на АТ команду: поиск некоего ключевого слова, типа OK или ERROR или по возникновении определенной паузы в передаче ответа от модуля SIM ?
3. Выдерживает ли модуль SIM20 какие-либо паузы между блоками: [удаленные данные] - [ответ на АТ команду] - [удаленные данные] ?
Цитата(Yaumen @ Oct 7 2013, 13:01)

Опыт работы с отладочными модулями SIM20-TE говорит о том, что модуль на команду на неправильной скорости не ответит ничего, так как фактически он ничего не примет. Так что придется перебирать скорость, но это не беда.
Мне сложнее написать код для работы, так как опыта работы именно с АТ командами маловато. Вот вопросы, которые возникают:
1. При работе в режиме команд в момент пока я отправляю AT команду к SIM20, он может получить данные от удаленного устройства, т.е. фактически ожидая ответа на АТ команду, гипотетически, я могу получить в начале принятые удаленные данные, а лишь затем ответ на АТ команду. Т.е. в процедуре отбработки ответа на АТ команду, необходимо уметь вычленять собственно ответ и данные. Причем удаленные данные необходимо куда-то временно складывать, чтобы затем другой процедурой заняться их анализом.
2. Каким образом отслеживать окончание ответа на АТ команду: поиск некоего ключевого слова, типа OK или ERROR или по возникновении определенной паузы в передаче ответа от модуля SIM ?
3. Выдерживает ли модуль SIM20 какие-либо паузы между блоками: [удаленные данные] - [ответ на АТ команду] - [удаленные данные] ?
1. Да
2. SIM20_AT20CommandManual_V1.04, page8, AT Command syntax
3. сомневаюсь, да и зачем "тормозить-то"???
Если пауз нет, то тогда я с трудом представляю, как разделять поток данных на лету.
1. Что считать началом приема удаленных данных? Наличие "RM(" в начале нового приема или после <CR><LF> ?
2. Что считать окончанием приема ответа на АТ команду? Прием "ОК<CR><LF>" или "ERROR<CR><LF>"?
Народ, зациклился при реализации кода работы с SIM20. Но вполне вероятно, что эта ситуация касается любых устройств, работающих с АТ командами.
Кратенько опишу чуть проблемы:
3 или более устройства связываются между собой посредством SIM20. Для того, чтобы сократить задержки на передаче и для удобства назначения адрес устройства назначения, решил работать исключительно в режиме команд с использованием команды "AT+SRDSEND".
Допустим настал момент отправки сообщения одному из устройств. Я перехожу в процедуру формирования запроса "AT+SRDSEND" и начинаю формировать АТ команду на отправку, который здесь же отправляю к модулю SIM20.
Гипотетически, возможна ситуация, что в этот момент, пока я готовлю или отправляю АТ команду, от одного из удаленных модулей поступают данные, которые начинают "сыпаться" в UART. После окончания передачи АТ команды я естественно должен ждать отклика, но от SIM20 "сыпятся" удаленные данные, которые я каким-то образом должен узнать, среди общего потока данных и при этом не потерять.
Еще одна проблема, так как различные АТ команды могут выполняться разное время, то при ожидании отклика я планирую использовать 2 таймаута:
- максимальное время реакции SIM20 на АТ команду
- максимальная пауза между приемом двух соседних байт данных
Так вот, чтобы ими воспользоваться, нужно уметь, в описанном выше случае, четко различать когда закончились "сыплющиеся" удаленные данные, чтобы иметь возможность их применить.
Готов выслушать, любые советы и замечания по тому, как в таких случаях поступают ...
Alechek
Oct 8 2013, 13:05
Цитата(Yaumen @ Oct 8 2013, 18:33)

Народ, зациклился при реализации кода работы с SIM20. Но вполне вероятно, что эта ситуация касается любых устройств, работающих с АТ командами.
Гипотетически, возможна ситуация, что в этот момент, пока я готовлю или отправляю АТ команду, от одного из удаленных модулей поступают данные, которые начинают "сыпаться" в UART. После окончания передачи АТ команды я естественно должен ждать отклика, но от SIM20 "сыпятся" удаленные данные, которые я каким-то образом должен узнать, среди общего потока данных и при этом не потерять.
Общее правило - всегда обрабатывайте ВЕСЬ поток входящих данных! А уж там его разгребайте на отклики и прочую чушь. Прочую чушь желательно отлавливать по заголовкам, где указана длина этой чуши. При наличии отклика выставляйте соответсвующий флаг.
Наш уважаемый клиент и коллега думаю сможет вам помочь - он в свое время основательно разобрался с SIM20.
Контакты внизу статьи.
http://invent-systems.narod.ru/shkola2.htmили
Ukraine
Телефон: +380-50-575-98-63 (MTC Украина)
E-mail:
invent-systems@ya.ru
gchernov@e-mail.ua
Геннадий Чернов
CADiLO,
Спасибо, я уже отослал ему письмо, но я думал, что это проблема методическая, касающаяся не только SIM20. И похожую проблему должны были бы решать многие, кто работает с АТ командами.
Alechek,
Получается, что нужно каким-то образом на лету, при приеме в прерывании очередного байта, определять, что за данные "сыпятся" и выставлять соответствующие флаги.
Alechek
Oct 9 2013, 05:37
Yaumen, можно и в прерывании, если время реакции системы устроит.
Использую SIM20A в прозрачном режиме.
В даташите на SIM20 насписано:
The default value of the WaitTime is about 120 milliseconds. The value of the FrameSize is 255 characters.
В результате экспериментов выяснил, что на самом деле WaitTime = примерно 1 сек. FrameSize=63 байта.
В даташите нет ни одной команды, чтобы поменять WaitTime и FrameSize.
Можно ли как-то уменьшить WaitTime до величины 120ms ?
У меня B04SIM20A S2-1029T-Z0808.
Любой SIM20 можно обновлять любой прошивкой ?
Например, я слышал, что когда-то в SIM20 менялся чипсет с SI4432-V2-FM на SI4432-B1-FM. В модули с разными чипсетами можно заливать одну и ту же прошивку ? Т.е. они программно совместимы между собой ?
CADiLO
Jan 16 2014, 08:18
В архиве последние прошивки и релизнотес.
В той которая *_433 снята блокировка мощности по требованиям CE, в другой до 10 милливатт.
C 04 прошивки должно обновиться до седьмой.
>>>Любой SIM20 можно обновлять любой прошивкой ?
Только для своей частоты - аппаратная RF часть то не меняется под другую частоту.
>>>>В результате экспериментов выяснил, что на самом деле WaitTime = примерно 1 сек. FrameSize=63 байта.
А посмотреть в даташите табличку с интервалами и еще раз перечитать описание ???
SIM20_AT Command Manual_V1.04.pdf
страничка 8
Table 1: Recommend intervals
There are 2 important parameters to trig sending packets over the air interface in data mode--WaitTime and FrameSize. WaitTime is the interval between receiving two characters at SIM20 module’s UART Rx. If WaitTime > 120ms, SIM20 will be trigged to send packets inside UART Rx buffer to the air; FrameSize is the size of data frame, and data are received at UART Rx. Either WaitTime or FrameSize will trig sending data over the air.
Note:
The default value of the WaitTime is about 120 milliseconds. The value of the FrameSize is 255 characters.
The UART port of SIM20 has a RX buffer in data mode and the RX buffer size is 255-character long; if the data frame received from serial port is more than 255 characters, the first 255 characters will be sent, the rest of it will be discarded. When customer’s MCU sends data to SIM20 during its data mode, make sure there is enough time intervals between two frames, the recommended intervals are in the following table.
Цитата(CADiLO @ Jan 16 2014, 15:18)

>>>>В результате экспериментов выяснил, что на самом деле WaitTime = примерно 1 сек. FrameSize=63 байта.
А посмотреть в даташите табличку с интервалами и еще раз перечитать описание ???
Спасибо. Я это все прочитал. Но так и не нашел команды с помощью которой можно установить WaitTime = 120ms.
CADiLO
Jan 16 2014, 08:49
Нет такой команды - этот параметр зависит от количества байт, скорости и т.д.
Цитата(CADiLO @ Jan 16 2014, 15:49)

Нет такой команды - этот параметр зависит от количества байт, скорости и т.д.
А что нужно сделать, чтобы SIM20 отсылал данные сразу же, а не ждал 1200 мс ? Или как сократить эту задержку хотя бы до 100 мс ?
ssokol
Jan 16 2014, 10:43
Цитата(Zlumd @ Jan 16 2014, 12:51)

А что нужно сделать, чтобы SIM20 отсылал данные сразу же, а не ждал 1200 мс ? Или как сократить эту задержку хотя бы до 100 мс ?
После приема последнего байта через 120мс сим отправляет данные в эфир , никаких 1200мс он не ждет, сократить задержку нельзя в принципе тк не определить будет конец массива.
По моему вы либо что-то не так измеряете, либо не правильно понимаете принцип работы сима, либо неправильно сформулировали вопрос и мы говорим о разных вещах.
CADiLO
Jan 16 2014, 11:19
Да, я вот тоже о неправильном вопросе подумал. Пауза там никак не исключится, она даже в SILABS RADIO есть.
Сплошной длинный поток не получится. Разве что выкинуть прогу симкома и в проц загрузить свою. Но сомневаюсь.
Цитата(ssokol @ Jan 16 2014, 17:43)

После приема последнего байта через 120мс сим отправляет данные в эфир , никаких 1200мс он не ждет, сократить задержку нельзя в принципе тк не определить будет конец массива.
Обновил прошивку с B04 до B07. Задержка прохождения данных уменьшилась с 1200 мс до примерно 500 мс.
Я измеряю время между отправкой данных в SIM20 и появлением этих данных на выходе другого SIM20.
SimCom прекращает выпуск модулей SIM20 в связи с прекращением выпуска применяемого в них чипсета.
Будет ли Pin-to-Pin замена для SIM20?
ssokol
Sep 18 2014, 14:55
Цитата(Zlumd @ Aug 19 2014, 05:41)

SimCom прекращает выпуск модулей SIM20 в связи с прекращением выпуска применяемого в них чипсета.
Будет ли Pin-to-Pin замена для SIM20?
Симком полностью сворачивает сим20, замены не будет (симкомовской), посему предлагаю обсудить замену на других производителей.
Например NE50-433 | NE50-868 кто использовал?
Интересуют модули с RS232 и естественно ценой сим20.
Проще использовать в проекте сами чипы Si4432 или Si4463, SX1276, RF-96 а не гнаться за этими модулями. Если сильно хочется модуль то ---> HopeRF
ssokol
Sep 19 2014, 08:51
Цитата(Aner @ Sep 18 2014, 23:00)

Проще использовать в проекте сами чипы Si4432 или Si4463, SX1276, RF-96 а не гнаться за этими модулями. Если сильно хочется модуль то ---> HopeRF
Чипы выгодно при массовом производстве, на кое еще не тянем, на хопе гляну, спасибо за подсказку, но вроде там в основном SPI
CADiLO
Sep 19 2014, 09:00
Мы привозили образцы Хопа и отказались с ними работать. Качество пайки отвратное.
Сейчас рассматриваем несколько вариантов, однако большинство наших пользователей выбрали вариант MRF49 или MRF89 + УМ.
Так даже дешевле получается чем модуль.
Вот только не эти микрочипы MRF49, MRF89 ... хуже из перечисленых мной ранее, проверено. По чувству по динамике по цене проиграли тем же HopeRF, Dorji. У HopeRF пайка нормальная, даже на кол-ве более 1000 шт, к тому же они их тестят как по чувству так и по выходной мощности.
CADiLO
Sep 19 2014, 10:30
Я бы не сказал что здесь хорошая пайка. Смотрится как пионеры паяли.
http://www.microchip.ua/rfm/img/RFM12BP-868.jpghttp://www.microchip.ua/rfm/img/RFM50-433S.jpgС тем что чипы есть лучше по чуствительности не спорю.
Однако MRF49 со склада по 2 бакса в розницу, плюс мы к ней предлагаем мелкий кварц и комплект индуктивностей на любой из диапазонов.
Для большинства задач более чем подходит.
За основу усилителя вполне можно брать нижеприведенную схему. Проверено - переплевывает по дальности SIM20.
Наивно пишите, как пионер! Вам ли с образованием писать такое ... переплевывает по дальности. Посчитайте бюджет линка в dB c учетом антенн, динамического диапазона и для большинства задач не подходит никак. К тому же я делал еще и измерения. Ваши рекомендованные чипы только для пионеров для старта и подходят, затем переходят на то что я писал. Только вот почему то все сожалеют о потерянном времени на эти пионерские старты.
CADiLO
Sep 19 2014, 11:19
Сколько людей столько и мнений. Мое мнение определяется тем что я вижу и статистикой продаж.
Даже более простой PIC12F529T48A на сегодня поставлен клиентам в количестве 62К штук. МRF примерно вполовину.
SIM20 далеко не дотягивает даже до 5% от этого объема.

Если кому-то понадобится железка посерьезнее чем MRF или SIM20, то пожалуйста, я ж не против.
ssmokie
Sep 22 2014, 19:44
Цитата(ssokol @ Sep 18 2014, 17:55)

Симком полностью сворачивает сим20, замены не будет (симкомовской), посему предлагаю обсудить замену на других производителей.
Например NE50-433 | NE50-868 кто использовал?
Интересуют модули с RS232 и естественно ценой сим20.
NE50 - удобен для организации Mesh-сети. Если такой задачи нет, нужен прозрачный режим или звезда - то можно смотреть на LE50.
Цитата(Aner @ Sep 19 2014, 02:00)

Проще использовать в проекте сами чипы Si4432 или Si4463, SX1276, RF-96 а не гнаться за этими модулями. Если сильно хочется модуль то ---> HopeRF
Подскажите пожалуйста, кто в России продает HopeRF?
ssokol
Sep 29 2014, 16:46
Цитата(ssmokie @ Sep 22 2014, 23:44)

NE50 - удобен для организации Mesh-сети. Если такой задачи нет, нужен прозрачный режим или звезда - то можно смотреть на LE50.
Да, вот именно на него и запал (NE70), случайно с ним не работали?
ssmokie
Sep 30 2014, 10:18
Цитата(ssokol @ Sep 29 2014, 19:46)

Да, вот именно на него и запал (NE70), случайно с ним не работали?
Еще не работал,
вы спросите если что-то конкретное, может смогу помочь
ssokol
Sep 30 2014, 15:00
Цитата(ssmokie @ Sep 30 2014, 14:18)

Еще не работал,
вы спросите если что-то конкретное, может смогу помочь
Собственно интересует cyclic wake up mode в star, насколько удобоваримо сделано и какое потребление можно достич не прозевав посылку.
Конечно , посмотрел, все зависит от настроек регистров для этого режима, но сюдя по даташиту сделано оч красиво, в отличие от полной корявости слипа в СИМ20. Вот вроде модуля едут , так что бум юзать. Да еще в МТ сказали, что можно поэксплуатировать Telit, должен много знать ;-)
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.