2个不稳定版本
0.1.0 | 2020年6月1日 |
---|---|
0.0.1 | 2020年5月1日 |
#1167 in 嵌入式开发
79KB
1.5K SLoC
esb
这是Nordic增强ShockBurst通信协议的非官方实现。
用法示例可以在演示仓库中找到。
增强ShockBurst是Nordic Semiconductor ASA的商标。
许可证
以下任一许可证下发布:
- Apache License, Version 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据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