Внедрение API уровня абстракции платформы

Посмотреть исходный код на GitHub

OpenThread не зависит от ОС и платформы и имеет узкий уровень абстракции платформы (PAL). Этот PAL определяет:

Портирование архитектуры
  • Аварийный интерфейс для автономного таймера с будильником
  • Шинные интерфейсы (UART, SPI) для передачи сообщений CLI и Spinel
  • Радиоинтерфейс для связи IEEE 802.15.4-2006
  • Процедуры инициализации, специфичные для GCC
  • Энтропия для генерации истинных случайных чисел
  • Сервис настроек для энергонезависимого хранилища конфигурации
  • Интерфейс ведения журнала для доставки сообщений журнала OpenThread
  • Системные процедуры инициализации

Все API должны быть реализованы на основе базового пакета поддержки сборки (BSP) аппаратного уровня абстракции (HAL).

Файлы API должны быть размещены в следующих каталогах:

Тип Каталог
Реализация PAL для конкретной платформы /openthread/examples/platforms/ platform-name
Заголовочные файлы — API энергонезависимого хранилища /openthread/examples/platforms/utils
Все остальные заголовочные файлы /openthread/include/openthread/platform
ХАЛ БСП /openthread/third_party/ platform-name

Тревога

Декларация API:

/openthread/include/openthread/platform/alarm-milli.h

Alarm API предоставляет основные сервисы синхронизации и сигнализации для реализации таймера верхнего уровня.

Существует два типа службы сигнализации: миллисекунды и микросекунды . Для новой аппаратной платформы требуется миллисекунда. Микросекунда необязательна.

UART

Декларация API:

/openthread/examples/platforms/utils/uart.h

UART API реализует фундаментальную связь через последовательный порт через интерфейс UART.

Хотя надстройки OpenThread CLI и NCP зависят от интерфейса UART для взаимодействия со стороной хоста, поддержка UART API не является обязательной. Однако, даже если вы не планируете использовать эти надстройки на своем примере с новой аппаратной платформой, мы настоятельно рекомендуем добавить поддержку по нескольким причинам:

  • CLI полезен для проверки правильности работы порта.
  • Инструмент автоматизации Harness использует интерфейс UART для управления OpenThread в целях тестирования и сертификации.

Если целевая аппаратная платформа поддерживает модуль USB CDC, а не UART, убедитесь, что:

  • Установите правильный драйвер USB CDC на стороне хоста.
  • Замените реализацию UART API драйвером USB CDC (вместе с BSP) на стороне OpenThread, используя те же прототипы функций.

Радио

Декларация API:

/openthread/include/openthread/platform/radio.h

Radio API определяет все необходимые функции, вызываемые верхним MAC-уровнем IEEE 802.15.4. Радиочип должен полностью соответствовать спецификации IEEE 802.15.4-2006 2,4 ГГц.

Из-за улучшенной функции низкого энергопотребления OpenThread требует, чтобы все платформы реализовывали автоматическое ожидание кадра (непрямая передача) по умолчанию, а таблица соответствия адресов источника также должна быть реализована в исходном файле radio.h .

Однако, если ваш пример с новой аппаратной платформой ограничен в ресурсах, исходная таблица адресов может быть определена как нулевая. Дополнительную информацию см. в разделе « Автоматическое ожидание кадра» .

Разное/Сброс

Декларация API:

/openthread/include/openthread/platform/misc.h

Misc/Reset API предоставляет метод сброса программного обеспечения на чипе и запроса причины последнего сброса.

Энтропия

Декларация API:

/openthread/include/openthread/platform/entropy.h

Entropy API предоставляет генератор истинных случайных чисел (TRNG) для верхнего уровня, который используется для поддержки активов безопасности для всей сети OpenThread. API должен гарантировать, что новое случайное число генерируется для каждого вызова функции. Активы безопасности, затронутые TRNG, включают:

  • AES CCM одноразовый номер
  • Случайный задержанный джиттер
  • Расширенный адрес устройств
  • Начальный случайный период в таймере струйки
  • Идентификаторы токена/сообщения CoAP

Обратите внимание, что многие платформы уже интегрировали генератор случайных чисел, предоставляя API в своем пакете BSP. В случае, если целевая аппаратная платформа не поддерживает TRNG, рассмотрите возможность использования выборки модуля АЦП для генерации случайного числа фиксированной длины. При необходимости выполните несколько итераций для удовлетворения требований TRNG (uint32_t).

Если для макроса MBEDTLS_ENTROPY_HARDWARE_ALT установлено значение 1 , этот API также должен предоставлять метод для создания аппаратной энтропии, используемой в библиотеке mbedTLS.

Энергонезависимое хранилище

Объявления API:

/openthread/include/openthread/platform/flash.h

или

/openthread/include/openthread/platform/settings.h

Требование к энергонезависимому хранилищу может быть удовлетворено путем реализации одного из двух API, перечисленных выше. Flash API реализует драйвер флэш-накопителя, а Settings API предоставляет функции для реализации базовой операции флэш-памяти на верхнем уровне.

Эти API предоставляют доступ к верхнему уровню:

  • Доступный размер энергонезависимой памяти, используемой для хранения данных приложения (например, активный/ожидающий рабочий набор данных, текущие сетевые параметры и учетные данные устройств потоков для повторного подключения после сброса).
  • Операции чтения, записи, стирания и запроса состояния флэш-памяти

Используйте OPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE в основном файле конфигурации примера вашей платформы, чтобы указать, какой API должна использовать платформа. Если установлено значение 1 , должен быть реализован Flash API. В противном случае необходимо реализовать API настроек.

Этот флаг должен быть установлен в вашем /openthread/examples/platforms/ platform-name /openthread-core- platform-name -config.h .

Ведение журнала

Декларация API:

/openthread/include/openthread/platform/logging.h

Logging API реализует функции ведения журнала и отладки OpenThread с несколькими доступными уровнями вывода отладки. Этот API является необязательным, если вы не планируете использовать ведение журнала OpenThread в примере с новой аппаратной платформой.

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

Системный

Декларация API:

/openthread/examples/platforms/openthread-system.h

Системный API в первую очередь обеспечивает операции инициализации и деинициализации для выбранной аппаратной платформы. Этот API не вызывается самой библиотекой OpenThread, но может быть полезен для вашей системы/RTOS. Вы также можете реализовать инициализацию других модулей (например, UART, Radio, Random, Misc/Reset) в этом исходном файле.

Реализация этого API зависит от вашего варианта использования. Если вы хотите использовать сгенерированные приложения CLI и NCP для примера платформы , вы должны реализовать этот API. В противном случае можно реализовать любой API для интеграции примеров драйверов платформы в вашу систему/RTOS.