не могу записать файл в флэш блок gsm/gprs shield на sim900
- Войдите на сайт для отправки комментариев
Вс, 17/05/2015 - 04:15
имею uno r3 и gsm/gprs shield на sim900.(Версия S1137B02SIM900M64_ST_ENHANCE) .Хочу прописать в память модуля файл формата amr(мелодию).
Использую терминальную программу SSCOM3.2
Запускаю сессию(AT+CFSINIT),открываю нужный файл,указываю размер файла,создаю ком.AT+CFSWFILE.
вообщем все по инструкции,
затем connect,send ok .error и и разные каляки.Проюовал на разных скоростях..только принимает каманды на 19200.,.В описании пишется про какой то системный файл simcom.bin.У меня по команде at+list...ответ просто ok.Подскажите пожалуйста ..как быть..?
блин обострения весение прут со всех сторон...
давайте заместо прошивки запишем туда мелодию.. пусть думает что он плеер...
Постараюсь завтра вспомнить как я это делал. Всё получалось записать и прослушать потом. Сегодня нет времени.
Начнём поэтапно. Что бы организовать связь с модулем SIM900 я использую плату Ардуино Nano v.3. На плате устанавливаю перемычку между GND и выводом RESET. Т.о. микроконтроллер не работает, а плата выступает в качестве USB-COM адаптера. Для "общения" с SIM900 использую (чаще всего) программу Tepminav v1.9b. Она удобна тем, что в ней можно создавать, сохранять, загружать макросы для передачи в СОМ порт. Это сильно упрощает работу с модулем SIM900 и уменьшает количество ошибок. Сделать необходимые соединения по питанию и выводам Rx, Tx. Плату радиомодуля запитываю от отдельного источника питания, т.к. при работе радиоканала она может потреблять ток больший, чем отдаёт USB порт. Скорость использую 9600. На каком то сайте нашёл очень полезный документ по работе со звуковыми возможностями модуля SIM900 - "SIM900 AMR Play v1.00 rus" (не знаю как выложить. может дайте электронку, отправлю его и ещё один полезный документ). Не стану выписывать здесь все команды необходимые для начала записи во флеш памяьть радиомодуля (нужно делать по инструкции), но в конечном итоге подхожу к команде записи: AT+CFSWFILE="00.amr",0,550,20000$0D Здесь "550" это длина записываемого файла в байтах, а "20000" это время (в миллисекундах, т.е. 20 секунд) которое отводится на сессию записи. За это время должно: прогрмамме терминала дать команду на передачу файла, в диалоговом окне выбрать сам файл, сам файл должен успеть "перекачаться" в радиомодуль. Если за это время весь файл не успеет записаться во флеш память, сессия записи закончится с ошибкой. Т.е. запись не состоится. Вот в этом месте я долго "буксовал", пока не понял, что это за параметр. Может быть и у Вас здесь проблемно?
Спасибо!,прочитал внимательно...,Сегодня попробую..,как я понял:Rx соединяем с Rx,Tx...с....Tx.
Gena,извиняюсь за непонятливость.Запустил теминалку v1.9b,задаю АТ команды,а на приемнике не вижу ответа.команда..сенд..или макрос..все равно в верхней части терминалки нет реакции.При звонке на модуль Ring пишет..Может..что пропустил..или туплю..
Вот мои макросы для общего "общения" с радиомодулем:
# Terminal macro file
AT$0D
AT+GSV$0D
AT+CSQ$0D
AT+COPS?$0D
AT+CCLK?$0D
AT+CMEE=2$0D
ATD*111##$0D
ATS0=5$0D
AT+CCLK="гг/мм/дд,чч:мм:сс+02"$0D
AT+CMGR=1$0D
0$0D
А вот для работы со звуковыми файлами:
# Terminal macro file
AT+CFSINIT$0D
AT+CFSGFRS?$0D
AT+CFSLIST$0D
AT+CFSWFILE="00.amr",0,550,20000$0D
AT+CFSTERM$0D
AT+CFSDFILE="70.amr"$0D
ATA$0D
AT+CPAMR="00.amr",0$0D
ATH0$0D
AT+CFSDFILE="01.amr"$0D
После включения модуля (подача питания, а затем его активация кнопкой POWER)
обязательно нужно подать команду AT$0D.
Так же подаю команду прямого указания скорости работы с модулем:
AT+IPR? Скорость COM порта: 0 – автоматически, 1200...115200.
Что то делаю не так..Звонки принимает..смс принимает(на консоли приемника все пишет)..,но команды не отсылает(возможно и отсылает..в консоли передатчика команды отоброжаются),..,т.е. работает как бы в одну сторону(только прием).Может что еще надо включить на консоли терминала.....
Ещё один ньюанс при работе с модулем.
Команды всегда начинаются с АТ (от английского Attention – внимание) и
заканчиваются на <CR> .
Заметьте, не <CR><LF>.
Вот скрин настройки терминальной программы у меня:
http://s014.radikal.ru/i327/1505/75/2dca9e27b828.jpg
Выложите фото своего модуля (или ссылку на него). В своих первых экспериментах модуль "садили" сверху Uno r3 или рядом и соединяли проводами?
Вспомнил у себя такой момент. На какой то вывод радиомодуля нужно было подать +5 В (при "посадке" на стандартный модуль, типа Uno, эти +5 В подаются автоматически), иначе что-то не работало.
Постепенно вспоминаю свои муки по освоению радиомодуля в августе 2014 года.
1. Поскольку у меня модуль Nano, я соединял его с радиомодулем проводами - не работало. Причиной было то, что на какой то вывод модуля нужно было подать +5 В. Иначе не работал преобразователь уровней в радиомодуле. При "посадке" на Uno этот аппаратный ньюанс решался сам собой - такова схемотехника Uno.
2. Затем возился с невозможностью записать большие (звуковые) файлы. Пришёл к выводу, что проблемой этого является SoftSerial, возможно происходит переполнение буфера или ещё что. Разбираться не стал, а написал скетч для "быстрой" передачи информации через Ардуину в радиомодуль не используя SoftSerial.
/* Программа расчитана на микроконтроллер ATMega328P и основной цикл выполняется на ассемблере. Программа читает вывод порта D.0 (выход TXD FT232R) и передаёт его значение в порт D.4 на модуль SIM900 (вход GRX). Затем читается порт D.3 (выход GTX SIM900) и передаётся его значение в порт D.1 (вход RXD FT232R). Т.о. данные из FT232R транзитом через микроконтроллер ATMega328P передаются в модуль SIM900 и обратно максимально быстро. Вывод порта D.2 не используется, т.к. он зарезервирован под сигнал RI от SIM900. */ int pinD0 = 0; // вход микроконтроллера, от выхода TXD FT232R int pinD1 = 1; // выход микроконтролера, на вход RXD FT232R int pinD3 = 3; // вход микроконтроллера, от выхода GTX SIM900 int pinD4 = 4; // выход микроконтроллера, на вход GRX SIM900 void setup() { pinMode(pinD0, INPUT); // настройка pinD0 как вход pinMode(pinD1, OUTPUT); // настройка pinD1 как выход pinMode(pinD3, INPUT); // настройка pinD3 как вход pinMode(pinD4, OUTPUT); // настройка pinD4 как выход } void loop() { __asm__ __volatile__("IN R20, 0x09"); // прочитать в регистр R20 состояние выводов порта D (все восемь разрядов) __asm__ __volatile__("BST R20, 0"); // сохранить в флаг T разряд 0 регистра R20 __asm__ __volatile__("BLD R20, 4"); // скопировать в разряд 4 регистра R20 флаг Т __asm__ __volatile__("BST R20, 3"); // сохранить в флаг T разряд 3 регистра R20 __asm__ __volatile__("BLD R20, 1"); // скопировать в разряд 1 регистра R20 флаг Т __asm__ __volatile__("OUT 0x0B, R20"); // записать содержимое регистра R20 в порт D (все восемь разрядов) }мой модуль...http://www.geeetech.com/gprsgsm-sim900-shield-board-arduino-compatible-p-610.html
перемычки:GPRS_TX...Xduino_TX,GPRS_RX....Xduino_RX.
мой Arduino..http://www.ebay.com/itm/UNO-R3-ATmega328P-USB-Development-Board-CH340G-for-Arduino-with-USB-Cable-/191491260883
Думаю что нужно радиомодуль расположить над Uno (это обеспечит аппаратное подключение), а выложенную мной программу в посте #9 подкорректировать с учётом того, на какие пины у Вас выведены GPRS_TX и GPRS_RX. Сумеете подкорреткировать самостоятельно?
Начал было писать очередной совет в учётом указанных плат, но притормозил ввиду того, что надо подразобраться с распиновкой на радиомодуле. Всё не так очевидно.
Начало выглядит так. На плате Ардуины устанавить перемычку между RESET И GND. Этим отключаем микроконтроллер, чтобы работать с радиомодулем напрямую через преобразователь USB - COM (не используя SoftSerial - подозреваю, что он плохо справляется с передачей длинных последовательностей, происходят потери). Плату радиомодуля подключаем к плате Ардуины, расположив её сверху. Этим обеспечиваем корректную работу преобразователя уровней 3,3 <-> 5,0 Вольт (микросхема Si5902 на плате радиомодуля). На разъёме J2 установить перемычку между HRXD и SRXD (High RX и SoftRX). Так же установить перемычку между HTXD и STXD. Это значит, что сигнал с СОМ порта нужно подавать на SRXD (вывод D8 по обозначению в платах Ардуины). А принимать в СОМ порт с STXD (вывод D7 по обозначению в платах Ардуины). Т.о на выводе D7 будет иметь сигнал TX от радиомодуля (подавать ИЗ радиомодуля В СОМ порт), а на выводе D8 будет сигнал RX (сигнал идущий ИЗ СОМ порта В радиомодуль).
Далее. Установить проволочную перемычку между D7 и D1. Установить перемычку между D8 и D0. Эти перемычки перенапрявляют сигналы преобразователя USB-COM к радиомодулю.
Проанализируйте то, что я написал выше (могу где-то ошибиться с этими RX, TX) и если поняли зачем все эти перемычки - устанавливайте их и "общайтесь" с радиомодулем напрямую, из терминальной программы.
шас попытаюсь
не очень понял:d0 и d1 совпадают...идут на преобразователь,а d3..d4..куда......если мы стопорим Duino...
iшас осмыслю
Что бы не заставлять Вас пользоваться паяльником (для работы преобразователя уровня), платы нужно распологать одну над другой. В этом случае скетч поста #9 работать не будет. Изучите внимательно пост #12.
Вот такое оно "скрещивание" плат для записи длинных файлов. Для коротких сообщений весь этот "огород" не нужен. Нормально должен работать и SoftSerial.
скетч мы пишем в дуино..,а потом его тормозим перемычкой reset....gnd....не понимаю...
извиняюсь,что сбиваю Вас с толку,долго реагирует сайт...мои вопросы приходят после Ваших рекомендаций..
а разве в посте #10 перемычки не напрямую...
Я поначалу (пост #3) предложил вариант работы без SoftSerial - напрямую с преобразователя USB-COM. Это не зароботало у Вас ( пост #5). Я припомнил, что имел аппаратные проблемы с преобразователем 3,3 <-> 5,0 В. Поэтому написал пост #9, а после того, как Вы указали конкретный тип платы радиомодуля считаю, что лучше сейчас понять и попробовть пост №12 (иначе придётся углубляться в аппаратные вопросы, ассемблер - боюсь, что это Вас может запутать совсем).
Пост #12 - это уже третий вариант (первые два работать не будут, т.к. они советовались без знания схемотехники Ваших плат).
Этот третий вариант (пост #12) по сути тоже, что и пост #3, только выводы Tx, Rx радиомодуля выведены на выводы D7 и D8.
К слову - Вы ничего не пишете про перемычки на разъёме J2 радиомодуля. Разберитесь в их назначении!
попытаюсь...,посмотрю схему на модуль...не очень понятны ..HRXD и SRXD (High RX и SoftRX)...
Смотрите. С микросхемы U1 SIM900, с вывода номера 9 выходит сигнал с названием "TXD". Тут же его переименовывают в "LTXD" (Low = низкий TXD, т.к. микросхема U1 работает от 3,3 Вольт, а передавать этот сигнал нужно на микроконтроллер, который запитан пятью Вольтами). Для изменения уровня этот "LTXD" подают на микросхему Si5902 и с этой микросхемы снимают уже пятивольтовый сигнал с названием "HTXD" (High - высокий TXD). Этот "HTXD" приходит на разъём J2 (ножка номер 5). Теперь этот сигнал с пятой ножки нужно как-то отправить в Ардуину. Если поставить перемычку между ножкой пять и шесть (5-6), то сигнал "HTXD" переименовывается в "MTXD" (микрочип TXD) и подаётся на вывод 8 разъёма J3. А это на Ардуине соотвествует выводу D0 (он же 0 -> RX). Если же на разъёме J2 установить перемычку между ножками пять и четыре (5-4), то сигнал "HTXD" переименовывается в "STXD" (Soft - программный TXD) и далее поступает на ножку номер 1 разъёма J3. Это для работы с программным последовательным портом (ведь аппаратный СОМ порт занят для связи с ПК, для заливки скетчей и прочего). В Ардуине этот вывод называется D7 (например для SoftSerial).
Аналогичные изменения в названиях и для сигнала входящего в микросхему U1 SIM900, в вывод 10 - т.е. RXD.
Вникайте, понимание этого потребуется неизбежно.
если я правильно понимаю...в посте#10 указывается разьем J2,и устанавливаю аппаратный вариант.Если смотреть на модуль,то перемычки на J2:с разьема J3 RX(D0) на ножку разьема J2 GPRS_RX,а TX(d1) на ножку GPRS_TX.Вроде делаю так ,как Вы рекомендуете..
Я не совсем понял пост #23, т.к. не знаю, что Вы понимаете под сигналами GPRS_RX, GPRS_TX - их на схеме радиомодуля, по Вашей ссылке, я не вижу. А расписываю прохождение сигналов смотря только на схему. Возможно на плате радиомодуля и есть какая-то маркировка, но мне она не видна.
http://www.geeetech.com/wiki/index.php/Arduino_GPRS_Shield
Вот фото для большей ясности http://s50.radikal.ru/i130/1505/78/6bdde3769633.jpg
http://s008.radikal.ru/i306/1505/07/9a79eb2a9b46.jpg
Итак.
1. На плате Ардуино установить джампер между выводами RESET и GND (это на шестивыводном разъёме для программирования).
2. Установить плату радиомодуля сверху платы Ардуины.
3. На плате радиомодуля, на разъёме J2, установить джамперы между выводами (2-3) и (4-5).
4. Установить две дополнительные перемычки "А" и "В", как показано на фото.
5. Управлять платой радиомодуля с терминальной программы.
gena,я все это делал (как и писал в посте#10)и делаю,как Вы мне рекомендуете в посте #27,терминальная программа только принимает от модуля...Что то происходит с сигналом в модуль(уровень,мощность..не знаю..)...
Давайте поэтапно выполнять пост #27 и анализировать результаты. Судя по Вашим сообщениям, сигнал RXD в SIM900 не доходит. Более всего меня интересует п. 3 и п.4.
"A"установил перемычки,(2-3),(4-5),доплнительные "A","B".
На команду АТ ответ есть?
Запускаю теминальную программу,все принятые смс в консоли приемника видны.Зада АТ команды,в консоли передатчика печатаются,но реакция модуля....никакая...
нет ответа на команды
Смогу отвечать через час. Вы не из Украины?
Конечно!!!
Грузия.Тбилиси
Пока задание такое. Проследите (с помощью лупы, тестера) весь путь сигнала RXD (это ножка 10 микросхемы SIM900) до вывода D1 на плате Ардуино (это вывод 31 микроконтроллера ATMega 328).
с 10 ноги на резистор 10к,полевик,на вывод D1,на 31 ногу Атмел.
Начинаю предлагать третий вариант.
Соберите ту аппаратную конфигурацию и выложите здесь скетч, которым пользовались к моменту написания поста #1. Убедитесь, что эта конфирурация правильно работает с терминальной программой (есть соответствующие ответы на АТ команды). Затем попытаемся "скрещивать" эту конфигурацию с моим скетчем.
с 10 ноги на резистор 10к,полевик,на вывод D1,на 31 ногу Атмел.
Не согласен с таким ответом. Я не вижу упоминания о разъёме J2. Не жалейте слов - я не могу догадываться, что и как у Вас сконфигурировано! Даю советы исходя ТОЛЬКО из схемы по ссылке на радиомодуль. Как там реально китайцы напаяли - я не вижу, но знаю, что несовпадения ВСЕГДА есть!
сняты перемычки:10 нога,резистор 10к,полевик,3-я нога J2,1-я нога J2,контакт D1
Так джампер на J2 стоит для работы по Вашей конфигурации или для работы по посту #27?
по посту #27
С учетом всех перемычек:(J2) 2-й контакт на 6-й контакт и 1-й контакт на 5-й контакт
Может посмотреть CH340G...,сигнал ТХ до Атмеги доходит-это точно,а в борт...,т.е. может проблема в Дуино...
Давайте начнём почти сначала (Ваши ответы запаздывают и я уже теряю ход диалога). Сделайте пост #38. Добейтесь его работы (Вы это уже делали).
загружаю скетч,перемычки -софт,запускаю sscom32,все работает
в смысле АТ команды понимает
Что отвечает на команду AT+GSV?
Подайте команду AT+CFSINIT. Затем команду AT+CFSGFRS. Что отвечает?