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

PRF: IO Pulse Receiver

重要

此例程仅存在于特殊版本的SDK中,如有需要请联系Panchip。

1 功能概述

此项目演示了无线脉冲透传-接收端功能:接收发送端的2.4G信号,恢复出波形并通过IO口输出。

发射端(参考prf_io_pulse_tx)捕获上升沿和下降沿,在上升沿来到时,发个脉冲包,在下降沿来到时,再发个脉冲包。接收端收到脉冲包后控制GPIO输出恢复原始脉冲。

系统框图:

image

IO Pulse 通信系统框图

2 环境要求

  • board: 支持 2.4G 功能的开发板

  • uart (option): 显示串口log

  • 波形分析工具:逻辑分析仪或示波器。

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

3 编译和烧录

例程位置:zephyr\samples_panchip\proprietary_radio\prf_io_pulse_rx

使用 ZAL 工具可以对其进行编译、烧录、打开 VS Code 调试等操作。关于 ZAL 工具的详细介绍请参考:Zephyr APP Launcher 工具介绍

4 演示说明

  1. 将P2_1接到逻辑分析仪或示波器上。

  2. 配置发送端(参考prf_io_pulse_tx)。

  3. 在逻辑分析仪上检查输出波形。

4.1 演示结果

  1. PAN1020 PWM为50hz,占空比为50%,输出脉冲的宽度为10ms。发射端和接收端的波形如下:

    发射端:

    image

    发射端波形

    接收端:

    image

    接收端波形

    发射端和接收端的脉冲宽度相差1us。

    image

    发射端与接收端脉冲延迟

    发射端和接收端的脉冲延迟220us。

  2. PAN1020 PWM为1hz,占空比为1%,输出脉冲的宽度为10ms。发射端和接收端的波形如下:

    发射端:

    image

    发射端

    接收端:

    image

    接收端

    发射端和接收端的脉冲宽度无误差。

    image

    发射端与接收端脉冲延迟

    发射端和接收端的脉冲延迟220us。

5 性能指标

  • 支持带外传输:脉冲包通过私有2.4G传输,传输频点为2360~2510Mhz中的非标频点。

  • 一个脉冲的长度,约10ms - 80ms,脉冲的频率1hz~50hz。还原脉冲的精度误差小于1us。从发射端捕获脉冲到接收端还原脉冲的延迟小于10ms。

  • 为了确保传输过程中不丢包必须要用2.4G增强型模式,收发转换满足150us。

6 开发说明

6.1 GPIO初始化

void GPIO_Init(void)
{
	port = device_get_binding(DT_LABEL(DT_NODELABEL(p2)));

	gpio_pin_configure(port, 1, GPIO_OUTPUT);
	gpio_pin_configure(port, 3, GPIO_OUTPUT);
}

6.2 2.4G接收初始化

接收频点为带外频点2566Mhz

    pan_prf_config_t rx_config = {
	.work_mode			= PRF_MODE_NORMAL,
	.chip_mode			= PRF_CHIP_MODE_SEL_XN297,
	.trx_mode			= PRF_RX_MODE,
	.phy				= PRF_PHY_1M,
	.crc				= PRF_CRC_SEL_CRC8,
	.src				= PRF_SRC_SEL_NOSRC,
	.rx_timeout			= DISABLE,
	.rf_channel			= 2566,
	.tx_no_ack			= DISABLE,
	.nrf52_mode			= DISABLE,
	.rx_length			= 4,
	.addr_length		= 5,
	.addr				= { 0x11, 0x22, 0x33, 0x44, 0x55 },
};

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

使能扰码

6.3 2.4G接收中断处理

void event_rx_fun(void)
{
	static uint8_t flag;
	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);

	flag ^= 1;
	gpio_pin_set(port, 1, (int)flag);				/* P2_1 */

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

注:此例程对时间要求较高,因此在GPIO中断和LL中断中不宜添加打印或者执行时间长的代码。

7 RAM/Flash资源使用情况

Memory region         Used Size  Region Size  %age Used
FLASH:       22096 B       384 KB      5.62%
SRAM:        7792 B        64 KB     11.89%