Знакомство с программированием DECT-модуля SC14CVMDECT
В данной статье мы познакомимся с программированием DECT модуля SC14CVMDECT, обязательно помигаем светодиодом, а также поделимся опытом разработки решения для SIP-телефонии на базе этого модуля.Что такое DECT DECT (Digital Enhanced Cordless Telephone) — технология беспроводной передачи данных на частотах 1,9 ГГц. Применяется в основном для передачи звука в телефонии. Существует очень много терминов, связанных с DECT, многие из которых чисто маркетинговые и их наличие в спецификации телефонного аппарата не гарантирует совместимость трубок или базовых станций. Вот краткий их перечень: DECT — общий термин, каждый производитель делает свои модификации на базе DECT-технологии. DECT GAP (General Access Profile) — попытка стандартизации функций и процедур DECT-телефонов. DECT EU, US — работа DECT в разных частотных диапазонах, и с разными уровнями мощности. CAT-iq (Cordless Advanced Technology, Internet and Quality) — спецификации поддерживаемых функций. CAT-iq v1 регламентирует в основном передачу звука, CAT-iq v2 — возможность хранения и синхронизации текстовых данных (адресной книги, например), CAT-iq v3 — передача бинарных данных, удалённое обновление прошивки, передача HTTP-контента. FP (Fixed Part) — базовая станция, регистрирующая трубки. PP (Portable Part) — переносная телефонная трубка. Простейшие примеры использования DECTПередача звука Точка-Точка (он же режим Walkie-talkie) — можно использовать для общения двух абонентов без посредников. Передача FP — PP — с трубки можно позвонить на обычную телефонную линию или на SIP-сервер, используя базовую станцию для подключения к ним. Передача FP — несколько PP — аналогично предыдущему примеру, к тому же возможно совершать вызовы Трубка-Трубка (но только через FP), устраивать конференции, совершать несколько параллельных вызовов. Сравнение с Wi-Fi, Bluetooth Кроме беспроводных телефонов DECT, сейчас набирают популярность телефоны Wi-Fi — они проще интегрируются в инфраструктуру организации, поскольку в качестве базовой станции используется обычный Wi-Fi-роутер. К тому же некоторые Wi-Fi-телефоны имеют выход Ethernet — т.е. можно подключать стационарные ПК, в которых нет сетевого адаптера Wi-Fi. В DECT же есть одно неоспоримое преимущество — работа на отдельном диапазоне частот. А с учётом, что Wi-Fi-устройств становится всё больше и больше, это главный плюс. Из дополнительных плюсов DECT по сравнению с Wi-Fi — качественная передача речи, без задержек и разрывов. В Wi-Fi качество тоже может быть хорошим, но только если Wi-Fi-телефон используется как телефон и вокруг не так много радиопомех. Если же он совмещает функции телефона и точки подключения ПК, то нужно настраивать QoS (quality of service) для приоритезации звонков, а это не всегда доступно и не всегда удобно. Если сравнивать DECT с Bluetooth, то тут однозначно лучше DECT. У DECT радиус действия больше. Bluetooth работает на частоте 2,4 ГГц, как и Wi-Fi, т.е. более подвержен помехам, и, как следствие, качество передачи речи хуже. В итоге, остаётся выбор DECT vs Wi-Fi, и однозначного решения, что лучше, нет. Описание кита SC14CVMDECT_AF Более подробная информация: http://www.dialog-semiconductor.com/products/short-range-wireless/cordless-voice-module-(cvm) Общий вид кита: Возможности чипа: DECT ULE (Ultra Low Energy) — поддержка ультранизкого потребления энергии Поддержка протоколов CAT-iq 1.0, 2.0, 3.0 Регистрация до 6 трубок к одной базовой станции Работа в частотных диапазонах: 1880 — 1900 МГц — Европа 1920 — 1930 МГц — США и Канада 1893,5 — 1906,1 МГц — Япония Напряжение питания: 2,1 — 3,45 В Потребление тока: Режим готовности — 4,5 мА Разговор — 30 мА Встроенная антенна. Есть возможность подключения внешней антенны Управляющий интерфейс — UART Передача звука: Возможность подключения микрофона и наушников PCM шина — до 4-х каналов одновременно 324 Кбайт доступной flash-памяти для хранения пользовательской программы 0,4 Кбайт EEPROM для хранения данных пользовательской программы Общая схема подключения внешних устройств: На рисунке приведена схема типовой DECT-трубки на базе микроконтроллера и SC14CVMDECT модуля. Микроконтроллер отвечает за управление ЖКИ-экраном и опрос нажатых кнопок; функции определения уровня заряда батареи, приём и передача звука отведены для DECT-модуля. Возможные варианты разработки приложений Разрабатывать своё приложение, взаимодействующее с DECT-модулем, можно двумя способами: На отдельном устройстве (микроконтроллере) обрабатывать всю логику и обмениваться управляющими данными с DECT-модулем по последовательному порту (UART), используя протокол Busmail. Busmail-протокол имеет механизм для предотвращения потери пакетов (схож с механизмом в HDLC-протоколе), содержит проверку очерёдности пакетов и вычисление контрольной суммы. Одновременно можно отправить максимум 7 пакетов. Подтверждение на приём пакета должно быть отправлено в течение 100 мс. Интегрировать свою логику в приложение на DECT-модуле. С внешним миром оно будет общаться посредством GPIO-контактов и UART. Это называется разработка COLA-приложения (Co-Located Application). Эти варианты отображены на следующем рисунке: Выбор определённого типа разработки зависит, в первую очередь, от сложности приложения. Если приложение несложное, либо использование внешнего микроконтроллера крайне нежелательно, то лучше — второй вариант. В остальных случаях, безусловно, удобнее первый вариант: Он более гибкий — нет жёсткой привязки к архитектуре отдельного DECT модуля. Более наглядный — можно просматривать и анализировать все команды, приходящие от DECT-модуля с ведением логов. Более простой в отладке — узнать причину падения приложения на микроконтроллере проще, чем падения на DECT-модуле. Примеры управления DECT-модулем Для того чтобы проще было разбираться с протоколом DECT-чипа, лучше взять уже готовую утилиту Sendmail.exe — она входит в состав SDK. Поскольку утилита написана для Windows, то и проверять будем на Windows. Эта утилита позволяет отправлять команды в сыром виде. Сам формат команд нужно смотреть в спецификации API_PpCVMDECT_v0808.pdf Для начала, два простых примера — управление светодиодом и проигрывание мелодий. Как помигать светодиодом: Sendmail.exe 31 1 5902 02 03 01 FF 00 00 FF 00 02 0a 00 Первый аргумент Sendmail — номер COM-порта в 10 м формате, т.е. у нас DECT-модуль подключен к COM31. Второй аргумент — номер задачи в DECT-модуле, которой адресуется команда. Для сторонних разработчиков это значение всегда равно 1. Третий — уникальный идентификатор команды в 16 м формате. 0×5902 — это запрос API_HAL_LED_REQ на управление светодиодом. Четвёртый и последующие — аргументы команды в 16 м формате. Для запроса API_HAL_LED_REQ эти аргументы значат:02 — LedNr — номер светодиода 03 — CmdCount — количество заданий 01 FF 00 — 1е задание, включить светодиод на 255 мс (ALI_LED_ON) 00 FF 00 — 2е задание, выключить светодиод на 255 мс (ALI_LED_OFF) 02 0A 00 — 3е задание, повторить все задания 10 раз (ALI_REPEAT_SEQUENCE) Как проиграть мелодию: Sendmail.exe 31 1 5306 16 00 00 02 5306 — запрос API_PP_AUDIO_START_TONE_REQ на включение проигрывания тона или мелодии 16 — ToneIndex — номер тона/мелодии 00 — VolumeDb — громкость в дБ (±127дБ) 00 — TrackGenVol — требуется ли регулировать громкость относительно общего уровня громкости 02 — Dest — устройство вывода звука (API_TONE_HANDSFREE_LSR — через динамик) Получение версии прошивки DECT-модуля: Sendmail.exe 31 1 5200 5200 — API_PP_GET_FW_VERSION_REQ в ответ должны получить что-то похожее на: Result: Primitiv: 5201, Data: 09 88 00 00 12 09 06 17 32 ff 5201 — API_PP_GET_FW_VERSION_CFM 09 88 00 00 — VersionHex — версия прошивки, т.е. 0×00008809 12 09 06 17 32 — LinkDate — дата сборки прошивки, 06 сентября 2012 в 17:32 f — DectType — частотный режим приёмо-передатчика (API_DECT_TYPE_INVALID). Этот параметр важен, если модуль работает в режиме FP. Может быть EU, US, China и др. Для изменения режима нужно отправить запрос API_PROD_TEST_REQ. Если данные примеры не воспроизводятся, восстановите заводские настройки (включается режим PP): Sendmail.exe 31 1 4FFE 02 01 00 01 01 Подождите секунд 10 и отключите COLA (Co-Located Application): Sendmail.exe 31 1 5802 FF 00 А затем перезапустите модуль: Sendmail.exe 31 1 5202 Пример Walkie Talkie (Pp2Pp) — возможность вызова абонентами друг друга Pp2Pp — двусторонняя беспроводная связь между двумя абонентами. В составе SDK есть уже пример Pp2Pp, причём и для случая запуска приложения на DECT-чипе и в случае его запуска с PC. Он универсален, и от того первое знакомство с ним может привести в шок. Мы же рассмотрим, как реализовать связь двух трубок между собой с помощью всё той же консольной утилиты Sendmail.exe. Схема подключения КИТ«ов к PC: Процедура установления связи с использованием Sendmail.exe 1) Вход в режим Pp2PpSendmail.exe 30 1 4920 02 02 30Sendmail.exe 31 1 4920 02 02 31Sendmail.exe 30 1 5324Sendmail.exe 31 1 5324 2) Вызов абонентаSendmail.exe 30 1 4924Sendmail.exe 30 1 4926 31Sendmail.exe 31 1 5306 16 00 00 02 3) Подъём трубкиSendmail.exe 31 1 4929 4) Включение звукаSendmail.exe 30 1 5303 0Sendmail.exe 30 1 5323 01Sendmail.exe 30 1 5301 03 Sendmail.exe 31 1 5303 0Sendmail.exe 31 1 5323 01Sendmail.exe 31 1 5301 03 Ура! Звук пошёл! За этими магическими наборами цифр кроется управление машиной состояний DECT-модуля. Поэтому очерёдность вызовов очень важна. К сожалению, Sendmail.exe не дожидается прихода подтверждающих уведомлений от модуля, и полная картина обмена сообщениями не ясна. А вот на следующем рисунке отображена полная последовательность Busmail-сообщений между ПК и двумя DECT-модулями: Трудности, с которыми мы столкнулись при реальной разработке Реальная задача, в которой использовались DECT-модули — это реализация SIP-телефонов для 6 одновременно зарегистрированных трубок. Причём трубки могут быть различных производителей, главное, чтобы они поддерживали в полном объёме базовый CAT-iq. В качестве DECT-модуля использовался SC14CVMDECT-AF. Одновременно разговор может вестись по 4 м трубкам. Каждая трубка может вызывать одновременно несколько SIP-абонентов и переключаться между ними. Для трубок CAT-iq 2.0 поддерживается общая телефонная книга, информация о пропущенных вызовах и wideband-звонки. Трудности: 1. В первоначальных редакциях SDK настоятельно предлагалось использовать AT-команды. Они похожи на AT-команды модемов, но более специфические. Эти AT-команды генерировало и обрабатывало отдельное приложение, выполняющееся на DECT-модуле. Работали они кое-как, хорошо, что были исходники этого приложения, мы уже начали исправлять какие-то ошибки, как вдруг оказалось, что Dialog Semiconductor отказывается от -команд и заменяет их более низкоуровневыми -командами. На тот момент не было ещё чудо-утилиты Sendmail.exe и её исходников, так что пришлось самим писать парсер и генератор для -протокола, что было, конечно, не самой простой задачей. Но в последних редакциях документацию хорошо подготовили, примеров полно. Так что пользоваться можно без опасений. 2. Многообразие «совместимых» CAT-iq трубок усложняет процедуру установления связи между FP и PP: последовательность Busmail-сообщений может меняться, и об этом в документации мало данных, т.к. одни трубки присылают набранный номер в одном сообщении, другие — в нескольких или в дополнении к иному сообщению. Очень порадовали трубки — 2.0. По сравнению с — 1.0, они гораздо стабильнее работают и процесс взаимодействия наиболее схож с описанным в документации. 3. На момент разработки с трудом нашли трубки CAT-iq 2.0, пришлось заказывать в Германии. Они только появлялись на рынке. Возможно, сейчас ситуация получше. 4. Для UART нужен отдельный драйвер (согласователь уровней), поскольку для него сигнал логической »1» равен 1.8В. 5. Busmail-интерфейс предполагает подтверждение ответа в течении 100 мс. Поэтому обработка Busmail-сообщений должна выполнятся как можно быстрее.Заключение SC14CVMDECT довольно неплохой модуль для реализации поддержки DECT. У него много возможностей, и поэтому его применение только в качестве средства связи двух точек слегка избыточно. Но вот если нужна реализация CAT-iq 2.0, регистрация и одновременная работа нескольких трубок или при отсутствии внешнего микроконтроллера SC14CVMDECT — очень даже неплохой вариант. Жаль только, что в нём не реализовано управление по SPI (для встраиваемых применений SPI иногда удобнее, чем UART).