SIM800H – немного практики

advertisement
Системы связи
CHIP NEWS УКРАИНА
SIM800H – немного практики
Евгений Рахно, SIMCom FAE
E-mail: evgenij.rakhno@sim.com
SIM800H появился на нашем рынке сравнительно давно, однако из-за сверхпопулярности его предшественника, легендарного SIM900R, SIM800H все еще не получил широкого распространения и пользователи по-прежнему задают довольно-таки
простые вопросы «общего плана». Одним из них является использование встроенного языка программирования Embedded
AT (сокращенно EAT), позволяющего отказаться от использования внешнего микроконтроллера. В данной статье мы постараемся ответить на этот вопрос с практической точки зрения.
Что такое ЕАТ?
Среда разработки
E
С
mbedded AТ — это технология, поз­
реды разработки, к сожалению,
во­ляющая поместить программу
нет.
поль­зователя, написанную на языке
— Как нет? — спросите вы.
Си, внутрь модуля SIM800H, при этом
— А вот так нет, — отвечу я.
программе поль­зователя дос­тупен весь
Среда разработки, в идеале, долж­
функционал модуля, а в некоторых слу­ на обеспечивать решение трех задач:
чаях ей доступно даже больше, чем • написание кода программы и ком­
внешнему микроконтроллеру.
пиляция проекта;
• программирование устройства;
• отладка программы.
Ресурсы
Так как ЕАТ — это, по сути, прог­
рамма, функционирующая совместно
ользователю доступны следующие с ядром, к которому пользователь до­
аппаратно-программные ресурсы: ступа не имеет, то отладка, в привыч­
• 1.5 Мбайт Flash;
ном для эмбедера смысле этого слова,
• 500 кбайт ОЗУ;
невозможна. Т. е. из трех задач, по­
• 29 GPIO, пять из которых могут слу­ ставленных перед средой разработки,
жить источниками прерываний;
остаются две — написание кода / ком­
• 16 таймеров (в том числе и аппарат­ пиляция и программирование. Для
ные);
программирования, как и в случае с
• SPI/I2C — 1;
SIM900R EAT, используется внешняя
• PWM — 1;
утилита. В результате остается только
написание кода.
• UART — 2;
• USB — 1;
Откровенно говоря, среду разра­
• ADC — 1.
ботки, предлагаемую SIMCom’ом для
SIM900/SIM900R, с большой натяжкой
можно назвать «неудобной». В этот раз
компания SIMCom учла свои недора­
Компилятор
ботки и решила делать либо хорошо,
ервый вопрос, который задают либо никак. В результате пользователь
пользователи: «Какой компилятор?» остался без IDE… И это к лучшему!
Для работы с SIM800H вам потре­
Сразу необходимо отметить, что в
буется RVCT 3.1. Компилятор RVCT 2.2, составе SIM800 EAT идет пример про­
использовавшийся для SIM900R, не по­ екта для Eclipse, однако, мы рассмотрим
дойдет!
именно «рукопашный» вариант:
П
П
2
1. Установите компилятор в корень
диска С. Проверьте его работоспо­
собность.
2. Установите SIM800H EAT в корень
диска С.
3. Найдите файл user.mak в папке C:\
SIM800H_EAT\build и откройте его.
4. Проверьте правильность пара­
метров:
DIR_ARM = С:\RVCT_EAT – путь к
компилятору;
SRC_DIR = demo-папка, в которой
располагается папка проекта;
SRC_OPEN_MODE_NAME = adc —
имя текущего проекта (мы будем
компилировать проект adc);
Файл user.mak — единственный
файл, в который пользователь мо­
жет вносить изменения.
5. Запустите
C:\SIM800H_EAT\
SIM800H32.bat с параметром clean.
6. Запустите SIM800H32.bat с пара­
метром all.
7. Если вы все сделали правильно, то
в папке C:\SIM800H_EAT\output
появятся результаты компиляции:
output\log\output.log — лог-файл
работы компилятора.
Загрузка в модуль
П
осле успешной компиляции вам
непременно захочется проверить
работу вашей программы, а для это­
го необходимо загрузить ее в модуль
(первые шаги в освоении SIM800H бу­
дут проще, если воспользуетесь со­
ответствующей демо-платой, а если у
вас уже есть демо-плата для SIM900R,
то достаточно приобрести лишь
SIM800H_TE). Первое, что вам необхо­
димо для этого сделать, это подключить
модуль к компьютеру при помощи USB
кабеля и подать питание. После этого
компьютер обнаружит новое устрой­
ство и попросит установить для него
драйверы.
Для загрузки используется утилита
«SIMCom_SIM800H_EAT_flash_Tool»
www.chipnews.com.ua
Системы связи
ИНЖЕНЕРНАЯ МИКРОЭЛЕКТРОНИКА
Рис. 1.Загрузка исполняемого файла в модуль
(самую свежую версию «прошивальщика» вам любезно пре­
доставит ваш дист­рибьютор).
Запустите SIMCom_SIM800H_EAT_flash_Tool.exe и выбе­
рите загружаемый файл, а именно C:\SIM800H_EAT\core\
SIM800H32_EMBEDDEDAT\ SIM800H32_EAT.cfg (рис. 1).
Необходимо отметить, что в случае успешной компиляции
файл вашей программы (файл app без расширения) авто­
матически скопируется из папки Output в папку SIM800H32_
EMBEDDEDAT. Нажмите «Download» и свежая версия вашей
программы в течение считанных секунд окажется в модуле.
Итак, теперь вы знаете, как произвести компиляцию и за­
грузить прошивку в модуль.
командной строки, давайте вспомним, что живем мы в 21-м
веке и времена DOS'a давно прошли. Сейчас существует
великое множество сторонних редакторов, как платных, так
и бесплатных, предоставляющих пользователю разнообраз­
ные функция, начиная от подсвечивания синтаксиса и авто­
заполнения членов структур и заканчивая интеграцией со
средствами программирования и отладки. В данной статье
мы рассмотрим работу с таким известным редактором, как
SlickEdit.
Создадим проект и попробуем его скомпилировать
(рис. 2): Project –> New.
Выберем папку проекта и файлы проекта (рис. 3).
Теперь «прикрутим» компилятор. Для этого перейдем на
вкладку Tools и удалим все существующие инструменты (по
SlickEdit
П
осле того, как вы убедились, что редактировать код мож­
но и в блокноте, а компилировать вполне комфортно и из
Рис. 2.Передаточная функция
CHIP NEWS Украина, #3 (143), апрель, 2015
Рис. 3.Наполнение проекта
3
Системы связи
CHIP NEWS УКРАИНА
Рис. 6.Результат компиляции проекта
Рис. 4.Подключение компилятора
Рис. 7.Пример подключения «программатора»
Рис. 5.Подключение компилятора (продолжение)
умолчанию должен быть хотя бы один инструмент. Его мы
удалим потом).
Создадим новый инструмент с именем Compile (рис. 4). В
качестве исполняемого файла укажем наш bat файл, а в ка­
честве аргумента — «all». Нажимаем «Next» и еще раз «Next».
«Run from directory» — выбираем папку, в которой нахо­
дится bat файл (в нашем случае это C:\SIM800H_EAT).
Ставим галочки «Capture output» и «Output to build
window». «Save Option» выставляем по своему усмотрению
(рис. 5). Попробуем? Build –> Compile. Результат компиляции
должен быть представлен в окне Build (рис. 6).
Аналогичным образом прикрутим «программатор»:
Project –> Project Properties… –> Tools –> New. При актива­
ции пункта «Command is Slick-C® macro» черный DOS’овский
экран появляться не будет.
4
Рис. 8.Компилятор и программатор подключены
После подключения «программатора» меню Build будет
выглядеть так, как показано на рис. 8. При желании можно
назначить «горячие клавиши» для созданных нами команд:
Tools –> Options –> Keyboard and Mouse –> Key Bindings.
Итак, компилятор компилирует, прог­рамматор програм­
мирует, а редактор многократно превосходит возможности
www.chipnews.com.ua
Системы связи
ИНЖЕНЕРНАЯ МИКРОЭЛЕКТРОНИКА
Рис. 9.Взаимодействие модуля и программы пользователя
SIM900R IDE. Так нужна ли была соб­ редатчика. В режиме АТ команд размер
ственная среда по типу SIM900R IDE? кольцевого буфера приемника и коль­
Вряд ли…
цевого буфера передатчика составляет
5 кБ для каждого.
Что еще надо знать
до начала работы
с SIM800H EAT?
UART
Пожалуй, наиболее часто задавае­
мым вопросом вне зависимости от того
используется EAT или нет, является во­
прос о количестве UARТ’ов, доступных
пользователю. Сколько их? Стандарт—
но, без использования ЕАТ, пользо­
вателю доступен один UART. Второй,
«урезанный» UART, появляется после
активации его специальной АТ коман­
дой. Он имеет всего два вывода — вход
«RX» и выход «ТХ», что подходит для
большинства приложений. При подклю­
чении модуля к компьютеру при помо­
щи USB в компьютере появляется «вир­
туальный» COM порт, который может
быть использован лишь для обновления
прошивки модуля.
Итак, если вы не используете ЕАТ, то
доступны один полноценный UART, один
«урезанный» порт и один «виртуальный»
USB порт для обновления прошивки.
Пользователям, использующим ЕАТ,
доступно больше. В их распоряжении
по-прежнему находятся «стандартный»
UART, «урезанный» UART и «виртуаль­
ный» COM-порт, однако любой из них
может использоваться для приема и
передачи данных (включая «виртуаль­
ный» COM порт), для работы с АТ ко­
мандами или для вывода отладочной
информации.
В режиме передачи данных пользо­
вателю достны 2-кБ кольцевой буфер
приемника и 2-кБ кольцевой буфер пе­
Модель функционирования ЕАТ
Модель взаимодействия пользова­
тельского ПО и ядра модуля не изме­
нилась по сравнению с EAT для SIM900
(рис. 9). Пользовательское ПО при по­
мощи АТ команд (используется команда
eat_modem_write) либо при помощи API
функций посылает запрос ядру модуля.
Ядро обрабатывает команду и отвечает
пользователю, инициируя то или иное
событие.
Многозадачность
SIM800H работает под управлени­
ем операционной системы реального
времени вытесняющего типа — Nucleus.
Разработчикам доступна одна основ­
ная задача (main_app) и восемь подза­
дач (app_user1..8).
Так как задачи ЕАТ являются частью
функционирования М2М модуля, то они
имеют низкий приоритет. Основная за­
дача имеет приоритет 210, подзадачи
app_user1..8 — приоритет 211–218 со­
ответственно.
Основным способом общения меж­
ду задачами являются сообщения.
Каждая задача имеет определенный
объем памяти, доступный только ей. На­
зовем его «локальные данные», хотя
это и не совсем корректно. «Локальные
данные» хранятся в системной области
памяти. Кроме «локальных данных» су­
ществует и массив памяти, доступный
любой задаче. Назовем его «глобаль­
ные данные». Для SIM800H объем «гло­
бальных данных» составляет 500 кБ.
Объем «локальных данных» для
main_app, app_user1..app_user4 сос­
CHIP NEWS Украина, #3 (143), апрель, 2015
Рис. 10.Структура памяти
тавляет по 10 кБ для каждой задачи.
Объем «локальных данных» для app_
user5..app_user8 равен 2 кБ для каждой
задачи.
Итого: общий объем памяти, доступ­
ной пользователю в текущей версии
EAT (1308B05SIM800H32_EAT), состав­
ляет 558 кБ.
Представление о структуре памяти
можно получить из рис. 10 и следующе­
го программного кода:
char f_buf[100]={};
void maip_app (void)
{
char t_buf[100]={};
}
Таймеры
Работа с таймерами улучшилась.
Пользователю доступны 16 програм­
мных миллисекундных таймеров, один
аппаратный микросекундный таймер и
один RTC таймер.
Разработчики SIMCom пересмотре­
ли принцип реализации миллисекундных
таймеров, и теперь получение преры­
ваний с частотой 100 Гц не является
проблемой. Как это сделать показано
на листинге 1.
Таймер, позволяющий производить
микросекундные отсчеты времени, яв­
ляется аппаратным и любые неточнос­
ти, допущенные в обработчике преры­
ваний от этого таймера, могут повлиять
на устойчивость системы в целом. В
связи с эти компания SIMCom просит
пользователей минимизировать вре­
мя обработки прерываний от данного
таймера. Необходимо также учиты­
вать, что данное прерывание является
аппаратным и может вывести устрой­
ство из Sleep режима.
5
Системы связи
Листинг 1. Получение прерываний с частотой 100Гц
static void app_main(void *data)
{
...
eat_timer_start(EAT_TIMER_1, 1000);
...
switch (event.event)
{
case EAT_EVENT_TIMER :
{
eat_timer_start(event.data.timer.timer_id, 10);
...
}
break;
}
}
Надо отметить, что RTC таймер пре­ GPIO
доставляет разработчику вполне стан­
Пользователю доступно 29 портов
ввода-вывода, 5 из которых могут слу­
дартные функции.
жить источниками прерываний (подроб­
ную информацию о конкретных портах
Sleep
Модуль SIM800H также как и его ввода-вывода можно найти в файле
предшественник SIM900R позволя­ eat_periphery.h).
Инициализация порта ввода-вывода
ет использовать режим пониженного
энергопотребления (порядка 1 мА) производится функцией eat_gpio_setup.
без потери регистрации в сети. Вход в Запись в порт осуществляется функцией
этот режим осуществляется командой eat_gpio_write, чтение — eat_gpio_read.
eat_sleep_enable (EAT_TRUE ), a выход, Время выполнения команды eat_gpio_
соответственно, командой eat_sleep_ write составляет около 2 мкс.
enable (EAT_FALSE). После активации
Пять портов ввода-вывода доступны
Sleep режима модуль будет в автома­ в качестве внешнего источника пре­
тическом режиме периодически про­ рываний.
Инициализация порта в качест­
сыпаться для общения с GSM сетью.
Также модуль проснется при получении ве внеш­него источника прерываний
сообщения либо входящего вызова, при производится при помощи функции
возникновении внешнего прерывания eat_int_setup. В дальнейшем пользова­
(на входе GPIO) или по истечению пе­ тель может изменить событие, приводя­
риода работы таймера.
щее к прерыванию при помощи коман­
Необходимо отметить, что «болтаю­ ды eat_int_set_trigger.
В качестве события, инициирующего
щиеся в воздухе» выводы модуля либо
вообще не позволят уйти в Sleep режим, прерывание, пользователь может за­
либо существенно увеличат энергопот­ давать логический уровень («0» или «1»)
ребление в нем. Простым и вместе с или фронт/срез импульса.
Время реакции на фронт/срез сос­
тем эффективным способом борьбы с
«болтающимися ногами» является пере­ тавляет около 1 мс. В случае исполь­
зования логического уровня в качестве
вод их со входа на выход.
источника прерывания пользователю
доступен такой параметр как «дребезг»
Flash
API функции для работы с Flash па­ (debounce_ms). Время реакции на пре­
мятью позволяют пользователю про­ рывание, вызванное установлением ло­
изводить как стандартные операции гического уровня, равно debounce_ms
чтения-записи Flash памяти, так и опе­ плюс 1 мс.
рации обновления программы. Необхо­
димо отметить, что функция обновления Audio
программы пользователя претерпела
К воспроизведению аудиофайлов
очень серьезные изменения (например, фирма SIMCom подошла основатель­
добавлен вывод для работы с внеш­ но. Разработчику доступно воспроиз­
ним аппаратным WatchDog таймером) ведение аудиофайлов как в форматах
и требует детального изучения. При­ MIDI и WAV, так и в AMR.
мер реализации данной функции вы
Для воспроизведения MIDI и WAV
сможете найти среди демо-проектов файлов используется API функция eat_
SIM800H_EAT в папке Flash.
audio_play_data (для завершения вос­
6
CHIP NEWS УКРАИНА
произведения используется eat_audio_
stop_data), для воспроизведения AMR
файлов — функция AT + CREC.
Для генерации аудиотонов (как DTMF
тонов, так и специализированных зву­
ков, например, звука низкого заряда
аккумуляторной батареи (EAT_TONE_
BATTERY_LOW)) используется функция
eat_audio_play_tone_id (для завершения
генерации — eat_audio_stop_tone_id).
Полный перечень воспроизводи­
мых тонов вы сможете найти в фай­
ле справки (SIM800_Embedded_AT_
Programmer_Guide_V1.02.chm)
по
запросу EatAudioToneId_enum.
Необходимо отметить, что воспро­
изведение тонов «кнопок» (DTMF) имеет
самый низкий приоритет, затем сле­
дует воспроизведение «звуков» и вос­
произведение аудиофайлов, а мелодия
вызова имеет самый высокий приори­
тет. Таким образом, воспроизведение
аудиофайла прервет воспроизведение
DTMF тона, а звук входящего звонка
прервет воспроизведение аудиофайла.
Следует помнить, что для корректной
работы программы параметры, переда­
ваемые функциям eat_audio_play_tone_id
и eat_audio_stop_tone_id должны совпа­
дать (как показывает практика, не для
всех разработчик это очевидно).
Синтаксис
Если вы до этого использовали
SIM900R EAT и теперь решили исполь­
зовать более современный SIM800H, то
вас, естественно, в первую очередь, ин­
тересует вопрос совместимости кода.
С’шные функции, написанные для
SIM900/SIM900R работать будут, а вот
все то, что касается работы с API функ­
циями, сильно изменилось. В первую
очередь необходимо отметить, что идео­
логия осталась прежней, а изменился
непосредственно синтаксис команд. Но
он и не мог не измениться — огромное
количество новых API функций, новая
система реального времени, новая фай­
ловая система, другой подход к вос­
произведению аудиофайлов… Другими
словами, изменения есть и они доволь­
но-таки существенные, но сам подход к
EAT не изменился и писать под ЕАТ для
SIM800H стало значительно проще!
Более детальную информацию можно получить у специа­
листов ООО «Гамма»:
тел.: (056) 745-46-65,
(066) 173-26-79, (096) 480-38-65,
(0562) 36-09-41, (0562) 36-07-92,
(044) 494-35-72,
http://www.microchip.ua
www.chipnews.com.ua
Download