не могу записать файл в флэш блок gsm/gprs shield на sim900

eduaro
Offline
Зарегистрирован: 17.05.2015

имею 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.Подскажите пожалуйста ..как быть..?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

блин обострения весение прут со всех сторон...

давайте заместо прошивки запишем туда мелодию.. пусть думает что он плеер...

gena
Offline
Зарегистрирован: 04.11.2012

  Постараюсь завтра вспомнить как я это делал. Всё получалось записать и прослушать потом. Сегодня нет времени.

 

gena
Offline
Зарегистрирован: 04.11.2012

  Начнём поэтапно. Что бы организовать связь с модулем 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 секунд) которое отводится на сессию записи. За это время должно: прогрмамме терминала дать команду на передачу файла, в диалоговом окне выбрать сам файл,  сам файл должен успеть "перекачаться" в радиомодуль. Если за это время весь файл не успеет записаться во флеш память, сессия записи закончится с ошибкой. Т.е. запись не состоится. Вот в этом месте я долго "буксовал", пока не понял, что это за параметр. Может быть и у Вас здесь проблемно?

eduaro
Offline
Зарегистрирован: 17.05.2015

Спасибо!,прочитал внимательно...,Сегодня попробую..,как я понял:Rx соединяем с Rx,Tx...с....Tx.

 

eduaro
Offline
Зарегистрирован: 17.05.2015

Gena,извиняюсь за непонятливость.Запустил теминалку v1.9b,задаю АТ команды,а на приемнике не вижу ответа.команда..сенд..или макрос..все равно в верхней части терминалки нет реакции.При звонке на модуль Ring пишет..Может..что пропустил..или туплю..

 

gena
Offline
Зарегистрирован: 04.11.2012

   Вот мои макросы для общего "общения" с радиомодулем:

# 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.

eduaro
Offline
Зарегистрирован: 17.05.2015

Что то делаю не так..Звонки принимает..смс принимает(на консоли приемника все пишет)..,но команды не отсылает(возможно и отсылает..в консоли передатчика команды отоброжаются),..,т.е. работает как бы в одну сторону(только прием).Может что еще надо включить на консоли терминала.....

gena
Offline
Зарегистрирован: 04.11.2012

  Ещё один ньюанс при работе с модулем. 

Команды всегда начинаются с АТ (от английского Attention – внимание) и
заканчиваются на <CR> . 

Заметьте, не  <CR><LF>.

Вот скрин настройки терминальной программы  у меня: 

 http://s014.radikal.ru/i327/1505/75/2dca9e27b828.jpg

Выложите фото своего модуля (или ссылку на него). В своих первых экспериментах модуль "садили" сверху Uno r3 или рядом и соединяли проводами?

Вспомнил у себя такой момент. На какой то вывод радиомодуля нужно было подать +5 В (при "посадке" на  стандартный модуль, типа Uno, эти +5 В подаются автоматически), иначе что-то не работало.

gena
Offline
Зарегистрирован: 04.11.2012

  Постепенно вспоминаю свои муки по освоению радиомодуля в августе 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 (все восемь разрядов)
    
}


 

eduaro
Offline
Зарегистрирован: 17.05.2015
gena
Offline
Зарегистрирован: 04.11.2012

  Думаю что нужно радиомодуль расположить над Uno (это обеспечит аппаратное подключение), а выложенную мной программу в посте #9 подкорректировать с учётом того, на какие пины у Вас выведены GPRS_TX и GPRS_RX. Сумеете подкорреткировать самостоятельно?

gena
Offline
Зарегистрирован: 04.11.2012

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

Начало выглядит так. На плате Ардуины устанавить перемычку между 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) и если поняли зачем все эти перемычки - устанавливайте их и "общайтесь" с радиомодулем напрямую, из терминальной программы.

eduaro
Offline
Зарегистрирован: 17.05.2015

шас попытаюсь

eduaro
Offline
Зарегистрирован: 17.05.2015

не очень понял:d0 и d1 совпадают...идут на преобразователь,а d3..d4..куда......если мы стопорим Duino...

eduaro
Offline
Зарегистрирован: 17.05.2015

iшас осмыслю

 

gena
Offline
Зарегистрирован: 04.11.2012

  Что бы не заставлять Вас пользоваться паяльником (для работы преобразователя уровня), платы нужно распологать одну над другой. В этом случае скетч  поста #9 работать не будет. Изучите внимательно пост #12.

 Вот такое оно "скрещивание" плат для записи длинных файлов. Для коротких сообщений весь этот "огород" не нужен. Нормально должен работать и SoftSerial.

eduaro
Offline
Зарегистрирован: 17.05.2015

скетч мы пишем в дуино..,а потом его тормозим перемычкой reset....gnd....не понимаю...

eduaro
Offline
Зарегистрирован: 17.05.2015

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

eduaro
Offline
Зарегистрирован: 17.05.2015

а разве в посте #10 перемычки не напрямую...

gena
Offline
Зарегистрирован: 04.11.2012

  Я поначалу (пост #3)  предложил вариант работы без SoftSerial - напрямую с преобразователя USB-COM. Это не зароботало у Вас ( пост #5). Я припомнил, что имел аппаратные проблемы с преобразователем 3,3 <-> 5,0 В. Поэтому написал пост #9, а после того, как Вы указали конкретный тип платы радиомодуля считаю, что лучше сейчас понять и попробовть пост №12 (иначе придётся углубляться в аппаратные вопросы, ассемблер - боюсь, что это Вас может запутать совсем).

Пост #12 - это уже третий вариант (первые два работать не будут, т.к. они советовались без знания схемотехники Ваших плат).

Этот третий вариант (пост #12) по сути тоже, что и пост #3, только выводы Tx, Rx радиомодуля выведены на выводы D7 и D8.

К слову - Вы ничего не пишете про перемычки на разъёме J2 радиомодуля. Разберитесь в их назначении!

eduaro
Offline
Зарегистрирован: 17.05.2015

попытаюсь...,посмотрю схему на модуль...не очень понятны ..HRXD и SRXD (High RX и SoftRX)...

gena
Offline
Зарегистрирован: 04.11.2012

  Смотрите. С микросхемы 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.

 

Вникайте, понимание этого потребуется неизбежно.

eduaro
Offline
Зарегистрирован: 17.05.2015

если я правильно понимаю...в посте#10 указывается разьем J2,и устанавливаю аппаратный вариант.Если смотреть на модуль,то перемычки  на J2:с разьема J3 RX(D0) на ножку разьема J2 GPRS_RX,а TX(d1) на ножку GPRS_TX.Вроде делаю так ,как Вы рекомендуете.. 

gena
Offline
Зарегистрирован: 04.11.2012

   Я не совсем понял пост #23, т.к. не знаю, что Вы понимаете под сигналами GPRS_RX, GPRS_TX - их на схеме радиомодуля, по Вашей ссылке, я не вижу. А расписываю прохождение сигналов смотря только на схему. Возможно на плате радиомодуля и есть какая-то маркировка, но мне она не видна.

eduaro
Offline
Зарегистрирован: 17.05.2015
gena
Offline
Зарегистрирован: 04.11.2012

Вот фото для большей ясности http://s50.radikal.ru/i130/1505/78/6bdde3769633.jpg

gena
Offline
Зарегистрирован: 04.11.2012

  http://s008.radikal.ru/i306/1505/07/9a79eb2a9b46.jpg

Итак.

1. На плате Ардуино установить джампер между выводами RESET и GND (это на шестивыводном разъёме для программирования).

2. Установить плату радиомодуля сверху платы Ардуины.

3. На плате радиомодуля, на разъёме J2, установить джамперы между выводами  (2-3) и (4-5).

4. Установить две дополнительные перемычки "А" и "В", как показано на фото.

5. Управлять платой радиомодуля с терминальной программы.

eduaro
Offline
Зарегистрирован: 17.05.2015

gena,я все это делал (как и писал в посте#10)и делаю,как Вы мне рекомендуете в посте #27,терминальная программа только принимает от модуля...Что то происходит с сигналом в модуль(уровень,мощность..не знаю..)...

gena
Offline
Зарегистрирован: 04.11.2012

  Давайте поэтапно выполнять пост #27 и анализировать результаты. Судя по Вашим сообщениям, сигнал RXD  в SIM900 не доходит. Более всего меня интересует п. 3 и п.4.

eduaro
Offline
Зарегистрирован: 17.05.2015

 "A"установил  перемычки,(2-3),(4-5),доплнительные "A","B".

gena
Offline
Зарегистрирован: 04.11.2012

На команду АТ ответ есть?

 

eduaro
Offline
Зарегистрирован: 17.05.2015

Запускаю теминальную программу,все принятые смс в консоли приемника видны.Зада АТ команды,в консоли передатчика печатаются,но реакция модуля....никакая...

eduaro
Offline
Зарегистрирован: 17.05.2015

нет ответа на команды

gena
Offline
Зарегистрирован: 04.11.2012

  Смогу отвечать через час. Вы не из Украины?

eduaro
Offline
Зарегистрирован: 17.05.2015

Конечно!!!

Грузия.Тбилиси

gena
Offline
Зарегистрирован: 04.11.2012

  Пока задание такое. Проследите (с помощью лупы, тестера) весь путь сигнала RXD (это ножка 10 микросхемы SIM900) до вывода D1 на плате Ардуино (это вывод 31 микроконтроллера ATMega 328).

eduaro
Offline
Зарегистрирован: 17.05.2015

с 10 ноги на резистор 10к,полевик,на вывод D1,на 31 ногу Атмел.

gena
Offline
Зарегистрирован: 04.11.2012

  Начинаю предлагать третий вариант.

Соберите ту аппаратную конфигурацию и выложите здесь скетч, которым пользовались к моменту написания поста #1. Убедитесь, что эта конфирурация правильно работает  с терминальной программой (есть соответствующие ответы на АТ команды). Затем попытаемся "скрещивать" эту конфигурацию с моим скетчем.

gena
Offline
Зарегистрирован: 04.11.2012

eduaro пишет:

с 10 ноги на резистор 10к,полевик,на вывод D1,на 31 ногу Атмел.

Не согласен с таким ответом. Я не вижу упоминания о разъёме J2. Не жалейте слов - я не могу догадываться, что и как у Вас сконфигурировано!  Даю советы исходя ТОЛЬКО из схемы по ссылке на радиомодуль. Как там реально китайцы напаяли - я не вижу, но знаю, что несовпадения ВСЕГДА есть!

eduaro
Offline
Зарегистрирован: 17.05.2015

сняты перемычки:10 нога,резистор 10к,полевик,3-я нога J2,1-я нога J2,контакт D1

gena
Offline
Зарегистрирован: 04.11.2012

Так джампер на J2 стоит для работы по Вашей конфигурации или для работы по посту #27?

eduaro
Offline
Зарегистрирован: 17.05.2015

по посту #27

eduaro
Offline
Зарегистрирован: 17.05.2015

С учетом всех перемычек:(J2) 2-й контакт на 6-й контакт и 1-й контакт на 5-й контакт

eduaro
Offline
Зарегистрирован: 17.05.2015

Может посмотреть CH340G...,сигнал ТХ до Атмеги доходит-это точно,а в борт...,т.е. может проблема в Дуино...

gena
Offline
Зарегистрирован: 04.11.2012

  Давайте начнём почти сначала (Ваши ответы запаздывают и я уже теряю ход диалога). Сделайте пост #38. Добейтесь его работы (Вы это уже делали).

eduaro
Offline
Зарегистрирован: 17.05.2015

загружаю скетч,перемычки -софт,запускаю sscom32,все работает

eduaro
Offline
Зарегистрирован: 17.05.2015

в смысле АТ команды понимает

gena
Offline
Зарегистрирован: 04.11.2012

  Что отвечает на команду AT+GSV?

eduaro
Offline
Зарегистрирован: 17.05.2015
AT+GSV
 
SIMCOM_Ltd
SIMCOM_SIM900
Revision:1137B02SIM900M64_ST_ENHAN
gena
Offline
Зарегистрирован: 04.11.2012

  Подайте команду AT+CFSINIT. Затем команду AT+CFSGFRS. Что отвечает?