Статья «Знакомство с программированием 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

Общий вид кита:

Возможности чипа:

  • DECT ULE (Ultra Low Energy) – поддержка ультранизкого потребления энергии
  • Поддержка протоколов CAT-iq 1.0, 2.0, 3.0
  • Регистрация до 6 трубок к одной базовой станции
  • Работа в частотных диапазонах:
  1. 1880 – 1900 МГц – Европа
  2. 1920 – 1930 МГц – США и Канада
  3. 1893,5 – 1906,1 МГц – Япония
  • Напряжение питания: 2,1 – 3,45 В
  • Потребление тока:
  1. Режим готовности – 4,5 мА
  2. Разговор – 30 мА
  • Встроенная антенна. Есть возможность подключения внешней антенны
  • Управляющий интерфейс – UART
  • Передача звука:
  1. Возможность подключения микрофона и наушников
  2. 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м формате. 0x5902 – это запрос 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
API_PP_GET_FW_VERSION_CF

  • 09 88 00 00 – VersionHex – версия прошивки, т.е. 0x00008809
  • 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) Вход в режим Pp2Pp
Sendmail.exe 30 1 4920 02 02 30
Sendmail.exe 31 1 4920 02 02 31
Sendmail.exe 30 1 5324
Sendmail.exe 31 1 5324

2) Вызов абонента
Sendmail.exe 30 1 4924
Sendmail.exe 30 1 4926 31
Sendmail.exe 31 1 5306 16 00 00 02

3) Подъём трубки
Sendmail.exe 31 1 4929

4) Включение звука
Sendmail.exe 30 1 5303 0
Sendmail.exe 30 1 5323 01
Sendmail.exe 30 1 5301 03

Sendmail.exe 31 1 5303 0
Sendmail.exe 31 1 5323 01
Sendmail.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).