RAIL(Radio Abstraction Interface Layer,无线电抽象接口层)是 Silicon Labs 为所有网络协议栈提供的最底层无线电软件库,旨在将复杂的 EFR32 无线电硬件抽象为统一、易用的 C API。开发者无需直接操作数百个寄存器,即可实现 proprietary 或 standards-based 协议的开发,同时保证代码在 Silicon Labs 产品系列之间的可移植性。Documentation Index
Fetch the complete documentation index at: https://mintlify.com/dsyx/docs.silabs.com_zh/llms.txt
Use this file to discover all available pages before exploring further.
RAIL 概述
RAIL 库通过 Gecko SDK Suite 提供,并作为 Flex SDK 的核心组件对外发布。在 Flex SDK 中,开发者可以:- 直接基于 RAIL 开发自定义协议
- 使用 Silicon Labs Connect stack 构建低功耗简单网络应用
RAIL 库
提供配置和控制无线电的编程接口,将直观的 API 命令转换为寄存器级操作代码
Radio Configurator
Simplicity Studio 内置工具,根据频率、比特率等参数生成无线电物理层静态配置
RAILtest
通用测试工具,包含每个 RAIL 功能的串行命令,支持脚本化测试和临时实验
示例应用
可直接用于评估或作为应用开发起点,涵盖多种无线场景
所有 EFR32FG 设备均支持 Proprietary 协议。对于其他产品,请在设备数据手册的 Ordering Information > Protocol Stack 下确认是否支持 Proprietary。
API 设计目标
RAIL API 的设计遵循两个核心目标:- 向后兼容性:RAIL API 在主要版本内向后兼容。为 RAIL 2.0 开发的代码应能够与最新的 RAIL 2.x 版本一起运行。
- 跨芯片一致性:RAIL API 在所有支持的器件之间尽可能保持一致。尽管部分 API 并非在所有器件上均可用,但通用操作(如接收、发送和状态转换)在各器件间保持相同。
RAIL 库架构
RAIL 库作为静态链接库提供,链接到开发者的应用程序中。其工作原理是将 API 命令转换为控制无线电和通信功能的寄存器级代码,实现跨 IC 的 API 一致性。- 命令(Commands):由软件主动调用,用于启动某些操作(如开始发送、开始接收)
- 事件(Events):由硬件产生(通常通过中断),通知软件某些状态变化(如接收到帧)
RAIL 核心特性
发送与接收(Simple Transmit and Receive)
发送与接收(Simple Transmit and Receive)
发送和接收均可通过单个 API 启动。发送完成和接收到的数据包通过 RAIL 事件进行通知。
自动状态转换(Automatic State Transitions)
自动状态转换(Automatic State Transitions)
可配置的状态转换机制,根据发送/接收操作的成功或失败自动切换状态。支持可选的延迟设置,以实现状态间的一致时序。
帧缓冲(Frame Buffering)
帧缓冲(Frame Buffering)
提供两个可配置大小的帧缓冲区,分别用于接收和发送,均可保存多个帧。
时间管理(Timekeeping & Timestamping)
时间管理(Timekeeping & Timestamping)
RAIL 自动维护微秒精度的时基,支持:
- 数据包时间戳(默认启用,可在不同数据包位置采样)
- 调度发送和接收操作
- 一个通用定时器(带可选的 MultiTimer 虚拟化)
- 可选的 RTC 同步,支持从 EM2 睡眠模式进行调度
调度发送/接收(Scheduled Transmit/Receive)
调度发送/接收(Scheduled Transmit/Receive)
支持在绝对或相对未来时间点发送数据包;接收可设置起始时间和可选超时。
信道评估与重传(CCA with Retransmission)
信道评估与重传(CCA with Retransmission)
支持两种媒体访问机制:
- CSMA/CA:基于 IEEE 802.15.4 规范
- LBT(Listen Before Talk):基于 ETSI EN 300 220-1 规范
RSSI 读取
RSSI 读取
可读取瞬时和平均 RSSI 值,以及每个接收帧的 RSSI 和 LQI(Link Quality Indicator)测量值。
地址过滤(Address Filtering)
地址过滤(Address Filtering)
支持两个地址字段(固定位置),每个字段最长 4 字节,每个字段可过滤 4 个地址(如单播和广播地址)。地址可在运行时启用和配置。
自动 ACK(Auto ACK)
自动 ACK(Auto ACK)
在每次成功接收后,经过可配置延迟自动发送响应数据包。响应负载可以是固定内容,也可以在发送前由用户动态加载。
Multi-PHY 支持
Multi-PHY 支持
PHY 配置可在运行时更改。RAIL 可动态加载 PHY 配置。
多协议支持(Multiprotocol Support)
多协议支持(Multiprotocol Support)
RAIL 提供专用的多协议库版本,内置无线电调度器,可管理来自不同无线电配置的请求:
- 支持 N ≥ 2 个不同无线电配置的时分复用
- 允许不同配置的不同优先级任务,始终保证最高优先级任务完成
- 允许在时序不严格时移动任务,以实现最稳健的网络
校准支持(Calibration Support)
校准支持(Calibration Support)
器件特定校准,通常包括温度大幅变化时的重校准和镜像抑制校准(提高灵敏度)。
RF 测试流生成
RF 测试流生成
RAIL 可生成连续波(CW)和 PN9 伪随机调制流,支持任意 PHY 配置,用于 RF 测试。
接收天线分集(Receive Antenna Diversity)
接收天线分集(Receive Antenna Diversity)
在接收模式下在两根天线之间切换,选择信号较强的天线以提高灵敏度(仅部分芯片和 PHY 配置支持)。
电源管理支持(Power Manager Support)
电源管理支持(Power Manager Support)
启用后,当无线电开启时通知电源管理器组件,防止进入 EM2 深度睡眠模式。
事件处理示例
RAIL 事件通过回调函数处理。以下是一个典型的事件回调实现:多协议支持与无线电调度器
RAIL 用于实现同时支持多个协议栈的动态多协议解决方案。Silicon Labs 的动态多协议解决方案通过无线电调度器实现——这是一个抢占式优先级调度器,可在协议之间调度无线电硬件。- 单协议 RAIL
- 多协议 RAIL
单协议应用直接使用 RAIL API,通过
RAIL_StartRx() 和 RAIL_StartTx() 控制无线电状态,使用 RAIL_YieldRadio() 在发送完成后让出无线电。对于单协议和多协议 RAIL,API 接口完全相同。多协议 RAIL 库只是在背后增加了调度器仲裁逻辑。详情请参阅 UG305: Dynamic Multiprotocol User’s Guide。
RAIL 版本历史
- RAIL 2.x
- Gecko SDK 3.x
与 RAIL 1.x 相比,RAIL 2.x 新增了多项功能,包括动态多协议支持,并提供了更简洁易理解的 API。RAIL 2.x API 在主要版本内向后兼容,详情参见 AN1113: Porting RAIL Applications to RAIL Version 2.x。
项目结构
基于 Gecko SDK 3.x 的 RAIL 项目采用 component-based 架构,项目结构如下:| 目录/文件 | 说明 |
|---|---|
autogen/ | 仅包含生成的代码:PHY 配置(rail_config.c)、初始化代码、链接器脚本等 |
config/ | 组件配置头文件,可通过 Component Editor 或直接编辑 |
gecko_sdk_x.x.x/ | 组件添加的源文件和二进制文件 |
| 根目录文件 | 仅包含应用特定文件:源文件、.slcp 项目配置文件、.pintool 文件 |
下一步
- 要了解如何安装 Simplicity Studio 并开始 RAIL 开发,请参阅 QSG168: Proprietary Flex SDK v3.x Quick Start Guide
- 深入了解 RAIL 软件开发,请参阅 RAIL API 文档 和 Silicon Labs RAIL 教程
- 多协议应用开发请参阅 UG305: Dynamic Multiprotocol User’s Guide