[nRF24L01+] 4. 增强型ShockBurst
4. 增强型ShockBurst
增强型的ShockBurst是一个数据链路层,具有自动数据包组装和数据包的发送、定时、自动确认和重传。这些特性能够显著提高双向和单向系统的能效,而不会增加主机控制器侧的复杂性。
增强型ShockBurst数据包事务是一种数据包交换,其中一个收发器充当主收发器(PRX, Primary Receiver)而另一个收发器用作主发射器(PTX, Primary Transmitter)。
自动数据包事务处理的工作如下:
PTX先发送数据,然后转为RX模式,接受PRX发送的应答包;
如果PRX收到了数据,把数据保存后会转为TX模式发送应答包,然后再返回RX模式。
如果PTX没有收到应答包,会在一个可编程的延迟时间后自动重发原始包的数据,然后切换到RX模式去接收应答包。
上面的这些事件都是增强型ShockBurst完成的,不需要MCU的参与;
4.1. packet format

4.1.1. Preamble 前导码
前导码是一个比特序列,用于将接收器解调器与输入比特流同步。前导码长一个字节,为01010101(0x55)或10101010(0xAA)。
如果地址中的第一位是1 前导码被自动设置为10101010,如果第一个比特为0 前导码被自动设置为01010101。这样做是为了确保前导码中有足够的转换来稳定接收机。
4.1.2. Adress
您可以配置 AW 寄存器中的地址字段宽度为3、4或5个字节,见表28。第63页。
注意:设置地址时要避免高低电平只反转一次的,如0x000FFFFFFF,这样的话可能会被当作噪声;也要避免一直反转的地址,否则可能会被认作前导码;

4.1.3. 包控制字段
payload length, 数据长度
payload length, 此6位字段指定有效载荷的长度(以字节为单位)。有效载荷的长度可以从0到32字节。
编码:000000=0字节(仅用于空ACK数据包)100000=32字节,100001=不在乎。
此字段仅在启用动态有效载荷长度功能(
EN_DPL)时使用。
PID(数据包识别)
2-bit的PID防止PRX设备向接收主机MCU多次呈现相同的有效载荷,在TX侧,每当通过SPI接受到新的数据包后PID都会自增。
PRX通过PID和CRC来判定接受的数据是新发送的还是重发的:当数据链路丢失了一些数据包后,如果新来的数据PID和最后一次成功接收的PID相同,并且CRC也相同的话,则说明这包数据是重发的;否则是新发送的数据。
PTX发送两包相同的数据包时,PID会有不用,所以CRC也会不同;而重发的数据则PID和CRC都一样。

NO_ACK, 无确认标志
此标志仅在使用自动确认功能时使用。将标志设置为高告诉接收器该数据包不被自动确认。
但是,必须首先通过在FEATURE寄存器中设置EN_DYN_ACK位启用该功能。
当您使用此选项时,PTX在传输数据包后直接进入待机-I模式。PRX在接收到数据包时不发送ACK数据包。

d: 如果激活了ACK-payload,那么带有ACK数据包具有动态有效载荷长度,并且应为PTX和PRX上的管道0启用动态有效载荷长度功能。这是为了确保他们收到带有有效载荷的ACK数据包。
意思是说,开启了ACK-payload后,payload是动态数据长度的,因为它有可能回复一个数据,因此PTX和PRX的管道0都要开启
EN_DPL功能。如果在2Mbps模式下ACK有效载荷大于15字节,则ARD必须为500µS或更大,如果在1Mbps模式下确认有效载荷大于5字节,则ARD必须为500μS或更高。在250kbps模式下(即使有效载荷未处于ACK状态),ARD必须为500µS或更高。
4.1.4. payload
payload就是数据包里用户定义的内容,可以是0~32字节;有两种payload长度:静态的,动态的。
默认是静态的payload长度。发射器和接收器的长度相同,接收器的长度由
RX_PW_Px设置,发射器的长度由TX_FIFO的长度确定,因此要求TX_FIFO的size要和RX_PW_Px的值相同。动态payload长度
DPL,允许发射器发射不同长度的payload,这对于需要发射数据的长度不一致很有用,不再必须填充为相同的长度了。
4.1.5. CRC
CRC校验的字节由CONFIG寄存器中的CRCO位设置,校验的内容包括:地址、分组控制字段和有效载荷。
The polynomial for 1 byte CRC is $X8+X2+X+1$ , Initial value 0xFF.
The polynomial for 2 byte CRC is $X{16}+X+X^5+1$ . Initial value 0xFFFF.
4.2. 自动包处理
4.2.1. AA, Auto acknowledgement 自动应答
自动应答是在PRX接受到有效数据后自动发送应答包数据,通过设置EN_AA寄存器启用自动确认功能。如果接收的包数据NO_ACK标志位被置位,也不会有自动应答。
一个自动应答包,是可以包含payload的,也就是说可以回传一些数据。为了实现这一点,DPL, Dynamic Payload Length动态数据长度功能必须启用,同时PRX侧的MCU需要把payload上传到TX-FIFO里,最多存3个payload(3字节?),
TODO: 这里有点不清楚,
这样在收到新的数据时就可以把payload发送出去。24L01+有3个payload缓存FIFO
当收到数据包后会解析出用哪个地址的payload进行应答,盲猜是利用PID匹配,但是只有3个而不是4个缓存区呢

4.2.2. ART, Auto Retransmission, 自动重发
自动重发是指在没有收到ACK时重发一次payload,它被用在开启了自动应答的PTX上。如果一个数据包没有被应答,你可以通过在SETUP_RETR寄存器中设置ARC位来设置一个时间重新传输。
PTX在每次发送完数据后都会进入RX模式下等待很少的时间,等待时间基于以下条件:
- 自动重传延迟(ARD)已过:没有收到数据或者数据不对,会根据用户的重发时间延迟后自动重发,不再等待;
- 250µs内(或250kbps模式下的500µs内)没有地址匹配:芯片自己的地址匹配,就是收到了数据但是地址不对,不是发给自己的;
- 收到数据包后(CRC是否正确):数据受到了干扰
在收到ACK时会触发
TX_DS中断每一次丢包时会有两个计数器增加:
OBSERVER_TX寄存器的ARC_CNT,PLOS_CNT;ARC_CNT记录的是当前payload重发的次数,当触发下一次新的发送前会被清零。PLOS_CNT记录着自从上次切换通道后总共的重发的次数,当修改RF_CH的值将会清零。这两个数值可以评估当前信道的质量Auto Retransmit Delay (ARD) 定义着上次发送完成到下次开始重发的时间延迟,ARD在
SETUP_RETR寄存器中以250µs的步长设置。ARD的时间不能设置的过短(有可能发射的数据还没有完成,怎么接受应答呢):2Mbps数据速率和5字节地址;15字节是最大ACK数据包有效载荷长度 ARD=250µs(重置值)。
1Mbps数据速率和5字节地址;5 字节是最大ACK数据包有效载荷长度 ARD=250µs(重置值)。
ARD=500µs对于1或2Mbps模式下的任何ACK有效载荷长度来说都足够长。
对于250kbps数据速率和5字节地址,适用以下值:

除了自动重发,你还可以使用
REUSE_TX_PL命令进行手动重发;当这个命令使用时,MCU需要利用CE管脚初始化每一次的传输。
4.3. MultiCeiver 多接收机
在接收模式下,MultiCeiver允许最多6个数据通道,每个数据通道都有自己独立的物理地址;可以理解为可以接收来自6个发射器的数据。
数据管道通过
EN_RXADDR寄存器中的位启用。默认情况下,只有数据管道0和1启用。每个数据管道地址都在RX_ADDR_PX寄存器中配置。6个信道必须都在相同的频率下,他们是依靠地址不同来区分设备的,频率不同就通讯不上了。
同一时刻最多只有1个信道是工作的,否则的话就会相互干扰通信。
信道0有唯一的5字节地址,信道1-5共享信道1的高4字节地址;

PRX的自动应答,会将接受到的包地址作为发射地址传输:PTXn的发射地址
TX_ADDR必须和PRX的RX_ADDR_Pn相同对于PTX来说,不就是数据相当于发给自己了,只不过自己发射的收不到?

4.4. 增强ShockBurst时序
$T_{OA}$, Time On-Air,

$T_{ACK}$, Time On-Air ACK

$T_{UL}$, Time upload

$T_{ESB}$, Time Enhanced ShockBurst cycle




4.5. 增强型ShockBurst传输图
4.5.1. 单次传输图,带ACK和中断
PTX发送数据给PRX
当PRX接收到数据数据后,
RX_DR中断被触发(表示当前DL数据可读),然后发送应答给PTX当PTX接受到应答后,
TX_DS中断被触发

4.5.2. 单次传输,但是丢了一包数据
PTX发送数据给PRX,但是受到了干扰,导致PRX没有收到或者收到后数据错误;
ARD延迟后重发PRX相同的数据
当PRX接收到数据数据后,
RX_DR中断被触发(表示当前DL数据可读),然后发送应答给PTX当PTX接受到应答后,
TX_DS中断被触发

4.5.3. 单次传输,但是丢了一帧应答
PTX发送数据给PRX
当PRX接收到数据数据后,
RX_DR中断被触发(表示当前DL数据可读),然后发送应答给PTX当PTX没有收到应答,在延迟ARD时间后重发上次的数据
当PRX接收到数据数据后,发现是重发数据中断
RX_DR不再触发丢弃这次接收的数据,然后发送应答给PTX当PTX接受到应答后,
TX_DS中断被触发

4.5.4. 单次传输,有应答数据
PTX发送数据给PRX
PRX接收到数据后会触发
RX_DR中断,接着PRX发送带数据的应答给PTX当PTX收到应答后会触发
TX_DS中断已经RX_DR中断(PRX的应答数据),然后发送下一个新的数据(PID=2)当PRX收到新的数据后会触发
RX_DR数据中断以及TX_DS应答中断(PTX发送的新数据可以理解为给PRX的应答,否则PTX就会重发了)

4.5.5. 单次传输,带应答数据,但是丢了数据
PTX发送数据给PRX,但是受到了干扰,导致PRX没有收到或者收到后数据错误;
ARD延迟后重发PRX相同的数据
PRX接收到数据后会触发
RX_DR中断,接着PRX发送带数据的应答给PTX当PTX收到应答后会触发
TX_DS中断已经RX_DR中断(PRX的应答数据),然后发送下一个新的数据(PID=2)当PRX收到新的数据后会触发
RX_DR数据中断以及TX_DS应答中断(PTX发送的新数据可以理解为给PRX的应答,否则PTX就会重发了)

4.5.6. 2次传输,带数据应答;但是第一次的应答包丢失

4.5.7. 两次传输,但是达到最大重发次数

4.6. 和ShockBurst的兼容性
将寄存器EN_AA=0x00和ARC=0设置为禁用增强型ShockBurst,此外,nRF24L01+空中数据速率必须设置为1Mbps或250kbps。
4.6.1. ShockBurst包格式

和增强型的相比,区别在于:
少了9位宽的包控制管理
CRC在ShockBurst数据包格式中是可选的,由
CONFIG寄存器中的EN_CRC位控制 。
[nRF24L01+] 4. 增强型ShockBurst的更多相关文章
- NRF24L01注意点
nrf24L01被设置为接收模式后,可通过6个不同的数据通道(data pipe)接收数据. 每个数据通道都有一个唯一的地址但是各数据通道的频率是相同的.这意味着可以有6个被配置成发送状态的nRF24 ...
- NRF24L01学习
一.工作模式 PWR_UP和PRIM_RX在寄存器0x00中的第0位和第1位. 待机模式I:只是使用晶振工作,CE=0时是拉低? 待机模式II:部分时钟缓冲器处在工作模式.TX FIFO为空并且CE为 ...
- [nRF51822] 13、浅谈nRF51822和NRF24LE1/NRF24LU1/NRF24L01经典2.4G模块无线通信配置与流程
前言: nRF51可以支持基于2.4G的互相通信.与NRF24LE1的通信.与NRF24LU1的通信.与NRF24L01的通信. 一.nRF51822基于2.4G和nRF51822通信 其中nRF5 ...
- NRF24L01双向无线通信
最近闲来无事,利用手头资源研究了一下基于nrf24L01的双向通信实验,整个系统如下图所示. 原理: nrf24L01本身是一种单向通信的无线模块,但是,当nrf24L01工作在增强型的 ShockB ...
- nRF24L01芯片控制——迈向无线的第一步
nRF24L01芯片是一款专供单片机的射频收发芯片.工作于2.4GHz~2.5GHz ISM频段.融合了shockburst技术. 我先列出该芯片的硬件参数资料: 至于每个引脚的具体用途,可以参见技术 ...
- 【Espruino】NO.15 nRF24L01+无线收发器
http://blog.csdn.net/qwert1213131/article/details/35853747 本文属于个人理解,能力有限,纰漏在所难免,还望指正! [小鱼有点电] [Espru ...
- 玩转X-CTR100 l STM32F4 l NRF24L01+ 2.4G无线通信
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 NRF24 ...
- nRF24L01P的ShockBurst与Enhance ShockBurst
nRF24L01P的数据手册里讲到了两个两种发射模式ShockBurst Mode和Enhanced ShockBurst Mode.但是呢,手册里着重的一直在讲Enhanced ShockBurst ...
- nRF24L01无线模块笔记
nRF24L01模块 官网链接: https://www.nordicsemi.com/Products/nRF24-series 常见的无线收发模块, 工作在2.4GHz频段, 适合近距离遥控和数据 ...
- NRF24L01 无线模块的使用
NRF24L01 是一款工作在2.4-2.5GHz通用ISM频段的单片收发芯片 工作电压:1.9-3.6V低电压工作 高速率:2Mbps,由于空中传输时间很短,极大的降低了无线传输中的碰撞现象 多频点 ...
随机推荐
- Python 安装 matlabengin 时遇到报错:setup.py install is deprecated. !! 以及 Cannot update time stamp of directory 'dist\matlabengine.egg-info' 的解决方案
目录 Python 安装 matlabengin 时遇到报错:setup.py install is deprecated. !! 以及 Cannot update time stamp of dir ...
- 记一次 MatPlotLib 报错及解决方案:AttributeError: module 'matplotlib.cbook' has no attribute '_Stack'
记一次 MatPlotLib 报错及解决方案 目录 记一次 MatPlotLib 报错及解决方案 解决方法 具体发生了什么 报错 log 1 内容 报错 log 2 内容 最近出现 MatPlotLi ...
- Android无障碍自动化结合opencv实现支付宝能量自动收集
Android无障碍服务可以操作元素,手势模拟,实现基本的控制.opencv可以进行图像识别.两者结合在一起即可实现支付宝能量自动收集.opencv用于识别能量,无障碍服务用于模拟手势,即点击能量. ...
- Linux内核中的各种文件系统:proc、tmpfs、devfs、sysfs
Linux内核中的各种文件系统:proc.tmpfs.devfs.sysfs 背景 刚学完proc文件系统在内核驱动 中的使用,就看到另外的sysfs的有关接口.很好奇proc文件系统和sysfs文件 ...
- SpringMVC原理(1)-文件上传请求
我们文件上传接口只需要在方法参数上写MultipartFile类,mvc就可以帮我们把上传的文件封装为这个类的对 象供我们非常方便的操作,那它是怎么做的呢?我们一起来看看 我们发的请求默认都是由Dis ...
- 案例分享!RK3568 + FPGA多通道AD采集处理与显示
案例展示 测试数据汇总 表 1 本文带来的是基于瑞芯微RK3568J + 紫光同创Logos-2的ARM + FPGA多通道AD采集处理与显示案例. 本次案例演示的开发环境如下: Wind ...
- 嵌入式入门必看!调试工具安装——基于 AM64x核心板
本章节内容是为评估板串口安装USB转串口驱动程序.驱动适用于CH340.CH341等USB转串口芯片. USB转串口驱动安装 适用安装环境:Windows 7 64bit.Windows 10 64b ...
- 继续我们的复习之路——webapi
前面断更几天是因为在住安心复习DOM BOM的内容 不得不说 还得是DOM 在这一章节的复习内容中 涌现出了很多又代表意义 经典的一些小案例 而且 还是有些难度的 有一两个我反正是自己独立完成不了 ...
- LabVIEW之项目文件结构透析
代码的管理非常重要,LabVIEW本身自带很多代码管理工具.下面来剖析一个相对标准的小项目:
- [oeasy]python0119_语言的演化_拉丁字符_罗马帝国_罗马体
罗马拉丁字符 回忆上次内容 起源于埃及的 圣书体 象形文字 在与 两河流域的 苏美尔楔形文字 结合后 经过 腓尼基人 的拼音化 和 广泛传播 终于来到了 希腊 添加图片注释,不超过 140 ...