Google 致力于为黑人社区推动种族平等。查看具体行动

实现平台抽象层 API

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

在 GitHub 上查看源代码

OpenThread 与操作系统和平台无关,具有狭窄的平台抽象层 (PAL)。此 PAL 定义了:

移植架构
  • 设有闹钟的闹钟响铃接口
  • 用于连接 CLI 和 Spinel 消息的总线接口(UART、SPI)
  • 用于 IEEE 802.15.4-2006 通信的无线接口
  • GCC 专用初始化例程
  • 真正随机数的熵
  • 非易失性配置存储的设置服务
  • 用于传送 OpenThread 日志消息的日志记录接口
  • 系统特定的初始化例程

所有 API 都应基于底层硬件抽象层 (HAL) Build 支持软件包 (BSP) 来实现。

API 文件应放在以下目录中:

类型 目录
针对具体平台的 PAL 实现 /openthread/examples/platforms/platform-name
头文件 - 非易失性存储 API /openthread/examples/platforms/utils
所有其他头文件 /openthread/include/openthread/platform
HAL BSP /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 CLINCP 插件依赖于 UART 接口才能与主机端交互,但 UART API 支持是可选的。不过,即使您不打算在新的硬件平台示例中使用这些插件,我们也强烈建议您添加相关支持,原因如下:

  • CLI 可用于验证端口是否正常运行
  • 自动化测试框架工具使用 UART 接口控制 OpenThread,以进行测试和认证

如果目标硬件平台支持 USB CDC 模块而不是 UART,请确保:

  • 在主机端安装正确的 USB CDC 驱动程序
  • 在 OpenThread 端将 UART API 实现替换为 USB CDC 驱动程序(以及 BSP),并使用相同的函数原型

无线装置

API 声明:

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

Radio API 定义了由上层 IEEE 802.15.4 MAC 层调用的所有必要函数。无线装置芯片必须完全符合 2.4GHz IEEE 802.15.4-2006 规范。

由于其增强型低功耗功能,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 Nonce
  • 随机延迟抖动
  • 设备的扩展地址
  • 滴水计时器中的初始随机时间段
  • CoAP 令牌/消息 ID

请注意,许多平台都已集成随机数生成器,该 API 在其 BSP 软件包中公开。如果目标硬件平台不支持 TRNG,请考虑利用 ADC 模块采样来生成固定长度的随机数字。通过多次迭代来采样,以满足 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。否则,必须实现 Settings API。

此标志必须在 /openthread/examples/platforms/platform-name/openthread-core-platform-name-config.h 文件中设置。

日志记录

API 声明:

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

Logging API 实现了 OpenThread 的日志记录和调试功能,并提供多个级别的调试输出。如果您不打算在新的硬件平台上使用 OpenThread 的日志记录功能,则该 API 是可选的。

最高且最详细的级别是 OPENTHREAD_LOG_LEVEL_DEBG,它会输出所有原始数据包信息,并通过串行端口或终端记录日志行。选择最符合您需求的调试级别。

系统专用

API 声明:

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

系统专用 API 主要用于为所选硬件平台提供初始化和反初始化操作。此 API 不会由 OpenThread 库本身调用,但可能对您的系统/RTOS 很有用。您还可以在此源文件中实现其他模块(例如 UART、电台、随机、其他/重置)的初始化。

此 API 的实现取决于您的用例。如果您希望将生成的 CLI 和 NCP 应用用于示例平台,则必须实现此 API。否则,可以实现任何 API 以将示例平台驱动程序集成到您的系统/RTOS 中。