#communication #radio #nrf #arm #cortex-m

no-std esb

Nordic增强ShockBurst通信协议的实现

2个不稳定版本

0.1.0 2020年6月1日
0.0.1 2020年5月1日

#1167 in 嵌入式开发

MIT/Apache

79KB
1.5K SLoC

esb

这是Nordic增强ShockBurst通信协议的非官方实现。

文档

用法示例可以在演示仓库中找到。

增强ShockBurst是Nordic Semiconductor ASA的商标。

许可证

以下任一许可证下发布:

任选其一。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交的任何贡献,都应如上所述双重许可,不附加任何额外条款或条件。


lib.rs:

Rust实现的Nordic增强ShockBurst通信协议

该软件包实现了具有动态有效载荷大小(最多252字节)和确认支持的增强ShockBurst协议。

通信由两个在不同角色中工作的设备执行,一个充当主发射器(PTX),另一个充当主接收器(PRX)。交易始终由PTX启动,通过确认包实现双向通信,其中PRX可以嵌入有效载荷。

该软件包使用bbqueue来处理数据包缓冲,以便能够实现零拷贝实现。对于定时要求,必须预先缓冲必须与确认一起发送的有效载荷。当PRX模式下收到需要确认的包时,驱动程序将尝试从发送队列中取出一个有效载荷发送,如果发送队列为空,则发送一个零大小的有效载荷的确认。

定时要求

为了更好的通信稳定性,无线和定时器中断必须是最高优先级,并且应在中断处理程序的开始处调用驱动程序的方法。在当前实现中,数据速率固定为2Mbps。

有三个可配置选项会直接影响到通信的定时

  • 等待确认超时(us) - 默认:120微秒。

    • 用于PTX模式发送请求确认的包时。它必须大于加速时间
  • 重传延迟偏移(微秒)- 默认:500微秒。

    • 在期望收到确认但未收到时,从传输结束到重传开始之间的延迟。它必须大于确认超时加上一个常数偏移量62微秒。
  • 重传尝试次数 - 默认:3次尝试。

    • 驱动程序将重传需要确认的包的次数。执行完所有尝试后,驱动程序将丢弃该包并继续发送队列中的下一个包。

支持的设备和机架特性

设备 特性
nRF51822 51
nRF52810 52810
nRF52832 52832
nRF52840 52840

可能还有其他设备与此实现兼容,但截至目前,仅测试了上表中的设备。

加速时间

无线电的硬件在开始或接收传输之前需要一段时间。在nRF5设备中,这个时间是140微秒。然而,nRF52设备具有快速加速功能,将这个时间减少到40微秒。可以通过使用此机架的fast-ru功能来启用此功能。在与其他不支持快速加速的设备通信时,必须注意使用快速加速,时序配置必须考虑这种情况。

队列中的数据包表示

此机架使用一些队列空间字节来在用户和驱动程序之间传递信息。用户在选择EsbBuffer大小时必须考虑这一点。此外,必须考虑底层BipBuffer的特性,更多详细信息请参阅bbqueue文档

由bbqueue framed使用 软件使用 实际的DMA部分
frame_size - 1到2字节 rssi - 1字节 | pipe - 1字节 length - 1字节 | pid_no_ack - 1字节 | 有效载荷 - 1到252字节

队列中数据包的最大大小为258字节(有效载荷为252字节)。

nRF24L01+兼容性

当使用最大数据包大小不超过32字节(含)的配置时,此实现仅与nRF24L01+设备兼容。这是必需的,因为nRF24L01+仅支持最大为该大小的有效载荷,并使用6位有效载荷长度,该长度必须在nRF5无线电中配置。

示例

用法示例可以在演示仓库中找到。

依赖项

~0.3–4.5MB
~141K SLoC