当前文档版本为 v1.0.1,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

PRF 2.4G开发指南

1 概述

本文档旨在介绍客户在开发2.4g帧结构、程序流程及应用时一些结构体变量、接口说明和注意事项。

2 2.4G帧结构介绍

兼容三种帧结构:xn297、nrf24l01、nrf52

xn297兼容帧结构

普通型:

3 byte

3~5 byte

1~64 byte

0/1/2/3 byte

preamble(0x710f55)

addr

payload

crc(包含addr和payload)

空中bit序:大端模式

增强型:在地址和payload之间插入signal(10bit)数据。

3 byte

3~5 byte

10bit

1~64 byte

0/1/2/3 byte

preamble(0x710f55)

addr

signal

payload

crc(包含addr和payload)

signal结构:

7bit

2bit

1bit

数据长度标识(动态payload)

PID标识 (判断是否是重发包)

NO_ACK标识 (tx完是否需要ack)

白化和crc的作用域包括addr+payload+signal。

nrf2401兼容帧结构

普通型:

空中bit序:大端模式

1 byte

3~5 byte

1~32byte

0/1/2/3 byte

preamble(0x55或者0xaa)

addr

payload

crc(包含addr和payload)

preamble:地址第一个bit为0,取0xaa;地址第一个bit为1,取0x55。

增强型:在地址和payload之间插入signal(9bit)数据。

1 byte

3~5 byte

9bit

1~32byte

0/1/2/3 byte

preamble(0x55或者0xaa)

addr

signal

payload

crc(包含addr和payload)

signal结构:

6bit

2bit

1bit

数据长度标识(动态payload)

PID标识 (判断是否是重发包)

NO_ACK标识 (tx完是否需要ack)

nrf2401无白化,crc的作用域包括addr+payload+signal。

nrf52兼容帧结构

nrf52帧结构如下图所示:

image

nrf52帧结构

当s0=0,length=0,s1=0时,和nrf2401普通型帧结构一样。

当s0=0,length=6,s1=3时,和nrf2401增强型帧结构一样。payload长度最大32byte。

当s0=0,length=8,s1=3时,长包模式。payload长度最大255byte。

空中bit序:大小端模式可配

crc作用域:addr(可配)+s0+length+s1+payload,NRF52和PAN1080通信时CRC只能设成不包括地址

长包模式下,PAN1080 signal结构如下:

8bit

2bit

1bit

数据长度标识(动态payload)

PID标识 (判断是否是重发包)

NO_ACK标识 (tx完是否需要ack)

自定义帧结构

chip_mode字段为“PRF_CHIP_MODE_SEL_NORDIC”模式时,帧结构如下:

image

header0、header1、length为可选字段,可以适配BLE和NRF52不同模式的帧结构,例如BLE广播帧结构:

image

蓝牙广播中的报头和长度对应PRF_MODE_NORMAL_M1模式中的header0和length,header1没有。可参考例程prf_ble_scanprf_ble_beacon

3 2.4G PID流程

tx和rx pid处理逻辑如下:

image

PID生成和检测

每一包数据都包括两位的PID(数据包标志位),来帮助接收端识别该数据是新数据包还是重发的数据包,防止多次存入相同的数据包,PID的生成和检测如上图所示。发送端的ack包未发生超时PID值加一。支持软件配置tx pid和rx pid。

4 2.4G初始化配置

配置的结构体“pan_prf_config_t”,各成员介绍如下:

Type

name

Description

prf_mode_t

work_mode

工作模式配置,包括普通型和增强型

prf_chip_mode_sel_t

chip_mode

xn297通信协议和nordic通信协议配置

prf_trx_mode_t

trx_mode

收发模式配置

prf_phy_t

phy

通信速率配置,可配置为1M和2M

prf_crc_sel_t

crc

数据包CRC配置,可配置为crc 16bit,crc 8bit,crc 24bit ,no crc

prf_scramble_sel_t

src

数据包扰码的配置,可配置为使用扰码和不使用扰码

uint16_t

rx_timeout

接收超时时间配置,最大50000us

uint16_t

rf_channel

2.4g频点配置,任意频点可设(2402Mhz~2480Mhz)

uint8_t

tx_no_ack

配置增强型模式下tx是否需要ack

uint8_t

nrf52_mode

nordic的长包模式配置,最大payload的长度为255

uint8_t

rx_length

rx接收数据包长度配置,增强型模式下可不配置

uint8_t

addr_length

接入地址长度配置,可配置为3、4、5字节

uint8_t

addr[5]

接入地址的内容(xn297模式下可白化地址,防止出现长0和长1的地址)

prf_dev_sel_t

dev

设置deviation,可以选择BLE模式(1M 250k;2M 500k),NRF模式(1M 170K;2M 320)

int8_t

tx_power

设置发射功率,范围(-45dbm~7dbm)

uint8_t

pid_manual_flag

pid手动配置的标志,使能后可以自定义pid

prf_mode_t:

Type

Value

Description

PRF_MODE_NORMAL

0

普通型

PRF_MODE_ENHANCE

1

增强型

PRF_MODE_NORMAL_M1

2

自定义帧格式

prf_chip_mode_sel_t:

Type

Value

Description

PRF_CHIP_MODE_SEL_BLE

1

蓝牙模式(BLE和2.4g模式切换)

PRF_CHIP_MODE_SEL_XN297

2

XN297模式

PRF_CHIP_MODE_SEL_NORDIC

3

NORCDIC模式

prf_trx_mode_t:

Type

Value

Description

PRF_TX_MODE

0

2.4G发射

PRF_RX_MODE

1

2.4G接收

prf_phy_t:

Type

Value

Description

PRF_PHY_1M

1

1M通信速率

PRF_PHY_2M

2

2M通信速率

prf_crc_sel_t:

Type

Value

Description

PRF_CRC_SEL_NOCRC

0

no crc

PRF_CRC_SEL_CRC8

1

crc 8bit

PRF_CRC_SEL_CRC16

2

crc 16bit

PRF_CRC_SEL_CRC24

3

crc 24bit

prf_scramble_sel_t:

Type

Value

Description

PRF_SRC_SEL_NOSRC

0

不使能扰码

PRF_SRC_SEL_EN

1

使能扰码

prf_dev_sel_t:

Type

Value

Description

PRF_DEV_NRF

1

NRF模式deviation配置,1M 170k,2M 320K

PRF_DEV_BLE

2

NRF模式deviation配置,1M 250k,2M 500K

5 API介绍

panchip_prf_init

void panchip_prf_init(pan_prf_config_t *p_config);

初始化配置的结构体“pan_prf_config_t”

panchip_prf_trx_start

void panchip_prf_trx_start(void);

调用此接口,普通型模式RX状态下开始RX,在TX状态下开始TX,增强型模式下,进行收发转换。

panchip_prf_set_data

void panchip_prf_set_data(panchip_prf_payload_t *p_payload);

TX模式下设置payload的内容和长度。

panchip_prf_set_ack_data

void panchip_prf_set_ack_data(panchip_prf_payload_t *p_payload);

RX模式下设置ack payload的内容和长度,ack without payload需要将data length设为0。

panchip_prf_data_rec

uint8_t panchip_prf_data_rec(panchip_prf_payload_t *p_payload);

RX模式下获取接收的数据和长度,返回值是数据长度。必须在RX中断中读取数据,在其他地方读数据会异常。

panchip_switch_prf

void panchip_switch_prf(pan_prf_config_t *p_config);

切换通信协议的帧结构,xn297模式和NRF模式。

panchip_prf_set_chn

void panchip_prf_set_chn(pan_prf_config_t *p_config);

设置通信的频点,带内2400~2480任意频点可设,也可设置带外频点。必须在TX和RX退出后使用。

panchip_prf_set_tx_pwr

void panchip_prf_set_tx_pwr(int8_t tx_pwr);

设置发射的功率,功率范围-45dbm~7dbm。

panchip_prf_dev_set

void panchip_prf_dev_set(prf_dev_sel_t dev);

设置deviation,可以选择BLE模式和NRF模式。

panchip_prf_set_phy

void panchip_prf_set_phy(pan_prf_config_t *p_config);

设置通信速率,可以选择1M和2M。

panchip_prf_set_trx_mode

void panchip_prf_set_trx_mode(prf_trx_mode_t trx_mode);

设置接收模式和发射模式,在prf是idle状态下调用。

panchip_prf_set_work_mode

void panchip_prf_set_work_mode(prf_mode_t work_mode);

设置普通型工作模式和增强型工作模式,在prf是idle状态下调用。

panchip_prf_set_addr

void panchip_prf_set_addr(uint8_t *addr, uint8_t len);

设置通信地址内容和长度。

panchip_prf_set_tx_noack

void panchip_prf_set_tx_noack(bool flag);

设置TX增强型模式下是否需要接收ACK,设置成true后,tx后不会进接收。

panchip_prf_rx_timeout

void panchip_prf_rx_timeout(uint16_t time);

设置接收的超时时间,单位us,最大50000us。

panchip_prf_reset

void panchip_prf_reset(void);

复位PRF状态机,使其处于空闲模式。

panchip_prf_rx_stop

void panchip_prf_rx_stop(void);

退出接收模式,RX退出后会产生timeout中断。

panchip_prf_pid_cfg

void panchip_prf_pid_cfg(uint8_t pid);

增强型模式手动设置TX PID,PID设置的范围是0~3。

panchip_white_init_value

void panchip_white_init_value(uint8_t value);

白化使能后,白化初始值设置,默认是0x7f。

panchip_prf_carrier_start

void panchip_prf_carrier_start(uint16_t  tx_channel);

发射单载波,参数设置任意频点。必须在TX和RX退出后使用。

panchip_prf_carrier_stop

void panchip_prf_carrier_stop(void);

退出发射单载波模式。

panchip_prf_enable_rssi

void panchip_prf_enable_rssi(void);

使能获取数据强度的RSSI模式,在”panchip_prf_trx_start()”调用前使能

panchip_prf_read_rssi

int16_t panchip_prf_read_rssi(void);

收到数据后,在接收中断中获取数据强度的RSSI值。这个rssi会缓存,收到新的数据后值会覆盖。

panchip_prf_disable_rssi

void panchip_prf_disable_rssi(void);

数据强度RSSI获取后,关闭rssi功能。

panchip_prf_enable_carrier_rssi

void panchip_prf_enable_carrier_rssi(void);

使能获取载波强度的RSSI模式,调用后不能接收数据。

panchip_prf_read_carrier_rssi

int16_t panchip_prf_read_carrier_rssi(void);

获取载波强度的RSSI值,这个rssi值是实时的,不会缓存。

panchip_prf_disable_carrier_rssi

void panchip_prf_disable_carrier_rssi(void);

载波强度RSSI获取后,关闭rssi功能。关闭后可以正常接收数据。

panchip_prf_reinit

void panchip_prf_reinit(void);

prf重新初始化接口,停止tx和rx状态,64M主频下执行时间240us。

6 中断介绍

void event_tx_fun(void)
{
	printk("tx done\n");
}		//增强型和普通型模式TX结束后会产生TX中断,TX退出,增强型TX完了之后会马上进入RX。

void event_rx_fun(void)
{
	panchip_prf_payload_t rx_payload;

	rx_payload.data_length = panchip_prf_data_rec(&rx_payload);
	printk("rx data:");
	data_printk(rx_payload.data, rx_payload.data_length);
}		//增强型和普通型模式RX收到数据后会进入RX中断,RX退出,增强型RX完了之后会马上进入TX。

void event_rx_timeout_fun(void)
{
	printk("rx timeout\n");
}		//接收超时后会进入timeout中断,RX退出

void event_crc_err_fun(void)
{
	printk("crc err\n");
}		//接收数据错误会进入crc中断,RX退出,不会进入TX

/*普通型TX,TX结束退出后产生TX中断,进入下一次TX后须调用"panchip_prf_trx_start"。*/

/*普通型RX,收到数据后会进入RX中断,接收超时会进入timeout中断,收到错误数据会进入crc中断,进入下一次RX后须调用"panchip_prf_trx_start"。*/

/*增强型TX,TX结束后硬件会自动进入RX,RX收到数据后会进入RX中断,接收超时会进入timeout中断,收到错误数据会进入crc中断,进入下一次TX后须调用"panchip_prf_trx_start"。*/

/*增强型RX,RX收到数据后会硬件会自动进入TX,TX结束退出后产生TX中断,接收超时会进入timeout中断,收到错误数据会进入crc中断,进入下一次RX后须调用"panchip_prf_trx_start"。*/

注意:在高性能的2.4g应用中尽量不要使用打印,会影响射频收发性能。增强型RX中断中不能有延时或者打印或者执行时间很长的接口,不然会影响TX中断从而导致时序错误。

7 Sample运行流程

prf_sample_rx例程运行流程

如下图所示:

image

RX例程流程图

prf_sample_tx例程运行流程

如下图所示:

image

TX例程流程图