AN-1275: ADF7023上的滚动数据缓冲器

简介

ADF7023在数据包模式下接收到数据包,则它会在数据包RAM中以线性序列的方式存储这些数据。进行数据传输以前,待传输数据以线性序列方式写入数据包RAM中。有关该功能的说明请参见ADF7023数据手册。ADF7023数据包RAM长度为240个字节。若数据包长度超过240个字节,那么需要执行额外的措施。本应用笔记说明ADF7023中采用滚动缓冲器机制处理较长数据包的一种方法,最长可处理65,535字节。本方法重用并重命名ADF7023中的多个寄存器。

Tx/Rx滚动数据缓冲器

使用表1中的寄存器来进行滚动缓冲器操作。在滚动缓冲器模式下,数据包RAM地址0x020到地址0x0FF可供包数据使用。数据包RAM存储器位置地址0x000至地址0x01F1 供片内处理器分配使用,不可用于包数据。

表1. Tx/Rx滚动数据缓冲寄存器
地址(十六进制) 寄存器 滚动缓冲器名称 说明
0x124 TX_BASE_ADR   数据包RAM中发送缓冲器的起始位置
0x125 RX_BASE_ADR   数据包RAM中接收缓冲器的起始位置
0x134 地址过滤 BB_RX_BUFFER_SIGNAL 接收缓冲器即将填满
0x135 地址过滤 BB_RX_BUFFER_SIZE 接收缓冲器已填满
0x136 地址过滤 BB_TX_BUFFER_SIGNAL 发送缓冲器即将填满
0x137 地址过滤 BB_TX_BUFFER_SIZE 发送缓冲器已填满
0x139 TESTMODES   使能用于滚动缓冲器的测试模式

使用表2和表3中的中断定义来进行滚动缓冲器操作。注意,这些中断从正常操作处开始重用,并且使能滚动缓冲器模式时无法用于正常操作。禁用滚动缓冲器模式后,它们便返回ADF7023数据手册中所述的功能。

表2. 地址0x100:滚动缓冲器操作中的INTERRUPT_MASK_0中断重用1
名称 滚动缓冲器名称 R/W 说明
[6] INTERRUPT_SWM_RSSI_DET INTERRUPT_BUFFER_FULL R/W 当接收或发送缓冲器填满时中断
1 = 中断使能;0 = 中断禁用
[5] INTERRUPT_AES_DONE INTERRUPT_BUFFER_ALMOST_FULL R/W 当接收或发送缓冲器即将填满时中断
1 = 中断使能;0 = 中断禁用
1使能滚动缓冲器后,这些位具有新功能;而禁用滚动缓冲器后,它们返回ADF7023数据手册中定义的功能。
表3. 地址0x336:滚动缓冲器操作中的INTERRUPT_SOURCE_0中断重用1
名称 滚动缓冲器名称 R/W 说明
[6] INTERRUPT_SWM_RSSI_DET INTERRUPT_BUFFER_FULL R/W 当接收或发送缓冲器填满时置位
(达到接收或发送缓冲器大小)
[5] INTERRUPT_AES_DONE INTERRUPT_BUFFER_ALMOST_FULL R/W 当接收或发送缓冲器即将填满时置位
(达到接收或发送缓冲器信号)
1使能滚动缓冲器后,这些位具有新功能;而禁用滚动缓冲器后,它们返回ADF7023数据手册中定义的功能。

滚动缓冲器寄存器

通过TESTMODES寄存器(寄存器0x139)使能滚动缓冲器后,寄存器0x134至寄存器0x137便依靠滚动缓冲器的控制机制,不可同时用于地址匹配或静态寄存器修复。下表提供ADF7023寄存器名称,以及相应的滚动缓冲寄存器名称。

表4. 地址0x139:用于滚动缓冲器的TESTMODES
名称 滚动缓冲器名称 R/W 说明
[5] RESERVED ROLLING_BUFFER_PACKET_RX R/W 1 = 使能接收滚动缓冲器;0 = 正常工作
[4] RESERVED PAYLOAD_ONLY_PACKET_TX R/W 1 = 使能仅发送载荷的滚动缓冲器;0 = 正常工作
表5. 最大数据包长度控制1
地址(十六进制) 名称 滚动缓冲器名称 说明
0x014 可供包数据使用 TRX_BYTE_LOW MAX_ROLLING_BUFFER_LEN[15:0]的位[7:0],数据包长度控制寄存器的低位字节
0x015 可供包数据使用 TRX_BYTE_HIGH MAX_ROLLING_BUFFER_LEN[15:0]的位[15:8],数据包长度控制寄存器的高位字节
1使能滚动缓冲器后,这些数据包RAM存储器位置便具有新功能,不再供包数据使用。禁用滚动缓冲器后,它们返回ADF7023数据手册中的定义功能。

滚动缓冲器:发送模式

TESTMODES寄存器(地址0x139)的位[4]置1可使能发送模式下的仅载荷滚动缓冲器。此模式允许用户利用自定义数据包结构发送长达65,535字节的数据包。通过编程MAX_ ROLLING_BUFFER_LEN[15:0]位,最高可将最大发送长度 设为0xFFFF,如表5所示;处于滚动缓冲器模式时,可在数据包RAM内部进行定义。

前同步码、同步、载荷和循环冗余校验(CRC)的数目与类型不再受ADF7023的限制;相反,器件发送的是发送缓冲器中的内容。此模式可用于全部三种调制中:频移键控 (FSK)、高斯频移键控(GFSK)和开关键控(OOK)。

对于仅通过SPI与器件接口的用户,可以使用仅载荷模式代替运动模式。在此模式中,将发送缓冲器中的数据发送,直到MAX_ ROLLING_BUFFER_LEN[15:0]字节已发出,或者发出一个命令。

在发送模式下,数据包RAM中的滚动缓冲器起始位置由TX_BASE_ADR设置。缓冲器大小由BB_TX_BUFFER_SIZE寄存器设置。缓冲器大小不得超过可用的数据包RAM。当BB_TX_BUFFER_SIZE寄存器中的值与TX_BASE_ADR寄存器中的地址相加时,不可超过0x0FF。

设 置 BB_TX_BUFFER_SIGNAL寄存器中的值,使得 INTERRUPT_BUFFER_ALMOST_FULL中断在传输缓冲器中的所有数据以前生成。通常,对BB_TX_BUFFER_SIGNAL寄存器进行设置,使中断在缓冲器中一半的数据被发送后置位。

INTERRUPT_BUFFER_ALMOST_FULL置位时,主机微处理器将新数据写入从TX_BASE_ADR寄存器位置到TX_BASE_ADR寄存器 + BB_TX_BUFFER_SIGNAL寄存器的位置。

发送缓冲器中最后一字节的数据发送出去后,ADF7023会继续从TX_BASE_ADR寄存器中的数据开始发送。使能后,INTERRUPT_ BUFFER_FULL中断将在发送缓冲器中最后一字节的数据之后置位。

INTERRUPT_BUFFER_FULL置位后,主机微处理器将新数据写入从TX_BASE_ADR + BB_TX_BUFFER_SIGNAL + 1位置到TX_BASE_ADR + BB_TX_BUFFER_SIZE位置。

数据将继续传输,直到发出MAX_ROLLING_ BUFFER_LEN [15:0]字节(Tx_EOF)或用户发出CMD_PHY_ON命令。

Figure 1. Rolling Buffer in Transmit Mode.
图1. 发送模式下的滚动缓冲器

滚动缓冲器:接收模式

将TESTMODES寄存器(地址0x139)中的位[5]置1可使能接收模式下的滚动缓冲器。ADF7023通过滚动缓冲器机制可接收的数据包长度高达216 – 1字节(65,535字节)。通过编程MAX_ ROLLING_BUFFER_LEN[15:0]位,最高可将最大发 送长度设为0xFFFF,如表5所示。

TESTMODES寄存器(地址0x139)中的位[5]置位且收到同步字后,数据包处理程序使用滚动缓冲器捕捉数据包的剩余部分。该模式可用于FSK/GFSK/OOK操作。

在接收模式下,RX_BASE_ADR寄存器设置数据包RAM中滚动缓冲器的起始位置。通过BB_RX_BUFFER_SIZE寄存器设置缓冲器大小。缓冲器大小不得超过可用的数据包RAM。 当 BB_RX_BUFFER_SIZE寄存器中的值与 RX_BASE_ADR寄存器中的地址相加时,不可超过0x0FF。

设 置 BB_RX_BUFFER 寄存器中的值,使得INTERRUPT_BUFFER_ALMOST_FULL中断在缓冲器被接收数据填满以前置位。通常,BB_RX_BUFFER_SIGNAL寄存器设置为中断在缓冲器被接收数据填满一半时置位。

INTERRUPT_BUFFER_ALMOST_FULL置位时,主机微处理器读取从RX_BASE_ADR寄存器位置到RX_BASE_ADR寄存器 + BB_RX_BUFFER_SIGNAL寄存器位置的数据。

填满Rx缓冲器中的最后一个字节之后,ADF7023将继续写入从RX_BASE_ADR寄存器位置开始的接收数据。使能后,INTERRUPT_BUFFER_FULL中断将在缓冲器填满后置位。

INTERRUPT_BUFFER_FULL置位时,主机微处理器读取从 RX_BASE_ADR寄存器 + BB_RX_BUFFER_SIGNAL寄存器 + 1位置到RX_BASE_ADR寄存器 + BB_RX_BUFFER_SIZE寄存器位置的数据。

继续接收数据,直到到达MAX_ROLLING_BUFFER_LEN [15:0]寄存器中设置的长度(Rx_EOF),或直到主机微处理器发出CMD_PHY_ON命令。

注意,是否检查载荷终点并对数据执行某些错误检查(比如 CRC)取决于用户。

Figure 2. Rolling Buffer in Receive Mode.
图2. 接收模式下的滚动缓冲器

作者

Generic_Author_image

Liam O'Hora