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

PRF 2.4G 开发指南

1 概述

本文介绍的内容有以下几点:

  1. TRX例程功能:

    • 发射端例程的功能:每隔500ms发送一次2.4G数据包,长度5个字节。

    • 发射端例程的功能:接收发送端的2.4G信号,并将接收到的数据通过串口打印出来。

  2. 开发说明:

    • 2.4g初始化配置

    • API介绍

    • SAMPLE运行流程

    • 帧结构介绍

2 环境配置

  1. 环境要求

    • board:pan271x_evb

    • uart:显示串口输出log,uart端口P06(UART_RX)、P05(UART_TX),波特率115200

    • PC串口工具:Panchip Serial Assistant V0.0.011.exe

    “PRF_TX_SAMPLE”的板子需要搭配和”PRF_RX_SAMPLE”的板子一起使用,两个例程的配置要一样。

  2. 编译和烧录:

    1. 项目位置:

    • TX端:”samples\proprietary_rf\prf_tx”。

    • RX端:”samples\proprietary_rf\prf_rx”。

    1. TX端和RX端工程界面,如下图所示:

    工程默认配置是XN297模式,增强型。

  3. 选择好后编译程序,用j-link烧录编译后的hex文件到pan271x_evb板子中。

3 演示说明

  1. 步骤

    • 将接收端串口和发射端串口分别接到PC的USB端口上。

    • 配置接收端和发送端。

    • 观察PC串口工具的输出结果。

  2. 结果

    发射端输出结果:

    接收端输出结果:

4 开发说明

4.1 2.4G初始化配置

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

Type

name

Description

prf_mode_t

work_mode

工作模式配置,包括普通型、增强型、自定义增强型

prf_chip_mode_sel_t

chip_mode

xn297通信协议、NRF通信协议和HS62XX通信协议配置

prf_trx_mode_t

trx_mode

收发模式配置

prf_phy_t

phy

通信速率配置,可配置为1M、2M、CODED_S8、CODED_S2、250K、250K_S2、250K_S8

prf_crc_sel_t

crc

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

prf_scramble_sel_t

scr

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

prf_mode_conf_sel_t

mode_conf

2.4g不同模式射频参数配置,设置deviation

uint16_t

rx_timeout

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

uint16_t

rf_channel

2.4g频点配置,任意频点可设(2400Mhz~2484Mhz)

uint8_t

tx_no_ack

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

uint8_t

rx_length

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

uint8_t

sync_length

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

uint8_t

addr[5]

接入地址的内容

uint8_t

crc_include_sync

crc作用域是否包含接入地址(XN297和NRF24L01必须使能),NRF52可配

uint8_t

src_include_sync

扰码作用域是否包含接入地址,XN297包含,NRF不包含

uint8_t

auto_pyl_flag

是能后普通型也能动态payload,仅支持NRF模式,XN297模式不支持

prf_pipe_t

pipe

设置不同地址通信通道(0~2)

int8_t

tx_power

设置发射功率,范围(0dbm~12dbm)

uint8_t

pid_manual_flag

pid手动配置的标志,使能后可以手动设置pid(0~3)

prf_endian_t

endian

payload大小端配置,XN297L和NRF24L01都是大端,NRF52可配

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_XN297

2

XN297模式

PRF_CHIP_MODE_SEL_NRF

3

NRF模式

PRF_CHIP_MODE_SEL_NRF52

4

NRF52模式

PRF_CHIP_MODE_SEL_HS62XX

5

HS62XX模式

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_PHY_CODED_S8

3

S8编码

PRF_PHY_CODED_S2

4

S2编码

PRF_PHY_250K

5

250k通信速率

PRF_PHY_250K_S2

6

250K S2编码

PRF_PHY_250K_S8

7

250K S8编码

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_mode_conf_sel_t:

Type

Value

Description

PRF_NRF_CONF

0

NRF模式deviation配置,1M PHY 160k,2M PHY 320K,250K PHY 160K

PRF_NRF52_CONF

1

NRF52模式deviation配置,1M PHY 170k,2M PHY 330K,250K PHY 170K

PRF_BLE_CONF

2

模拟BLE帧格式deviation配置,1M PHY 250k,2M PHY 500K,LR&250K PHY 250K

PRF_XN297L_CONF

3

XN297模式deviation配置,1M PHY 300k,2M PHY 600K,250K PHY 170K

prf_addr_length_sel_t:

Type

Value

Description

PRF_ADDR_LENGTH_SEL_3

3

3 BYTE地址长度

PRF_ADDR_LENGTH_SEL_4

4

4 BYTE地址长度

PRF_ADDR_LENGTH_SEL_5

5

5 BYTE地址长度

prf_pipe_t:

Type

Value

Description

PRF_PIPE0

1<<0

管道0

PRF_PIPE1

1<<1

管道1

PRF_PIPE2

1<<2

管道2

prf_endian_t:

Type

Value

Description

PRF_BIG_ENDIAN

0

大端模式传输

PRF_LITTLE_ENDIAN

1

小端模式传输

4.2 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的内容和长度,RX模式下设置ack payload的内容和长度

panchip_prf_data_rec

uint8_t panchip_prf_data_rec(panchip_prf_payload_t *p_payload);

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

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~2484任意频点可设。

panchip_prf_set_tx_pwr

void panchip_prf_set_tx_pwr(int8_t tx_pwr);

设置发射的功率,功率范围0dbm~12dbm。

panchip_prf_mode_conf_set

void panchip_prf_mode_conf_set(prf_mode_conf_sel_t conf);

设置deviation,不同模式下射频dev参数配置,可以选择BLE模式、NRF模式、XN297模式、NRF52模式。

panchip_prf_set_phy

void panchip_prf_set_phy(pan_prf_config_t *p_config);

设置通信速率,可以选择1M、2M、PRF_PHY_CODED_S8、PRF_PHY_CODED_S2、PRF_PHY_250KPRF_PHY_250K_S2、PRF_PHY_250K_S8

panchip_prf_set_trx_mode

void panchip_prf_set_trx_mode(prf_trx_mode_t trx_mode);

设置接收模式和发射模式。

panchip_prf_set_work_mode

void panchip_prf_set_work_mode(prf_mode_t work_mode);

设置普通型工作模式和增强型工作模式。

panchip_prf_set_addr

void panchip_prf_set_addr(uint8_t *addr, uint8_t len, prf_pipe_t pipe, uint8_t trx_addr);

设置通信地址内容、长度、地址通道、地址类型。

地址类型分为以下三种:

trx_addr

Value

Description

PRI_RF_MODE_SEL_TX

0

设置TX地址

PRI_RF_MODE_SEL_RX

1

设置RX地址

PRI_RF_MODE_SEL_TRX

2

设置TRX地址,TX和RX地址相同

TX地址只有一个PIPERX地址有3PIPE

NOTE:地址内容不能出现连续的10101或者01010,否则接收性能会受影响。

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状态机,使其处于IDLE状态。

panchip_prf_pid_cfg

void panchip_prf_pid_cfg(uint8_t pid);

增强型模式手动设置TX PIDPID设置的范围是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_read_data_rssi

int16_t panchip_prf_read_rssi(void);

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

panchip_prf_read_carrier_rssi

int16_t panchip_prf_read_carrier_rssi(void);

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

panchip_prf_read_agcindex

int16_t panchip_prf_read_agcindex(void);

获取agc的档位,范围0~3

panchip_prf_rx_length_irq_cfg

void panchip_prf_rx_length_irq_cfg(uint8_t value);

配置是否使能rx length err中断,当rx收到数据硬件解析出来的length值大于配置的rx length(结构体中“rx_length”字段),rx length err irq会产生,普通型和增强型接收都有效。在使用前需要先注册中断函数。

panchip_prf_get_pipe

uint8_t panchip_prf_get_pipe (void);

收到数据获取地址通道号,范围0~7

panchip_prf_set_crc

void panchip_prf_set_crc (pcrc_sel_t crc, uint8_t crc_include_sync);

设置crc的类型和crc的范围是否包含地址。

panchip_prf_set_whitening

void panchip_prf_set_whitening (prf_scramble_sel_t src, uint8_t src_include_sync);

设置白化类型和白化范围是否包含地址。

panchip_prf_set_endian

void panchip_prf_set_endian (prf_endian_t endian);

设置payload数据传输的大小端。

panchip_prf_wl_set

void panchip_prf_wl_set (uint8_t match_mode);

设置payload白名单过滤,payload过滤的长度可配。

panchip_prf_tx_retrans_set

void panchip_prf_tx_retrans_set(uint8_t times, uint16_t interval_us);

设置tx端重传次数和重传间隔,重传次数最大7次,重传间隔最大32ms

4.3 MULTI PIPE使用介绍

  1. pipe的使用主要在于接收端,发送端同时只有一个pipe,接收端同时有3个地址。

  2. 涉及到两个接口,panchip_prf_set_addrpanchip_prf_get_pipepanchip_prf_set_addr为每个pipe设置不同的地址,接收端收到数据后可以使用panchip_prf_get_pipe获取当前收到数据对应的pipe地址。

4.4 中断介绍

中断介绍如如下代码所示:

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中断从而导致时序错误。

5 Sample运行流程

prf_sample_rx例程运行流程

如下图所示:

image

RX例程流程图

prf_sample_tx例程运行流程

如下图所示:

image

TX例程流程图

6 2.4G帧结构介绍

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

6.1 xn297兼容帧结构

普通型:

3 byte

2~5 byte

0~255 byte

0/1/2/3 byte

preamble(0x710f55)

addr

payload

crc(包含addr和payload)

空中bit序:大端模式

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

3 byte

2~5 byte

10bit

0~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)

数据长度7bit最大包长发送可支持127byte,接收最大包长可支持128byte。

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

6.2 nrf2401兼容帧结构

普通型:

空中bit序:大端模式

1 byte

2~5 byte

0~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

2~5 byte

9bit

0~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)

数据长度6bit最大包长发送可支持63byte,接收最大包长可支持64byte。

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

6.3 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

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

8bit

2bit

1bit

数据长度标识(动态payload)

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

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

6.4 HS26XX帧结构

普通型:

空中bit序:大端模式

1 byte

2~5 byte

2byte

0~255byte

1/2 byte

preamble(0x55或者0xaa)

addr

guard

payload

crc(包含addr和payload)

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

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

1 byte

2~5 byte

9bit

0~32byte

1/2 byte

preamble(0x55或者0xaa)

addr

signal

payload

crc(包含addr和payload)

signal结构:

6bit

2bit

1bit

数据长度标识(动态payload)

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

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

数据长度6bit最大包长发送可支持63byte,接收最大包长可支持64byte。

当芯片为hs6220时,guard内容为~addr0,addr0。

当芯片为hs6200时,guard内容为addr0,addr0。

hs26xx白化初始值为0x3D,白化作用域包括payload+signal;crc的作用域包括addr+payload+signal。

6.5 自定义帧结构

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

image

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

image

蓝牙广播中的报头和长度对应PRF_MODE_NORMAL_M1模式中的header0和length,header1没有。

7 2.4G PID流程

tx和rx pid处理逻辑如下:

image

PID生成和检测

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