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

PRF: 2.4G Receiver

1 功能概述

此项目演示了2.4G接收端功能:接收发送端的2.4G信号,并将接收到的数据通过串口打印出来。

发射端(参考prf_sample_tx)每隔1s发送一次2.4G数据包,长度5个字节。

2 环境要求

  • board: pan1080a_afld_evb

  • uart: 显示串口输出log

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

需要搭配一个运行 prf_sample_tx 的板子一起使用。

3 编译和烧录

项目位置:zephyr\samples_panchip\proprietary_radio\prf_sample_rx

统一的配置、编译、下载工具正在开发中,当前可以使用脚本进行编译和下载。

脚本位置:

  • xn297 mode: quick_build_samples\proprietary_radio\prf_sample_rx_xn297.bat

  • 24l01 mode: quick_build_samples\proprietary_radio\prf_sample_rx_24l01.bat

  • nrf52 mode: quick_build_samples\proprietary_radio\prf_sample_rx_nrf52.bat

打开脚本后默认会编译项目,编译完成时,可输入字符进行后续下载等操作:

Input the keyword to continue:
  'b' build                         编译项目
  'r' make clean and rebuild        重新编译项目
  'f' flash download                下载
  'e' erase chip                    擦除芯片
  'o' open project by VS Code       打开 `VS Code`,可查看源码,执行编译下载等
  others exit                       退出
wait input:

4 演示说明

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

  2. 配置接收端和发送端(参考prf_sample_tx)。

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

4.1 演示结果

  1. 发射端输出结果:

image

  1. 接收端输出结果:

image

5 开发说明

5.1 2.4G接收初始化

设置接收频点2450Mhz

pan_prf_config_t rx_config = {
	.work_mode			= CONFIG_PRF_WORK_MODE,
	.chip_mode			= CONFIG_PRF_CHIP_MODE,
	.trx_mode			= PRF_RX_MODE,
	.phy				= PRF_PHY_1M,
	.crc				= CONFIG_PRF_CRC_MODE,
	.src				= CONFIG_PRF_SRC_MODE,
	.rx_timeout			= DISABLE,
	.rf_channel			= 2450,
	.tx_no_ack			= DISABLE,
	.nrf52_mode			= CONFIG_PRF_NRF52_MODE,
	.rx_length			= 5,
	.addr_length		= 4,
	.addr				= { 0x71, 0x76, 0x41, 0x76 },
};

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,no crc

prf_scramble_sel_t

src

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

uint16_t

rx_timeout

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

uint16_t

rf_channel

2.4g频点配置,配置范围2402-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]

接入地址的内容

prf_mode_t:

Type

Value

Description

PRF_MODE_NORMAL

0

普通型

PRF_MODE_ENHANCE

1

增强型

prf_chip_mode_sel_t:

Type

Value

Description

PRF_CHIP_MODE_SEL_BLE

1

蓝牙模式

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

Type

Value

Description

PRF_SRC_SEL_NOSRC

0

不使能扰码

PRF_SRC_SEL_EN

1

使能扰码

5.2 中断处理

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);

	if (rx_config.work_mode == PRF_MODE_ENHANCE) {
		static panchip_prf_payload_t tx_payload = {
			.data_length = 10,
			.data = { 0x10, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa },
		};

		tx_payload.data[0]++;
		panchip_prf_set_ack_data(&tx_payload);
	} else {
		panchip_prf_trx_start();
	}
}
  • 普通型模式下将接收的数据打印出来并启动下一次接收。

  • 增强型模式下将接收的数据打印出来并发送ack数据。

Note:2.4G接收只支持一个通道,也就是点对点通信。如果要支持一对多通信需要遍历初始化接收端的接入的地址。