AN-1275: ADF7023上的滚动数据缓冲器
简介
若 ADF7023在数据包模式下接收到数据包,则它会在数据包RAM中以线性序列的方式存储这些数据。进行数据传输以前,待传输数据以线性序列方式写入数据包RAM中。有关该功能的说明请参见ADF7023数据手册。ADF7023数据包RAM长度为240个字节。若数据包长度超过240个字节,那么需要执行额外的措施。本应用笔记说明ADF7023中采用滚动缓冲器机制处理较长数据包的一种方法,最长可处理65,535字节。本方法重用并重命名ADF7023中的多个寄存器。
Tx/Rx滚动数据缓冲器
使用表1中的寄存器来进行滚动缓冲器操作。在滚动缓冲器模式下,数据包RAM地址0x020到地址0x0FF可供包数据使用。数据包RAM存储器位置地址0x000至地址0x01F1 供片内处理器分配使用,不可用于包数据。
地址(十六进制) | 寄存器 | 滚动缓冲器名称 | 说明 |
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数据手册中所述的功能。
位 | 名称 | 滚动缓冲器名称 | 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数据手册中定义的功能。 |
位 | 名称 | 滚动缓冲器名称 | 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寄存器名称,以及相应的滚动缓冲寄存器名称。
位 | 名称 | 滚动缓冲器名称 | R/W | 说明 |
[5] | RESERVED | ROLLING_BUFFER_PACKET_RX | R/W | 1 = 使能接收滚动缓冲器;0 = 正常工作 |
[4] | RESERVED | PAYLOAD_ONLY_PACKET_TX | R/W | 1 = 使能仅发送载荷的滚动缓冲器;0 = 正常工作 |
地址(十六进制) | 名称 | 滚动缓冲器名称 | 说明 |
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命令。
滚动缓冲器:接收模式
将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)取决于用户。