首页 > 其他分享 >[nRF24L01+] 4. 增强型ShockBurst

[nRF24L01+] 4. 增强型ShockBurst

时间:2024-08-15 10:41:13浏览次数:14  
标签:增强型 数据包 应答 payload nRF24L01 PTX ShockBurst 数据 PRX

4. 增强型ShockBurst

增强型的ShockBurst是一个数据链路层,具有自动数据包组装和数据包的发送、定时、自动确认和重传。这些特性能够显著提高双向和单向系统的能效,而不会增加主机控制器侧的复杂性。

增强型ShockBurst™数据包事务是一种数据包交换,其中一个收发器充当主收发器(PRX, Primary Receiver)而另一个收发器用作主发射器(PTX, Primary Transmitter)。

自动数据包事务处理的工作如下:

  1. PTX先发送数据,然后转为RX模式,接受PRX发送的应答包;

  2. 如果PRX收到了数据,把数据保存后会转为TX模式发送应答包,然后再返回RX模式。

  3. 如果PTX没有收到应答包,会在一个可编程的延迟时间后自动重发原始包的数据,然后切换到RX模式去接收应答包。

上面的这些事件都是增强型ShockBurst完成的,不需要MCU的参与;

4.1. packet format

image

4.1.1. Preamble 前导码

前导码是一个比特序列,用于将接收器解调器与输入比特流同步。前导码长一个字节,为01010101(0x55)或10101010(0xAA)。

如果地址中的第一位是1 前导码被自动设置为10101010,如果第一个比特为0 前导码被自动设置为01010101。这样做是为了确保前导码中有足够的转换来稳定接收机。

4.1.2. Adress

您可以配置 AW 寄存器中的地址字段宽度为3、4或5个字节,见表28。第63页。

注意:设置地址时要避免高低电平只反转一次的,如0x000FFFFFFF,这样的话可能会被当作噪声;也要避免一直反转的地址,否则可能会被认作前导码;

image

4.1.3. 包控制字段

payload length, 数据长度

  1. payload length, 此6位字段指定有效载荷的长度(以字节为单位)。有效载荷的长度可以从0到32字节。

  2. 编码:000000=0字节(仅用于空ACK数据包)100000=32字节,100001=不在乎。

  3. 此字段仅在启用动态有效载荷长度功能(EN_DPL)时使用。

PID(数据包识别)

2-bit的PID防止PRX设备向接收主机MCU多次呈现相同的有效载荷,在TX侧,每当通过SPI接受到新的数据包后PID都会自增。

PRX通过PID和CRC来判定接受的数据是新发送的还是重发的:当数据链路丢失了一些数据包后,如果新来的数据PID和最后一次成功接收的PID相同,并且CRC也相同的话,则说明这包数据是重发的;否则是新发送的数据。

PTX发送两包相同的数据包时,PID会有不用,所以CRC也会不同;而重发的数据则PID和CRC都一样。

image

NO_ACK, 无确认标志

此标志仅在使用自动确认功能时使用。将标志设置为高告诉接收器该数据包不被自动确认。

但是,必须首先通过在FEATURE寄存器中设置EN_DYN_ACK位启用该功能。

当您使用此选项时,PTX在传输数据包后直接进入待机-I模式。PRX在接收到数据包时不发送ACK数据包。

image

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长度:静态的,动态的。

  1. 默认是静态的payload长度。发射器和接收器的长度相同,接收器的长度由RX_PW_Px设置,发射器的长度由TX_FIFO的长度确定,因此要求TX_FIFO的size要和RX_PW_Px的值相同。

  2. 动态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个缓存区呢

image

4.2.2. ART, Auto Retransmission, 自动重发

  1. 自动重发是指在没有收到ACK时重发一次payload,它被用在开启了自动应答的PTX上。如果一个数据包没有被应答,你可以通过在SETUP_RETR寄存器中设置ARC位来设置一个时间重新传输。

  2. PTX在每次发送完数据后都会进入RX模式下等待很少的时间,等待时间基于以下条件:

    • 自动重传延迟(ARD)已过:没有收到数据或者数据不对,会根据用户的重发时间延迟后自动重发,不再等待;
    • 250µs内(或250kbps模式下的500µs内)没有地址匹配:芯片自己的地址匹配,就是收到了数据但是地址不对,不是发给自己的;
    • 收到数据包后(CRC是否正确):数据受到了干扰
  3. 在收到ACK时会触发TX_DS中断

  4. 每一次丢包时会有两个计数器增加:OBSERVER_TX寄存器的ARC_CNT,PLOS_CNTARC_CNT记录的是当前payload重发的次数,当触发下一次新的发送前会被清零。PLOS_CNT记录着自从上次切换通道后总共的重发的次数,当修改RF_CH的值将会清零。这两个数值可以评估当前信道的质量

  5. 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字节地址,适用以下值:
      image

  6. 除了自动重发,你还可以使用 REUSE_TX_PL命令进行手动重发;当这个命令使用时,MCU需要利用 CE管脚初始化每一次的传输。

4.3. MultiCeiver 多接收机

在接收模式下,MultiCeiver允许最多6个数据通道,每个数据通道都有自己独立的物理地址;可以理解为可以接收来自6个发射器的数据。

  1. 数据管道通过EN_RXADDR寄存器中的位启用。默认情况下,只有数据管道0和1启用。每个数据管道地址都在RX_ADDR_PX寄存器中配置。

  2. 6个信道必须都在相同的频率下,他们是依靠地址不同来区分设备的,频率不同就通讯不上了。

  3. 同一时刻最多只有1个信道是工作的,否则的话就会相互干扰通信。

  4. 信道0有唯一的5字节地址,信道1-5共享信道1的高4字节地址;
    image

  5. PRX的自动应答,会将接受到的包地址作为发射地址传输:PTXn的发射地址TX_ADDR必须和PRX的RX_ADDR_Pn相同

    对于PTX来说,不就是数据相当于发给自己了,只不过自己发射的收不到?
    image

4.4. 增强ShockBurst时序

  1. $T_{OA}$, Time On-Air,
    image

  2. $T_{ACK}$, Time On-Air ACK
    image

  3. $T_{UL}$, Time upload
    image

  4. $T_{ESB}$, Time Enhanced ShockBurst cycle

    image

    image

    image

    image

4.5. 增强型ShockBurst传输图

4.5.1. 单次传输图,带ACK和中断

  1. PTX发送数据给PRX

  2. 当PRX接收到数据数据后,RX_DR中断被触发(表示当前DL数据可读),然后发送应答给PTX

  3. 当PTX接受到应答后,TX_DS中断被触发

image

4.5.2. 单次传输,但是丢了一包数据

  1. PTX发送数据给PRX,但是受到了干扰,导致PRX没有收到或者收到后数据错误;

  2. ARD延迟后重发PRX相同的数据

  3. 当PRX接收到数据数据后,RX_DR中断被触发(表示当前DL数据可读),然后发送应答给PTX

  4. 当PTX接受到应答后,TX_DS中断被触发

image

4.5.3. 单次传输,但是丢了一帧应答

  1. PTX发送数据给PRX

  2. 当PRX接收到数据数据后,RX_DR中断被触发(表示当前DL数据可读),然后发送应答给PTX

  3. 当PTX没有收到应答,在延迟ARD时间后重发上次的数据

  4. 当PRX接收到数据数据后,发现是重发数据中断RX_DR不再触发丢弃这次接收的数据,然后发送应答给PTX

  5. 当PTX接受到应答后,TX_DS中断被触发

image

4.5.4. 单次传输,有应答数据

  1. PTX发送数据给PRX

  2. PRX接收到数据后会触发RX_DR中断,接着PRX发送带数据的应答给PTX

  3. 当PTX收到应答后会触发TX_DS中断已经RX_DR中断(PRX的应答数据),然后发送下一个新的数据(PID=2)

  4. 当PRX收到新的数据后会触发RX_DR数据中断以及TX_DS应答中断(PTX发送的新数据可以理解为给PRX的应答,否则PTX就会重发了)

image

4.5.5. 单次传输,带应答数据,但是丢了数据

  1. PTX发送数据给PRX,但是受到了干扰,导致PRX没有收到或者收到后数据错误;

  2. ARD延迟后重发PRX相同的数据

  3. PRX接收到数据后会触发RX_DR中断,接着PRX发送带数据的应答给PTX

  4. 当PTX收到应答后会触发TX_DS中断已经RX_DR中断(PRX的应答数据),然后发送下一个新的数据(PID=2)

  5. 当PRX收到新的数据后会触发RX_DR数据中断以及TX_DS应答中断(PTX发送的新数据可以理解为给PRX的应答,否则PTX就会重发了)

image

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

image

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

image

4.6. 和ShockBurst的兼容性

将寄存器EN_AA=0x00ARC=0设置为禁用增强型ShockBurst,此外,nRF24L01+空中数据速率必须设置为1Mbps或250kbps。

4.6.1. ShockBurst包格式

image

和增强型的相比,区别在于:

  1. 少了9位宽的包控制管理

  2. CRC在ShockBurst™数据包格式中是可选的,由CONFIG寄存器中的EN_CRC位控制 。

标签:增强型,数据包,应答,payload,nRF24L01,PTX,ShockBurst,数据,PRX
From: https://www.cnblogs.com/qiyuexin/p/18360382

相关文章

  • [nRF24L01+] 5. 数据和控制接口
    5.数据和控制接口5.1.特点管脚:IRQ(该信号为低电平有效信号,由三个可屏蔽中断源控制)CE(此信号为高电平,用于在RX或TX模式下激活芯片)CSN(SPI信号)SCK(SPI信号)MOSI(SPI信号)MISO(SPI信号)SPI:速率:0-10Mbps5.2.SPI命令5.2.1.命令格式<Commandword:MSBittoLSBit(onebyte......
  • [nRF24L01+] 3. Radio Control 无线电控制
    3.RadioControl无线电控制nRF24L01+可以配置为:powerdown,standby,Rx/Txmode3.1.无线控制状态图当VDD电压大于1.9V时,进入上电复位状态,并保持复位状态,直到进入掉电模式:需要注意的是:从待机模式到TX/RX模式的过度时间,和反过来,从TX/RX模式到待机模式的过渡时间是相同的;......
  • [nRF24L01+] 1. 硬件设计
    nRF24L01pluss_REFERENCE_MODULES.pdfnrf24l01p_product_specification_1_0.pdf1.硬件设计1.1.实物图[左边是PCB天线,右边是SMA连接器接天线]1.2.接口示意图[接口方块图][接口定义]1.3.电路图[电路图]不同芯片的天线BOM物料差别:RefL01+LE1-Q48LE1-Q3......
  • Excel 表格到 PowerPoint 增强型图元文件图像
    我需要将多个Excel表格作为高分辨率EMF图像移动到多个powerpoint中。我无法将数据链接到powerpoint,因为我需要从源自单个Excel模板的400多个不同Excel模型更新400多个不同的powerpoint,而VBA不是一个选项。所有的幻灯片和Excel模型的格式和布局都完全相同。下......
  • STM32驱动NRF24L01模块
    STM32驱动NRF24L01模块模块简介:NRF24L01模块是一款2.4GHZ无线通信模块。其参数如下:2.4GHzISM频段250Kbps,1Mbps,2Mbps三种空中传输速率输出功率为0dBm时发射功耗为11.3mA空中传输速率为2Mbps时接收功耗为13.5mAPowerdown模式功耗低至900nA,Standby-I模式功耗低至2......
  • nrf24L01 check不通过问题分析
    下面这段代码是有问题的,使nrf24L01check不通过。#include"stm32f10x.h"//Deviceheader#include"spi.h"#include"OLED.h"/******SPI2引脚连接******/#definePA4_SPI1_NSSGPIO_Pin_4#definePA5_SPI1_SCKGPIO_Pin_5#definePA6_SPI1_MISOGPIO_......
  • 带你熟悉CCE集群增强型CPU管理策略enhanced-static
    本文分享自华为云社区《华为云CCE集群增强型CPU管理策略enhanced-static》,作者:可以交个朋友。背景开源Kubernetes默认提供的CPU管理策略有none和static两种:none:不开启CPU管理策略,默认值。static:开启静态绑核的CPU管理策略,允许为节点上具有某些资源特征的Pod(Guaranteedpod......
  • 如何开启Google Ads增强型转化?
    一.概述    GoogleAds向全量商家开放增强型转化功能,该功能将通过加密处理(SHA256方法)的第一方转化数据发送到Google,从而对现有的转化跟踪代码形成补充,旨在提高转化衡量准确性,提升优化效果。二.配置指南登录您的 GoogleAds帐号。点击帐号右上角的“工具和设置......
  • CSci 4061 增强型自动平地机
    CSci4061:操作系统简介2024年春季项目2:增强型自动平地机中间到期时间:3/15午夜1.目标在这个项目中,你将通过多种方式扩展/增强你的自动标记。你将使用管道(管道)在自动转换器及其子级(可执行文件)之间通信信息,2)使用I/O重定向(dup2)和随机I/O(seek),3)使用消息传递队列来实现差异,并使用警报......
  • VS2019自带的增强型指令集和自我优化的版本速度比较.
    去年年底把工程项目由VS的2015升级到2019版本,本以为直接配置下运行环境就可以了,但是一编译发现一大堆错误,所有的错误都指向一系列的指令集,比如_mm_exp_ps、_mm_log_ps、_mm_pow_ps等等,后面发现原来从2019版本开始,编译器已经自带了这些常用的函数,所以自己函数和系统的重名了,也......