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 CLI 和 NCP 插件依赖于 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
请注意,许多平台已集成随机数生成器,并在其 BSP 软件包中公开了该 API。如果目标硬件平台不支持 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 为可选 API。
最高级别且最详细的级别是 OPENTHREAD_LOG_LEVEL_DEBG
,它会通过串行端口或在终端上输出所有原始数据包信息和日志行。选择最符合您需求的调试级别。
特定于系统
API 声明:
/openthread/examples/platforms/openthread-system.h
系统专用 API 主要为所选硬件平台提供初始化和取消初始化操作。OpenThread 库本身不会调用此 API,但它可能对您的系统/RTOS 有用。您还可以在此源文件中实现其他模块(例如 UART、Radio、Random、Misc/Reset)的初始化。
此 API 的实现取决于您的使用场景。如果您希望为示例平台使用生成的 CLI 和 NCP 应用,则必须实现此 API。否则,您可以实现任何 API 来将示例平台驱动程序集成到您的系统/RTOS 中。