Jump to content

    

DreamTwister

Участник
  • Content Count

    71
  • Joined

  • Last visited

Everything posted by DreamTwister


  1. Хммм, да как бы никакой команды не надо. Просто отправляете данные и все. (DataMode) Чтобы переключиться обратно в режим команд отправляете "+++" без 0D 0A. Ну и ATO - команда для переключения обратно.
  2. CIPMUX (IPшный мультиплексор) ника не связан с общемодемным, так что можно создавать соединения как с ним, так и без него. Сообщения об СМС и звонках приходят сразу на все 4 канала мультиплексора. При этом соединение по IP будет соотнесено с тем каналом, с которым изначально была начата работа.
  3. Вот про AT#CPUMODE я и спрашивал. Результат выполнения команды не сохраняется после перезагрузки модуля, даже применяя &W. А в целом подвижки в лучшую сторону есть, скрипт стал быстрее запускаться.
  4. А почему результаты команды не сохраняются после перезагрузки модуля, даже если применяется команда at&w?
  5. Вопрос в следующем. Очень медленно стартуют скрипты. Даже если выставить AT#STARTMODESCR=1,10 время запуска программы с момента включения модема может занять около минуты. Все скрипты "скомпилированы", всего используется порядка 15-ти модулей, работающих единым целым. Почему может возникнуть такой медленный старт? Как ускорить запуск программы?
  6. Ознакомились. Но, вероятно, подобным образом мы не сможем пробудить модуль после #SHDN до наступления времени, заданного в +CALA. Я правильно понимаю?
  7. Спасибо. Хочу попробовать еще вариант. Из скрипта при помощи +CALA и SHDN# отключить модем. Главный вопрос, перезапустится ли скрипт? Сам обязательно проверю, но вот на сколько надежным будет такое решение.
  8. Не могу до конца разобраться с режимами пониженного энергопотребления. У нас есть at+cfun = 0. Судя по показаниям амперметра - самый эффективный режим, нет UART, есть регистрация в сети. Но есть еще и at+cfun = 4, при котором модем не регистрируется в сети. Есть еще в скрипте функция MOD.powerSaving(...), но, как показала практика, почему-то эффективнее из того же скрипта отправить команду at+cfun = 0. Интересует вопрос, можно ли поставить модем в такие условия, чтобы не функционировали UARTы и модем не регистрировался сети? Все управление при этом передано phytonовскому скрипту.
  9. Добый день. Вопрос в следующем. Отправляем команду: AT+CIPSTART="UDP","ХХХ1.ru","ХХХ" Соединяемся, работаем, отправляем/принимаем данные. Потом: AT+CIPCLOSE Получаем ОК, далее: AT+CIPSTART="UDP","ХХХ2.ru","ХХХ" Соединяемся, данные уходят, но на сервере тишина. Перезапускаем модем полностью, коннектится на 2-ой сервер нормально. Не перезапуская модем удалось переключиться между серверами только используя AT+CIPSHUT. Ну и зачем, спрашивается, нужна AT+CIPCLOSE, если она все равно не работает? Или у SIMCOM 1 сессия = 1 соединение?
  10. Да. Можно. P.S. А еще можно поподробнее описать проблему. Откуда, чего и куда передавать.
  11. Ловить <CR><LF> еще можно, а не только по таймауту принимать ответы.
  12. Нужно определять источник пакетов, приходящих на модем по UDP соединению. Для этого сначала отправляем: at+ciphead=1 at+cipsrip=1 Затем создаем UDP соединение. Если мы соединяемся с сервером используя IP адрес, то, изучая заголовок пакета можно сравнить IP источника и IP сервера для соединения. Что делать, если мы соединились по DNS? Есть средства, как узнать IP, если есть DNS, и наоборот, как узнать DNS, если есть IP? Или единственный выход для решения проблемы свой/чужой это модернизация серверного ПО, добавив что-либо в содержимое самого пакета.
  13. Имеет смысл проверить регистрацию в сети. AT+CREG? AT+CGREG?
  14. Скорее прошивка слетела сама собой. Модуль вполне корректно переживает отключения питания без каких-либо AT команд.
  15. Сделал, все работает. Прописал с адреса 0x40000200 малюсенькую программку, которая только запускает WDT и все. Теперь процессор полностью сбрасывается и запускает основную прошивку! Я прекрасно понимаю Ваше негодование по поводу всего этого, так сказать, "колхоза" со сбросом через WDT и RAM. Логичнее было бы исправить основную прошивку. Просто в моем случае такой возможности нет. Как следствие - поиск альтернативных путей.
  16. Был бы этот *.hex файл полностью моей разработкой - проблем бы не было. Но это не так. Приходиться выкручиваться.
  17. Вот в том то и дело, что утилита по прошивке определяет начальный адрес из *.hex файла не 0, что само по себе странно. Но, как выяснилось после манипуляций с IAR, прошивка стартует, но не замыкает PLL. Причем с обоих адресов. Вероятно, утилита определяет стартовый адрес не 0, а тот, куда мы попадаем из 0. :unsure: Интересная ситуация. Сейчас меня интересует вопрос сброса после прошивки. Так как выяснилось, что просто перейти на 0-ой адрес - мало!
  18. Так и есть! Через IAR глянул, что творится в процессоре - висим на while (!PLLSTAT_bit.PLOCK);. Магическим адресом является, по сути, адрес таблици векторов прерываний(как я понял), а не 0. Разницы, кстати, замечено не было. Собственно, проблема ясна. Теперь о путях решения: 1)Правильно инициализировать PLL. Но есть проблема. Не факт, что все прошивки, заливаемые моей утилитой, будут моими, и PLL там будет адекватно проинициализирован. 2)После заливки основной программы прошивать по адресу 0x40000000 прошивку, которая будет делать сброс по WDT и все. После такого сброса можно быть уверенным, что процессор перешел а дефолтовые настройки. 3)Сбросить процессор программно через свою утилиту сразу после загрузки flash. При помощи какого-нибудь недокументированного способа. Но возможно ли это? Что посоветуете? Писать микроутилиту для RAM, как бы долго это не был? Самого удивило! G без выбора режима, а на ? не Synchronized. Вот, собственно, потому и спросил.
  19. А можно узнать модели и версии процессоров, с которыми Вы работали? Я только что провел эксперимент с 'G ' на 2144, все отработало на ура! Аналогичная последовательность команд на 2388 не приводит к должному результату. Причем 2388 запускается после передергивания питания. Вот, что самое интересное. Дак почему же один процессор запускается с "адреса сброса", а второй нет?
  20. Спасибо! Буду теперь знать! Думаю пригодится в ближайшем будущем. Но у меня еще одна проблема. Процессор не реагирует на команду 'G'. Точнее отказывается запускать программу. В ответ получаю 0\r\n\. А дальше - тишина. В качестве операндов перепробовал несколько комбинаций адресов. Интересно, что адрес вычисленный процедурой-донором тоже не подошел. Не подходит ни нулевой адрес, ни адрес таблицы векторов прерываний. Переключение между ARM и Thumb не помогло(запускаю в ARM, ставил второй режим на случай "а вдруг заработает").
  21. Врятли это префикс команда 'G'. Для своей утилиты использовал "донора" (lpcprog.c lpc21isp.c), где и наткнулся на очень интересный код. long chars, xtal; unsigned long ticks; chars = (17 * IspEnvironment->BinaryLength + 1) / 10; WatchDogSeconds = (10 * chars + 5) / atol(IspEnvironment->baud_rate) + 10; xtal = atol(IspEnvironment->StringOscillator) * 1000; ticks = (unsigned long)WatchDogSeconds * ((xtal + 15) / 16); DebugPrintf(2, "Entering ISP; re-synchronizing (watchdog = %ld seconds)\n", WatchDogSeconds); sprintf(temp, "T %lu\r\n", ticks); SendComPort(IspEnvironment, temp); ReceiveComPort(IspEnvironment, Answer, sizeof(Answer)-1, &realsize, 1,100); if (strcmp(Answer, "OK\r\n") != 0) { ResetKeyboardTtySettings(); DebugPrintf(2, "No answer on 'watchdog timer set'\n"); return (NO_ANSWER_WDT); } SendComPort(IspEnvironment, "G 10356\r\n"); Sleep(200); nQuestionMarks = 0; WaitForWatchDog = 1; Как видите тут 'G' без префикса, но она идет после 'T', а не наоборот, да и к тому же у 'T' есть свой собственный операнд. Да и посылка имеет обвязку, как у команды. При отправке оной(T) процессор возвращает код ошибки 12\r\n. Исходя из приведенного выше кода напрашивается вывод, что это что-то аля запуск со сбросом по WDT. И еще, искал в интернете и нашел один документик, но, правда, немного не по теме, но там есть замечательная фраза: http://www.cast.com.au/esdk/lpc2/boot-loader.html
  22. Добрый день. Собственно, такая проблема. Делаю свою утилиту для заливки прошивок под процессор NXP2388. Собственно, заинтересовала ISP команда T. В описании на процессор ее нет. В интернете подробного описания - тоже. Какой ее синтаксис и что она делает?