nRF52840的Radio模块详解

6.20 RADIO – 2.4Ghz radio

2.4 GHz Radio收发器兼容多种无线电标准,如1 Mbps、2 Mbps和远程低功耗蓝牙。完全支持IEEE 802.15.4的250 kbps模式,以及Nordic专用的1 Mbps和2 Mbps操作模式。

下面列出了Radio的主要功能:

•多频段2.4 GHz无线电收发器:

•1 Mbps、2 Mbps和长距离(125 kbps和500 kbps模式)低功耗蓝牙

•250 kbps的IEEE 802.15.4模式

•1 Mbps和2 Mbps的Nordic专有模式

•一流的链路预算和低功耗运行

•具有支持EasyDMA的高效数据接口

•自动地址过滤和模式匹配

EasyDMA结合了自动数据组包器和数据拆包器,以及自动CRC生成器和CRC检查器,使Radio的配置和使用变的非常容易。详见第307页的“RADIO block diagram(RADIO框图)”。

Radio包括一个设备地址匹配单元和一个帧间间隔控制单元(IFS control unit),可用于简化低功耗蓝牙和类似应用中的地址白名单和帧间间隔控制功能。

Radio还包括接收信号强度指示器(RSSI)和位计数器。当Radio发送或接收到预配置数量的位时,位计数器生成事件。

6.20.1包配置

无线数据包包含以下字段:前导码(PREAMBLE)、地址(ADDRESS)、S0、长度(LENGTH)、S1、有效载荷(PAYLOAD)和CRC。

Radio数据包的内容如第307页的“On air packet layout(空中包结构)”所示。Radio数据包中的不同字段按如下顺序从左到右发送:

图中未显示静态有效负载附加项(其长度在STATLEN中定义,在标准BLE数据包中为0字节长)。静态有效负载附加项在有效负载和CRC字段之间发送。无线电设备按照上面所示的顺序从左到右发送数据包中的不同字段。前导码将以最低有效位优先(LSB)在空中发送。

前导码以最低有效位优先在空中发送。前导码的大小取决于MODE寄存器中选择的模式:

•对于MODE=Ble_ 1Mbit以及所有Nordic专用操作模式(MODE=Nrf_1Mbit和MODE=Nrf_2Mbit),前置码为一个字节,PCNF0寄存器中的PLEN字段必须相应的设置。如果地址的第一位为0,则前导码将设置为0xAA,否则前导码会设置为0x55。

•对于MODE=Ble_2Mbit,必须通过PCNF0寄存器中的PLEN字段将前导码设置为2字节长。如果地址的第一位为0,则前导码将设置为0xAAAA,否则前导码会设置为0x5555。

•对于MODE=Ble_LR125Kbit和MODE=Ble_LR500Kbit,前导码是0x3C重复10次。

•对于MODE=Ieee802154_250Kbit,前导码长度为4字节,并设置为全零。

Radio数据包保存在在RAM中的radio结构体实例中,如第308页的“In-RAM representation of radio packet - S0, LENGTH and S1 are optional(RAM中的radio数据包——S0、LENGTH、S1是可选的)”。该数据结构中省略了前导码、地址、CI、TERM1、TERM2和CRC字段。

ADDRESS和PAYLOAD字段在空中传输的字节顺序始终是最低有效字节优先,而CRC字段是最高有效字节优先。ADDRESS字段总是在空中首先发送和接收最低有效。CRC字段总是首先发送和接收最高有效。S0、LENGTH、S1和PAYLOAD字段的位序,即发送和接收位的顺序,可通过PCNF1中的ENDIAN进行配置。

S0、LENGTH和S1字段的大小可以分别通过PCNF0中的S0LENLFLENS1LEN单独配置。如果这些字段中的任何一个被配置为长度小于8位,则使用字段中最低有效位。

如果S0、LENGTH或S1的长度为零,则该字段将在内存中省略,否则每个字段将表示为一个单独的字节,而不管它们的空中数据包中的位数。

MAXLEN的配置无关,S0、LENGTH、S1和PAYLOAD的组合长度不能超过258字节。

6.20.2地址配置

空中无线电地址字段(ADDRESS)由两部分组成,基址字段(BASE)和地址前缀字段(PREFIX)。

基址字段的大小可通过PCNF1中的BALEN进行配置。如果BALEN小于4,基址将从最低有效字节截断。请参阅第308页的“Definition of logical addresses(逻辑地址定义)”。

空中地址在BASEnPREFIXn寄存器中定义,只有在写入这些寄存器时,用户才能与实际的空中地址相关。对于其他无线电地址寄存器,如TXADDRESSRXADDRESSRXMATCH寄存器,使用范围从0到7的逻辑无线电地址。空中无线电地址和逻辑地址之间的关系在第308页的“Definition of logical addresses(逻辑地址定义)”中描述。

6.20.3数据白化

Radio能够进行数据包的白化和去白化。

有关如何启用白化,请参见PCNF1寄存器中的WHITEEN。启用后,在发送和接收数据包时,Radio将自动处理白化和去白化。

使用多项式 生成白化字,然后将其与要白化或去白化的数据包异或。请参见下图。

将在整个包上执行白化和去白化(除了前导码和地址字段)。

第309页“Data whitening and de-whitening(数据白化与去白化)”中所示的线性反馈移位寄存器(Linear Feedback Shift Register-LFSR)可通过DATAWHITEIV寄存器初始化。

6.20.4CRC

Radio中的CRC生成器计算整个包的CRC时不包括前导码字段。如果需要,地址字段也可以从CRC计算中删除。更多有关信息,请参阅CRCCNF寄存器。

CRC多项式是可配置的,如第309页上n位CRC的CRC生成所示,其中CRCPOLY寄存器中的位0对应于X0,位1对应于X1等等。更多有关信息,请参阅CRCPOLY寄存器。

如第309页的“CRC generation of an n bit CRC(n位CRC的生成)”所示,CRC是通过CRC生成器串行馈送数据包来计算的。在通过CRC生成器对数据包计时之前,CRC生成器的锁存器b0到bn将用CRCINIT寄存器中指定的预定义值初始化。当通过CRC生成器对整个数据包计时时,锁存器b0到bn将保存生成的CRC。Radio在传输和接收期间都将使用该值,但CPU在任何时候都无法读取该值。然而,无论接收到的CRC是否通过校验,CPU都可以通过RXCRC寄存器读取接收到的CRC。

CRC的长度(n)是可配置的,更多有关信息,请参阅CRCCNF寄存器。

在接收到包括CRC的整个数据包后,如果未检测到CRC错误,则Radio将生成CRCOK事件,或者如果检测到CRC错误,则生成CRCERROR事件。

在接收到数据包后,可以从CRCSTATUS寄存器读取CRC校验的状态。

6.20.5Radio状态

任务TASK和事件EVENT用于控制Radio的工作状态。

Radio可以输入下表所述的状态。

状态

描述

DISABLED

Radio内部没有任何操作,功耗最低

RXRU

Radio正在升高功率准备接收

RXIDLE

Radio已经准备好开始接收

RX

接收已开始,正在监视RXAddress寄存器中启用的地址

TXRU

Radio正在升高功率准备传输

TXIDLE

Radio已经准备好开始传输

TX

Radio正在传输数据包

RXDISABLE

Radio正在关闭接收

TXDISABLE

Radio正在关闭发送

Radio的概述状态图如第310页的“Radio states(Radio状态)”所示。

注:ENDSTART快捷方式不应与Ble_LR125Kbit、Ble_ LR500Kbit和Ieee802154_250Kbit模式一起使用。更确切的说是PHYENDSTART快捷方式。

此图显示了任务(tasks)和事件(events)与Radio操作之间的关系。Radio不能阻止任务从错误状态触发。如果任务从错误状态触发,例如,如果RXEN任务从RXDISABLE状态触发,这可能会导致错误行为。如第310页的“Radio states(Radio电状态)”所示,即使有效载荷为零,也总会生成有效载荷事件。

6.20.6传输序列

在Radio能够传输数据包之前,它必须首先在TX模式下提升功率。

参见第310页“Radio states(Radio状态)”中的TXRU和第311页的“Transmit sequence(传输序列)”。触发TXEN任务时,会进入TXRU状态即功率提升。在Radio功率提升成功后,它将生成READY事件,表示可以进行包传输。

包传输的开始是通过START任务触发的。如第310页的“Radio states(Radio状态)”所示,在Radio进入TXIDLE状态后,START任务可以被首先触发。

第311页上的“Transmit sequence(传输序列)”展示了不使用快捷方式的单包传输,即控制Radio发送流程的不同任务需要CPU主动触发。如果不使用快捷方式,则在READYSTART之间以及ENDDISABLED之间,CPU执行会引入一定的延迟。如第311页的“Transmit sequence(传输序列)”所示,默认情况下,Radio将在READYSTART之间以及ENDDISABLED之间发送“1”。传输的内容可以通过MODECNF0寄存器中的DTX字段修改。

第311页“Transmit sequence(传输序列)”的修改版本在第311页“Transmit sequence using shortcuts to avoid delays(使用快捷方式避免延迟的传输序列)”中说明,其中Radio配置为在READYSTART之间以及在ENDDISABLED之间使用快捷方式,这意味着没有引入延迟。

Radio能够一个接一个地发送多个数据包,而不必在发送每个包时先禁用再重新启用Radio,这在第312页的“Transmission of multiple packets(多包传输)”中说明。

6.20.7接收序列

在Radio能够接收数据包之前,它必须先在RX模式下提升功率。

参见第310页“Radio states(Radio状态)”中的RXRU和第312页的“Receive sequence(接收序列)”。

触发RXEN任务时,启动RXRU使功率上升。在Radio功率上升完成时,它将生成READY事件,表示可以开始数据包的接收。通过触发START任务来启动包的接收。如第310页的“Radio states(Radio状态)”所示,在无线电进入RXIDLE状态后,可以首先触发START任务。

第312页上的“Receive sequence(接收序列)”展示了不使用快捷方式时单个数据包的接收,即CPU主动触发控制Radio接收流程所需的不同任务。如果不使用快捷方式,则在READYSTART之间以及ENDDISABLED之间,会因为CPU执行引入一定的延迟。如第312页上的“Receive sequence(接收序列)”所示,Radio将从START开始到接收到具有有效前导码(P)的这段时间内,一直监听并且可能会接收到未定义的数据(用“X”表示)。

第312页上“Receive sequence(接收序列)”的略微修改版本在第313页的“Receive sequence using shortcuts to avoid delays(使用快捷方式避免延迟的接收序列)”中进行了说明,其中Radio配置为在READYSTART之间以及ENDDISABLED之间使用快捷方式,这意味着没有引入延迟。

Radio能够一个接一个地接收多个数据包,而不必在接收每个数据包时禁用和重新启用Radio,如第313页上的“Reception of multiple packets(多包接收)”所示。

6.20.8接收信号强度指示器

Radio实现了一种测量接收信号功率的机制。该功能被称为接收信号强度指示器(received signal strength indicator-RSSI)。

RSSI被连续测量并使用单极IIR滤波器对其值进行滤波。在信号电平变化后,RSSI将在大约 后稳定下来。

通过使用RSSISTART任务开始接收信号强度的采样。可以从RSSISAMPLE寄存器读取采样。

RSSI的采样周期由 定义。RSSISAMPLE将在该采样周期之后保持滤波后的接收信号强度。

为了使RSSI采样有效,必须在接收模式(RXEN任务)下启用Radio,并且必须开始接收(READY事件后的START任务)。

6.20.9帧间间隔

帧间间隔是两个连续数据包之间的时间间隔。

它被定义为从收到的前一个数据包的最后一个比特结束到随后传输的数据包的第一个比特开始的时间,以微秒为单位。只要TIFS不短于RADIO的周转时间,即关闭接收器,然后再打开发射器所需的时间,RADIO就能执行TIFS寄存器中指定的这个时间间隔。

TIFS寄存器可以在收到空中最后一个比特之前的任何时间点写入。

这个时间点在下图中有所说明。

如图所示,TIFS持续时间从空中的最后一个比特开始(就在END事件之前),并在空中传输的第一个比特(就在READY事件之后)时结束。

只有当END_DISABLEDISABLED_TXENEND_DISABLEDISABLED_RXEN快捷方式被启用时,TIFS才被强制执行。TIFS适用于使用默认提升功率的BLE_1MBIT、BLE_2MBIT、BLE_LR125KBIT、BLE_LR500KBIT和Ieee802154_250Kbit模式。SHORTSTIFS不是双缓冲的,可以在收到空中最后一个比特之前的任何时间点更新。MODE寄存器是双缓冲的,它的参数将在进行TXENRXEN任务时被应用。

6.20.10设备地址匹配

设备地址匹配功能是为低功耗蓝牙和类似实现中的地址白名单而定制的。

该功能可以在空中接收数据包时进行即时的设备地址匹配。该功能仅在接收模式下工作,并且Radio要被配置为小端模式,见PCNF1.ENDIAN

设备地址匹配单元假定有效载荷的前48位是设备地址,S0的第6位是TxAdd位。关于设备地址、TxAdd和白名单的更多信息,请参见蓝牙核心规范。

Radio能够同时监听八个不同的设备地址。除了DACNF寄存器中配置的TxAdd位之外,这些地址在DAB/DAP寄存器对中指定,每个地址一对。DAB寄存器指定设备地址的32个最低有效位,而DAP寄存器指定设备地址的16个最高有效位。

每个设备地址都可以被单独包含进匹配机制之内或排除在匹配机制之外。由DACNF寄存器配置。

6.20.11位计数器

Radio实现了一个简单的计数器,可以被配置为在传输或接收了特定数量的比特后产生一个事件。

通过使用快捷方式,这个计数器可以从Radio产生的不同事件开始,从而相对于这些事件进行计数。

位计数器通过触发BCSTART任务启动,通过触发BCSTOP任务停止。当位计数器计数到BCC寄存器中指定的比特数时,将产生一个BCMATCH事件。位计数器将继续计数位,直到产生DISABLED事件或触发BCSTOP任务。因此,CPU可以在一个BCMATCH事件后,为同一数据包内的新BCMATCH事件重新配置BCC值。

只有在Radio收到ADDRESS事件后,才能启动位计数器。

位计数器将在BCSTOPSTOPENDDISABLE任务时停止和重置。

下图说明了如何利用位计数器在数据包有效载荷的开始部分产生一个BCMATCH事件,并在发送2个字节(16比特)的有效载荷后再次产生第二个BCMATCH事件。

6.20.12IEEE 802.15.4相关操作

MODE=Ieee802154_250kbit时,无线电模块将符合IEEE 802.15.4-2006标准,实现其250 kbps 2450MHz O-QPSK物理层。

IEEE 802.15.4标准与Nordic的专利和低功耗蓝牙模式不同。明显的区别是调制方案和信道结构,但也包括数据包结构、安全和介质访问控制(medium access control-MAC)。

IEEE 802.15.4模式的主要特点是:

- 超低功率的250 kbps 2450MHz IEEE 802.15.4-2006连接

- 空闲信道评估

- 能量检测扫描

- CRC生成

6.20.12.1包结构

IEEE 802.15.4标准定义了使用与BLE模式不同的空中帧/包。

下图提供了一个物理帧结构及其时序的概述:

PPDU中使用octet表示1个八位字节,时序中单个符号周期为16us。

总的可用有效载荷(PSDU)是127个octet,但当使用CRC时,可用有效载荷就减少到125个octet。

前导码序列由全部为零的四个octet组成。这些octet用于接收机同步。在四个octet之后是一个名为“帧起始界定符”(SFD)的octet,固定值为0xA7。用户可以通过SFD寄存器对这个值进行修改。这个功能是为了给那些使用非标准协议的用户提供一个初始级的帧过滤。这在比较拥挤或私有网络里很有用。前导序列和SFD由Radio模块生成,而不是由用户将其写到帧缓冲器中。

PHY报头(PHR)是同步报头(SHR)之后的单个octet。最低的七个有效位表示随后的PSDU的帧长度。对于符合标准的帧,保留最高有效位并将其设置为零。Radio模块总会上报这个octet的8个位,因为它可能被用来携带一些其他信息。PHR将是第一个通过PACKETPTR写到帧数据内存的字节。长度为零的帧将被丢弃,在这种情况下也不会生成FRAMESTART事件。

接下来的N个octet将携带PHY包的数据,其中N等于PHR的值。由于同样使用IEEE 802.15.4 MAC层的实现,PHY的数据将是N-2个octet的MAC帧,因为一个CRC字段将占用两个octet。

一个IEEE 802.15.4的 MAC帧总是由一个头(帧控制字段(FCF)、序列号(Seq)和寻址字段(Addressing fields))、一个有效载荷(MAC payload)和16位帧控制序列(FCS)组成,如下图所示。

两个octet的FCF包含了关于这是什么类型的帧,它使用什么寻址,以及其他控制标志的信息。这个字段在使用Radio提供的辅助操作模式时被解码。

序列号是单个的octet,对一个帧来说是唯一的。它将用于帧接收成功后发送的相关确认帧中。

寻址字段可以是0个octet(确认帧),也可以最多到20个octet。该字段用于表示接收设备地址和发送设备地址。IEEE 802.15.4将其寻址建立在具有16位标识符的PANs网络和具有16位或64位地址的节点上。在辅助接收模式下,这些参数将被加以分析以进行地址匹配和确认。

MAC有效载荷携带更上层的数据或是由MAC层自己使用的MAC命令帧信息。

最后两个octet包含16位ITU-T CRC。FCS的计算范围是从MAC的头(MHR)开始到MAC的载荷(MSDU)结束。该字段在发送帧时自动计算,或在接收帧时保存在CRCSTATUS寄存器中。此功能由CRC模块(如果已配置)自主处理。

6.20.12.2工作频率

IEEE 802.15.4标准在2450MHz频段内定义了16个通道[11 - 26],每个通道5MHz。

Radio模块的FREQUENCY寄存器必须按照下表进行设置,以便在为每个通道定义的中心频率上正确操作。

6.20.12.3能量检测(Energy detection-ED)

IEEE 802.15.4标准要求可以在信道带宽内对接收信号功率进行采样,以确定是否活跃。

不应试图对信道上的信号进行解码,这可以通过在将Radio设置成接收模式之前禁用READY事件和START任务之间的快捷方式来实现。对RSSI样本进行平均化的能量检测(ED)的测量时间是8个符号周期(128微秒)。该标准进一步规定测量值为0至0xFF之间的数字--其中0应表示接收功率低于所选接收器灵敏度10dB以上。ED值的功率范围必须至少为40dB,精度为±6dB。更多细节请参见IEEE 802.15.4标准中的6.9.7接收机ED部分。下面给出了一个ED扫描的例子。

下面是一段代码片段,显示了如何执行单个ED测量并转换为IEEE 802.15.4标度。

有关硬件值和dBm之间的缩放,请参见第319页的“Conversion between hardware value and dBm(硬件值和dBm之间的转换)”。

MAC层的mlme-scan.req使用ED测量来检测可能存在无线活动的信道。为了协助这一操作,Radio提供了一种专门的模式,在这种模式下可以指定测量次数并追踪最大的ED级别。通过向EDCNT寄存器写入一个非0的值表示次数,即可开启该模式,Radio会在运行指定次数后向EDSAMPLE寄存器写入测量到的最大值。扫描从EDSTART任务开始,其结束由EDEND事件指示。这大大降低了中断频率,从而降低了功耗。下图显示了使用EDCNT寄存器时,ED测量会如何操作。

始终可以通过启动EDSTOP任务来停止正在进行的扫描。当模块终止时,会出现EDSTOPPED事件。

6.20.12.4空闲信道评估(Clear channel assessment -CCA)

IEEE 802.15.4实现了一种listen-before-talk的信道接入方法,以避免传输时发生冲突--即载波侦听多址接入/避免冲撞协议(CSMA-CA)。这其中的关键部分是测量无线介质是否繁忙。

至少有3种方式要被支持:

•模式1(能量高于阈值):当检测到任何高于ED阈值的能量时,介质报告忙

•模式2(仅限载波侦听):检测到符合IEEE 802.15.4标准且具有相同调制和扩展特性的信号时,介质报告忙

•模式3(载波侦听和阈值):通过对模式1和模式2的结果进行逻辑“与”或“或”运算,介质报告忙

此外,还规定空闲信道评估的测量周期应等于8个符号周期或128微秒。

Radio模块必须处于接收模式,并且在执行CCA时能够接收到正确的数据包。如果在测量过程中不进行基带处理,必须禁用READYSTART之间的快捷方式。

模式1是通过首先在CCACTRL中配置CCAMODE =EdMode然后向CCAEDTHRES字段写入一个选定的值而启用的。当CCASTART任务被写入时,无线电模块将执行8个符号周期的ED测量,并将测量的电平与CCAEDTHRES字段中的电平进行比较。如果测量值高于或等于该阈值,则产生CCABUSY事件,如果测量值小于阈值,则产生CCAIDLE事件。

CCAEDTHRESCCAEDLEVEL值到dBm的转换可以通过以下公式完成,其中  是硬件上报的值,可以转换为CCAEDTHRESCCAEDLEVEL,常数ED_RSSISCALEED_RSSIOFFS来自电气规范:

模式2是通过配置CCAMODE=CarrierMode启用的。在载波模式下,模块将在8个符号周期内采样,查看能否发现有效的SFD。如果发现一个有效的SFD,就会产生CCABUSY事件同时节点不应该发送任何数据。如果扫描是在一个正在进行帧接收的过程中进行的,也会产生CCABUSY事件。在测量周期结束而没有检测到SFD的情况下,会生成CCAIDLE任务。在CCA_CORR_COUNT不等于零的情况下,算法将在SFD检测信号的基础上查看相关器的输出。如果在扫描期间上报发现了一个SFD,它将立即终止,并表示介质繁忙。同样,如果高于CCA_CORRTHRES的峰值数超过CCA_CORR_COUNT则生成CCABUSY事件。如果发现少于CCA_CORR_COUNT,并且没有上报发现SFD,将产生CCAIDLE信号同时节点才可以开始发送数据了。

对于CCA_MODE=CarrierEndMode或CCA_MODE=carrierRedMode,执行模式1和模式2并对结果进行逻辑组合。CCABUSYCCAIDLE信号将基于执行能量检测和载波检测扫描的内部信号的结果的ANDing或ORing而生成。

始终可以通过写入CCASTOP任务来停止正在进行的CCA。这将触发相关的CCASTOPPED事件。

对于CCA模式的自动化,有三种快捷方式可用。一个是在CCAIDLETXEN之间。但这个快捷方式必须与CCAIDLESTOP之间的快捷方式一起启用。这个自动化可以使Radio模块在RX(当执行CCA时)和发送数据包的TX模式之间自动切换。与CCA模块相关的最后一个快捷方式是在CCABUSYDISABLE之间。这将导致每当CCA报告介质繁忙时Radio被失能。另一个方便的快捷方式在RXREADYCCASTART之间。当Radio功率提升到RX模式时,它可以立即启动CCA

6.20.12.5循环冗余校验(Cyclic redundancy check-CRC)

IEEE 802.15.4使用从MAC报头(MHR)到MAC服务数据单元(MSDU)计算的16位ITU-T循环冗余校验(CRC)。

本标准定义了以下多项式生成器:

在接收模式下,当接收到帧长(PHR)后的第一个octet时,Radio将触发CRC模块。然后,CRC将在每次接收到octet时连续更新。当接收到完整帧时,CRCSTATUS寄存器也会相应的更新,并生成EVENTS_CRCOKEVENTS_CRCERROR。当启用CRC模块时,它不会将最后两个octet(CRC)写入帧数据RAM。在传输时,将从PHR后的第一个octet开始动态计算CRC,并最终插入到帧的最后两个octet里。EasyDMA将从DataRAM中提取帧长减2个octet,最后插入两个octet的CRC。

以下是用来配置CRC模块在IEEE 802.15.4模式下正确运行的代码段。

CRCCNF写入16位CRC,CRCPOLY写入0x121。IEEE 802.15.4使用的起始值为零,所以CRCINIT配置为0。

ENDIANESS子寄存器必须设置为little endian(小端),因为FCS字段首先传输最左边的位。

6.20.12.6传输序列

通过首先将Radio置于接收模式然后发送RXEN任务来开始传输。

IEEE 802.15.4传输的概要如下图所示。

接收器将提升功率并进入RXIDLE状态,在此状态下会产生READY事件。收到就绪事件后,CCA通过写入CCASTART任务寄存器启动。然后将执行所选的评估模式(CCA_MODE寄存器),并在128微秒后发出CCAIDLECCABUSY事件信号。如果收到CCABUSY,Radio将不得不在IEEE 802.15.4标准中规定的特定退避周期之后重试CCA(见7.5.1.4 CSMA-CA算法标准中的图69)。

另一方面,当CCAIDLE事件产生时,用户应写TXEN任务寄存器,进入TXRU状态。当Radio处于TXIDLE状态并准备发送时,将产生READY事件。然后把PACKETPTR指向帧的长度(PHR)字段后就可以写START任务开始传输了。Radio将发送四个octet的前导序列,然后是帧的起始界定符(SFD寄存器)。从数据RAM中读取的第一个字节是长度字段(PHR),然后传输表示帧长度的字节数。如果配置了CRC模块,它将读取PHR-2个字节。最后两个字节将被运行CRC模块的结果所取代。CRC模块所需参数在START任务中被应用。帧的FCS字段是little endian(小端)的。

除了已有的快捷方式外,在READY事件和CCASTART任务之间还提供了一个快捷方式,以便CCA在接收机准备好时自动启动。在CCAIDLE事件和TXEN任务之间还增加了第二个快捷方式,以便在检测到一个空闲的信道时,Radio可以立即进入发射模式。

6.20.12.7接收序列

开始接收时首先将Radio置于接收模式,再写入RXEN任务后,Radio将提升功率,完成后进入RXRU状态。

当生成READY事件时,Radio已进入RXIDLE模式。要启用基带处理,必须写入START任务。IEEE 802.15.4接收的概要如下图所示。

当收到一个有效的SHR时,Radio将开始保存后面的octet(从PHR开始)到PACKETPTR所指向的缓存中。在收到SFD的那个octet后,会产生FRAMESTART事件。如果CRC模块被启用,它将从收到的第二个字节(有效载荷的第一个字节)开始更新,并计算整个帧的长度。

CRC被配置时,帧中的最后两个字节不会被写入DataRAM。然而,如果计算全帧后CRC的结果为零,将产生CRCOK事件。当收到最后一个octet并在DataRAM中可用时,将产生END事件。

当收到一个数据包时,也会生成一个链路质量指示符(LQI),并把它追加到接收到的最后一个octet之后。当接收符合IEEE 802.15.4标准的帧时,它在MSDU之后,因为FCS还没有被上报。在非标准帧时,它被追加到完整帧的最后。硬件上报的LQI必须通过8位饱和乘以4转换为IEEE 802.15.4规定的范围,如ED采样的代码示例所示。LQI仅对等于或长于三个octet的帧有效。当接收帧时,将在接收期间的三个时间点测量RSSI(报告为负dB)。这三个值将被排序,并选择中间一个值(中位数3),然后在LQI范围内重新映射。下图说明了LQI测量以及数据在DataRAM中的排列方式:

一个快捷方式被添加在了FRAMESTART事件和BCSTART任务之间。这可用于在N位之后触发BCMATCH事件,例如在检查MAC寻址字段时。

6.20.12.8帧间间隔

IEEE 802.15.4标准定义了一个特定的时间,分配给MAC子层来处理收到的数据。使用这个帧间间隔(IFS)是为了避免两个帧在时间上过于接近。如果一个传输请求要求被确认,第二帧的间隔应至少是IFS周期。

IFS必须:

•如果MPDU小于或等于aMaxSIFSFrameSize(18个octet),则IFS等于macMinSIFSPeriod(12个符号周期)

•如果MPDU大于aMaxSIFSFrameSize,则IFS等于macMinLIFSPeriod(40个符号周期)

使用Radio模块中的高效辅助模式,TIFS将根据正在传输的帧进行正确配置。如果未使用辅助模式,用户必须手动更新TIFS寄存器。下图提供了在已应答和未应答传输中IFS周期有效的详细信息。

6.20.13EasyDMA

Radio使用EasyDMA从RAM中读取待发送的数据包并将已接收到的数据包写入RAM,无需CPU参与。

如第307页的“RADIO block diagram(无线电框图)”所示,无线电的EasyDMA使用相同的PACKETPTR来接收和发送数据包。每次START启动Radio之前,CPU都应重新配置该指针。PACKETPTR寄存器是双缓冲的,这意味着它可以被更新并为下一次传输做好准备。

重要提示:如果PACKETPTR未指向数据RAM区域,则EasyDMA传输可能会导致HardFault或RAM损坏。有关不同内存区域的更多信息,请参见第19页的memory。

END事件表示Radio已经处理了最后一个位。DISABLED事件的发出是为了确认一个DISABLE任务已经完成。

无线电数据包的结构在第307页的“Packet configuration(数据包配置)”中详细描述。存储在RAM中并由EasyDMA传输的数据由以下字段组成:

- S0

- LENGTH

- S1

- PAYLOAD

此外,静态附加项(如果有)将在有效载荷之后被立即发送。

帧中上述每个字段的大小都是可配置的(参见第307页的“Packet configuration(数据包配置)”),RAM中的空间占用取决于这些设置。任何一个字段的大小都可以为零,用户需要确保生成的帧符合所选的RF协议。

所有字段的大小都被会扩展,以便与RAM中的字节边界对齐。例如,一个3比特长的空中字段将在RAM中占据1个字节,而一个9比特长的字段将被扩展到2个字节。

Radio数据包所包含的元素可以按以下配置:

CITERM1TERM2字段仅存在于低功耗蓝牙的远程模式

S0通过PCNF0中的S0LEN字段配置

LENGTH通过PCNF0中的LFLEN字段配置

S1通过PCNF0中的S1LEN字段进行配置

PAYLOAD的大小是通过RAM中与LENGTH字段相对应的值来配置的

PAYLOAD的静态附加项的大小通过PCNF1中的STATLEN字段进行配置

PCNF1寄存器中的MAXLEN字段配置了可由Radio传输或接收的数据包的最大有效载荷和附加项的大小(字节数)。该功能可用于确保Radio不会覆盖或读取超出分配给数据包有效载荷的RAM。这意味着,如果PCNF1.STATLEN定义的数据包有效载荷长度和数据包中的LENGTH字段指定的数据包长度大于MAXLEN,有效载荷将在MAXLEN处被截断。

注:MAXLEN包括有效载荷和附加项,但不包括S0LENGTHS1字段占用的大小。分配RAM时必须考虑到这一点。

如果设置的有效载荷和附加项长度大于MAXLEN,Radio仍将以与以前相同的方式发送或接收,只是有效载荷现在被截断到MAXLEN。当有效载荷被截断时,数据包的LENGTH字段将不会被改变。Radio将计算长度等于MAXLEN的CRC。

注:如果PACKETPTR未指向数据RAM区域,则EasyDMA传输可能会导致HardFault或RAM损坏。有关不同内存区域的更多信息,请参见第19页的memory。

END事件表示Radio已经处理了最后一位。DISABLED事件的触发是为了确认一个DISABLE任务已经完成。

6.20.14寄存器

6.20.15电气规范

源文件:

https://infocenter.nordicsemi.com/pdf/nRF52840_PS_v1.2.pdf

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值