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

PAN3029/3060 SDK 用户指南

1 概述

本文档主要介绍PAN3029/3060 SDK接口函数的使用。包括芯片的初始化过程以及数据的收发过程。SDK相关的文件有SDK相关的文件有《pan_rf.c》、《pan_rf.h》、《pan_port.c》、《pan_port.h》、《pan_param.h》。

2 SDK使用流程

本章节详细描述SDK使用的基本流程,包括初始化,参数配置和数据收发。

2.1 初始化流程

2.1.1 接口函数

rf_init();

2.1.2 实现功能

1、 唤醒芯片,从deep sleep状态至standby3状态 rf_deepsleep_wakeup 2、 初始化芯片 rf_init 3、 配置芯片AGC rf_set_agc 4、 初始化芯片TX_IO/RX_IO rf_port.antenna_init

2.1.3 使用方法

芯片初次上电或复位时调用接口函数。

2.2 参数配置流程

2.2.1 接口函数

rf_set_default_para();

2.2.2 实现功能

设置频率、Code_Rate、带宽、扩频因子、发射功率和CRC,刷新参数接口

  • rf_set_freq

  • rf_set_code_rate

  • rf_set_bw

  • rf_set_sf

  • rf_set_tx_power

  • rf_set_crc

  • rf_set_ldr

  • rf_refresh

2.2.3 使用方法

芯片初始化完成后,在standby3状态下,调用接口函数。

2.3 发送流程

2.3.1 接口函数

rf_enter_continous_tx();
rf_continous_tx_send_data();
rf_single_tx_data();

2.3.2 实现功能

1、切换状态 rf_set_mode 2、打开TX_IO rf_port.set_tx 3、设置发射模式 rf_set_tx_mode 4、进入TX状态并发送数据 rf_send_packet 5、获取本包数据发射时间(可选) rf_get_tx_time

2.3.3 使用方法

芯片初始化并且配置参数完成后调用接口函数。调用接口函数,芯片发送完成后,IRQ的引脚会被置高,并产生中断。 完整应用流程参阅例程说明章节。

2.4 接收流程

2.4.1 接口函数

rf_enter_continous_rx();
rf_enter_single_timeout_rx();
rf_enter_single_rx();

2.4.2 实现功能

1、切换状态 rf_set_mode 2、打开RX_IO rf_port.set_rx 3、设置接收模式 rf_set_rx_mode 4、设置进入接收状态 rf_set_mode

2.4.3 使用方法

芯片初始化并且配置参数完成后调用接口函数。接收数据,数据收到后,IRQ引脚会被置高。可使用轮询或中断的方式来确定数据包是否被接收到,接收到后调用收包函数将数据包从芯片中取出。完整应用流程请参阅例程说明章节。

3 SDK接口描述

本章节详细描述SDK《radio.c》中提供的用户接口函数,用户可以根据需要自行修改radio下的相关函数接口(如要修改建议在充分熟悉芯片后进行)。 大多参数配置都需要在芯片初始化完成后进行(standby3状态下)。

3.1 rf_flag接口

句法

uint32_t rf_get_recv_flag(void)
void rf_set_recv_flag(int status)
uint32_t rf_get_transmit_flag(void)
void rf_set_transmit_flag(int status)

目的 芯片设置发送或接收后,产生的IRQ中断,通过flag标志将事件传递给用户。用户可使用轮询方式来确定芯片的发送或接收结果。 参数 Status 当前的事件状态

  • RADIO_FLAG_IDLE

  • RADIO_FLAG_TXDONE

  • RADIO_FLAG_RXDONE

  • RADIO_FLAG_RXTIMEOUT

  • RADIO_FLAG_RXERR

  • RADIO_FLAG_PLHDRXDONE

3.2 rf_init

句法

uint32_t rf_init(void)

目的

初始化芯片,包含wakeup,init,agc,antenna_init过程。

参数

返回值

  • FAIL 操作失败

  • OK 操作成功

3.3 rf_deepsleep_wakeup

句法

uint32_t rf_deepsleep_wakeup(void)

目的

设置芯片从deepsleep状态唤醒,包含wakeup,init,agc,antenna_init过程。芯片初次上电或复位时,需要唤醒芯片时使用。 接口函数会设置芯片进入deepsleep状态,deepsleep状态下芯片的寄存器值会被复位。因此使用接口函数唤醒后,需要重新配置初始化和agc参数,其他收发配置参数(SF,BW等)也需要重新配置。

参数

返回值

  • FAIL 操作失败

  • OK 操作成功

3.4 rf_sleep_wakeup

句法

uint32_t rf_sleep_wakeup(void)

目的

设置芯片从sleep状态唤醒,包含wakeup,antenna_init过程。当芯片处于sleep状态,需要唤醒芯片时使用。当芯片处于sleep状态时,芯片的寄存器值不会被复位。sleep唤醒后仍是休眠前的参数配置值。

参数

返回值

  • FAIL 操作失败

  • OK 操作成功

3.5 rf_deepsleep

句法

uint32_t rf_deepsleep(void)

目的

将芯片从standby3状态切换到deep sleep状态,从而降低功耗。

参数

返回值

  • FAIL 操作失败

  • OK 操作成功

3.6 rf_sleep

句法

uint32_t rf_sleep(void)

目的

将芯片从standby3状态切换到sleep状态,从而降低功耗。

参数

返回值

  • FAIL 操作失败

  • OK 操作成功

3.7 rf_get_tx_time

句法

uint32_t rf_get_tx_time(void)

目的

获取本次数据包发射所需时间,rf_single_tx_data()内提供该函数用法演示。

参数

返回值

本次数据包发射所需时间,单位ms。

3.8 rf_set_mode

句法

uint32_t rf_set_mode(uint8_t mode)

目的

设置芯片工作的状态,包括deepsleep/sleep/standby1/standby2/standby3/tx/rx,参数配置通常在standby3状态下进行。

参数

Mode 芯片工作的状态:

  • rf_MODE_DEEP_SLEEP

  • rf_MODE_SLEEP

  • rf_MODE_STB1

  • rf_MODE_STB2

  • rf_MODE_STB3

  • rf_MODE_TX

  • rf_MODE_RX

返回值

  • FAIL 操作失败

  • OK 操作成功

3.9 rf_get_mode

句法

uint8_t rf_get_mode(void)

目的

读取芯片当前的工作状态,包括deepsleep/sleep/standby1/standby2/standby3/tx/rx。

参数

返回值

芯片状态值

3.10 rf_set_tx_mode

句法

uint32_t rf_set_tx_mode(uint8_t mode)

目的

设置发射模式,可以设置为单次发射和连续发射。

参数

Mode 发射数据模式:

  • rf_TX_SINGLE

  • rf_TX_CONTINOUS

返回值

  • FAIL 操作失败

  • OK 操作成功

3.11 rf_set_rx_mode

句法

uint32_t rf_set_rx_mode(uint8_t mode)

目的

设置接收模式,可以设置为单次接收、超时接收、连续接收。

参数

Mode 接收模式:

  • rf_RX_SINGLE

  • rf_RX_SINGLE_TIMEOUT

  • rf_RX_CONTINOUS

返回值

  • FAIL 操作失败

  • OK 操作成功

3.12 rf_set_rx_single_timeout

句法

uint32_t rf_set_rx_single_timeout(uint32_t timeout)

目的

设置超时接收的超时时间,仅在超时接收模式下有效。

参数

Timeout 1~65535 超时时间,单位为ms

返回值

  • FAIL 操作失败

  • OK 操作成功

3.13 rf_get_snr

句法

float rf_get_snr(void)

目的

读取信噪比SNR的值,SNR越高代表信号质量越好。这个接口需要在接收到数据包的时候调用,且在清除RxDone中断之前。如果清除中断,这个值就会失效。RSSI也一样。rf_irq_processr()函数内提供了该函数的用法演示。

伪码示例:

// RxDone IRQ已收到
snr = rf_get_snr();   
rssi = rf_get_rssi();   
rf_receive(buf);

参数

返回值

SNR值

3.14 rf_get_rssi

句法

int8_t rf_get_rssi(void)

目的

读取接收信号强度的值,这个接口需要在接收到数据包的时候调用,且在清除RxDone中断之前。如果清除中断,这个值就会失效。SNR也一样。rf_irq_process()函数内提供了该函数的用法演示。更多用法可以参考RSSI应用参考文档。

示例:

// RxDone IRQ已收到
snr = rf_get_snr();   
rssi = rf_get_rssi();   
rf_receive(buf);

参数

返回值

RSSI值

3.15 rf_get_channel_rssi

句法

int8_t rf_get_channel_rssi(void)

目的

PAN3029支持信道能量检测功能,可用channel rssi值来指示该信道下的能量大小。芯片在进入 RX 状态后,可以调用该接口获取信道检测能量,读取信道能量强度的值。

示例:

//芯片进入RX状态后
channel_rssi = rf_get_channel_rssi();   

参数

返回值

RSSI值

3.16 rf_get_irq

句法

uint8_t rf_get_irq(void)

目的

读取中断寄存器值。在rf_irq_process中使用。

参数

返回值

中断结果

3.17 rf_clr_irq

句法

uint8_t rf_clr_irq(void)

目的

清除当前所有中断。

参数

返回值

  • FAIL 操作失败

  • OK 操作成功

3.18 rf_set_refresh

句法

uint32_t rf_set_refresh(void)

目的

寄存器参数刷新。不会修改寄存器值,参考SDK在设置参数后使用。

参数

返回值

  • FAIL 操作失败

  • OK 操作成功

3.19 rf_set_preamble

句法

uint32_t rf_set_preamble(uint16_t pream)

目的

设置芯片发射前导码,仅对发射端有效,需要在发射数据前配置。数据发射时,发射内容由“前导码+数据”组成,前导码越长代表整个发射内容的发包时间越长。

参数

Pream 8~65535 发射前导码长度

返回值

  • FAIL 操作失败

  • OK 操作成功

3.20 rf_set_cad

句法

uint32_t rf_set_cad(void)

目的

设置芯片打开CAD功能,需要在芯片进入接收模式前配置,该功能修改了接收阈值。

参数

返回值

  • FAIL 操作失败

  • OK 操作成功

3.21 rf_set_cad_off

句法

uint32_t rf_set_cad_off(void)

目的

设置芯片关闭CAD功能,并将接收阈值恢复。

参数

返回值

  • FAIL 操作失败

  • OK 操作成功

3.22 rf_set_syncword

句法

uint32_t rf_set_syncword(uint8_t sync)

目的

设置芯片的同步字。

参数

Sync 同步字

返回值

  • FAIL 操作失败

  • OK 操作成功

3.23 rf_get_syncword

句法

uint8_t rf_get_syncword(void)

目的

读取芯片的同步字。

参数

返回值

同步字值

3.24 rf_irq_handler

句法

void rf_irq_handler(void)

目的

IRQ中断服务程序,在外部中断产生时调用。

参数

返回值

3.25 rf提前中断接口

句法

void rf_set_plhd_rx_on(uint8_t addr,uint8_t len)
void rf_set_plhd_rx_off(void)
uint8_t rf_get_plhd_len(void)
uint32_t rf_plhd_receive(uint8_t *buf,uint8_t len)

目的

提前中断功能是在芯片读取一帧数据的过程中,查看已经解出来的数据,判断是不是自己想要的,再决定继续读取还是放弃这帧数据。更多功能说明请参考提前中断应用参考文档。

3.26 rf_set_mapm_rx_on

句法

void rf_set_mapm_on(void)

目的

使能mapm模式,开mapm中断允许

参数

返回值

3.27 rf_set_mapm_rx_off

句法

void rf_set_mapm_off(void)

目的

关mapm模式,关mapm中断允许

参数

返回值

3.28 rf_set_mapm_para

句法

void rf_set_mapm_para(stc_mapm_cfg_t  *p_mapm_cfg)

目的

设置mapm模式相关参数

参数

  • p_mapm_cfg->fn 用于配置mapm preamble中Field数量

  • p_mapm_cfg->fnm 用于配置mapm preamble中每个Field重复次数

  • p_mapm_cfg->gfs 用于配置Field中最后一个Group,其ADDR位置功能选择

  • p_mapm_cfg->gn 用于配置一个Field中Group个数

  • p_mapm_cfg->pgl 用于配置第一个Group内Preamble数量

  • p_mapm_cfg->pgn 用于配置其他Group内Preamble数量

  • p_mapm_cfg->gn 所有的 Field 都发送完毕后 syncword 前 chirp 的数量

返回值

3.29 rf_receive

句法

uint32_t rf_receive(uint8_t *buf)

目的

接收一包数据

参数

Buf 用于接收数据包

返回值

接收到的数据包长度

3.30 rf_enter_continous_rx

句法

uint32_t rf_enter_continous_rx(void)

目的

设置芯片进入连续接收模式接收。该模式下,芯片会一直处于接收状态,当接收到数据后,芯片会产生rx IRQ相关中断,并继续进行接收。

参数

返回值

  • FAIL 操作失败

  • OK 操作成功

3.31 rf_enter_single_timeout_rx

句法

uint32_t rf_enter_single_timeout_rx(uint32_t timeout)

目的

设置芯片进入超时接收模式接收。该模式下,芯片会进行一次接收,当接收到数据后,芯片会产生rxdone IRQ中断,并等待用户后续操作。当超时时间内都未接收到数据时,芯片会产生rxtimeout IRQ中断,等待用户后续操作,如果放弃接收需要主动退出接收状态,否则芯片会再次启动一次超时接收。使用后,用户软件需先切换至STB3退出接收状态,再进行后续操作。

参数

Timeout 超时时间

返回值

  • FAIL 操作失败

  • OK 操作成功

3.32 rf_enter_single_rx

句法

uint32_t rf_enter_single_rx(void)

目的

设置芯片进入单次接收模式接收。该模式下,芯片会进行一次接收,当接收到数据后,芯片会产生rx IRQ相关中断,并退出接收状态,用户软件需先切换至STB3退出接收状态,再进行后续操作。

参数

返回值

  • FAIL 操作失败

  • OK 操作成功

3.33 rf_single_tx_data

句法

uint32_t rf_single_tx_data(uint8_t *buf, uint8_t size, uint32_t *tx_time)

目的

设置芯片进入单次发射模式并发射数据。该模式下,芯片会进行一次发射,当发射完成后,芯片会产生txdone IRQ中断,并退出发射状态(工作电流降低),用户软件需先切换至STB3退出发射状态,再进行后续操作。

参数

  • Buf 发送buff

  • Size 发送包长

  • Tx_time 获取本次数据包的传输时间,tx_time参数非必须,用户可根据需要删减

返回值

  • FAIL 操作失败

  • OK 操作成功

3.34 rf_enter_continous_tx/rf_continous_tx_send_data

句法

uint32_t rf_enter_continous_tx(void)
uint32_t rf_continous_tx_send_data(uint8_t *buf, uint8_t size)

目的

设置芯片进入连续发射模式并发射数据。该模式下,芯片一次发射完成后,芯片会产生txdone IRQ中断,并保持发射状态(工作电流仍为发射电流,但无数据发射),并等待用户后续操作。随后,用户可以选择停止发射,将芯片状态切换至standby3;或者选择继续发射,直接调用 rf_continous_tx_send_data()即可,继续发射不需要重复rf_enter_continous_tx()操作。

参数

返回值

  • FAIL 操作失败

  • OK 操作成功

3.35 rf_set_agc

句法

uint32_t rf_set_agc(uint32_t state)

目的

配置芯片AGC。默认初始化芯片时配置并打开AGC。

参数

State 关闭AGC_OFF/ 打开AGC_ON

返回值

FAIL 操作失败 OK 操作成功

3.36 rf_set_para

句法

uint32_t rf_set_para(rf_para_type_t para_type, uint32_t para_val)

目的

配置芯片参数,包括频率、Code_Rate、带宽、扩频因子、发射功率和CRC。

参数

Para_type 准备设置参数的类型:

  • RF_PARA_TYPE_FREQ

  • RF_PARA_TYPE_CR

  • RF_PARA_TYPE_BW

  • RF_PARA_TYPE_SF

  • RF_PARA_TYPE_TXPOWER

  • RF_PARA_TYPE_CRC

    Para_val 准备设置参数的值:

  • CODE_RATE_45/CODE_RATE_46/CODE_RATE_47/CODE_RATE_48

  • BW_62_5K/BW_125K/BW_250K/BW_500K

  • SF_5/SF_6/SF_7/SF_8/SF_9/SF_10/SF_11/SF_12

  • TXPOWER参照本文附录

  • CRC_OFF/CRC_ON

返回值

  • FAIL 操作失败

  • OK 操作成功

3.37 rf_get_para

句法

uint32_t rf_get_para(rf_para_type_t para_type, uint32_t *para_val)

目的

读取芯片参数,包括频率、Code_Rate、带宽、扩频因子、发射功率和CRC。

参数

Para_type 准备读取参数的类型

RF_PARA_TYPE_FREQ
RF_PARA_TYPE_CR
RF_PARA_TYPE_BW
RF_PARA_TYPE_SF
RF_PARA_TYPE_TXPOWER
RF_PARA_TYPE_CRC

Para_val 读取参数的值

返回值

  • FAIL 操作失败

  • OK 操作成功

3.38 rf_set_dcdc_mode

句法

uint32_t rf_set_dcdc_mode(uint32_t dcdc_val)

目的

设置芯片DCDC模式,默认关闭。DCDC模式可以获得更低的接收电流。开启本功能前,请联系并确认模组是否支持该功能开启,否则易对模组造成损害。

参数

Dcdc_val 模式类型

  • ​ DCDC_ON

  • ​ DCDC_OFF

返回值

  • FAIL 操作失败

  • OK 操作成功

3.39 rf_set_ldr

句法

uint32_t rf_set_ldr(uint32_t mode)

目的

设置芯片LDR低速率模式,默认关闭。低速率模式可以进一步降低传输速率,获得更好的传输效果。

参数

Mode 模式类型

  • LDR_ON

  • LDR_OFF

返回值

  • FAIL 操作失败

  • OK 操作成功

3.40 rf智能搜索接口

句法

uint32_t rf_set_all_sf_preamble(uint32_t sf)
//sf参数配置:SF_5/SF_6/SF_7/SF_8/SF_9/SF_10/SF_11/SF_12
uint32_t rf_set_all_sf_search(void)
uint32_t rf_set_all_sf_search_off(void)

目的

智能搜索功能,可实现在接收时智能化识别信道中的SF参数,达到接收不同SF信号数据的目的。更多功能说明请参考《PAN3029智能搜索应用参考文档》。

3.41 get_chirp_time

句法

uint32_t get_chirp_time(uint32_t bw,uint32_t sf)

目的

计算单个chirp持续时间。

参数

  • SF:SF_5/SF_6/SF_7/SF_8/SF_9/SF_10/SF_11/SF_12

  • BW:BW_62_5K/BW_125K/BW_250K/BW_500K

返回值

单个chirp持续时间,单位:us。

3.42 check_cad_rx_inactive

句法

uint32_t check_cad_rx_inactive(uint32_t one_chirp_time)

目的

使用CAD检测当前信道状态,用于CAD接收前的信道检测。

参数

one_chirp_time:单个chirp持续时间

返回值

  • LEVEL_ACTIVE 信道活跃,应当继续接收

  • LEVEL_INACTIVE 信道无信号,应当放弃接收

3.43 check_cad_tx_inactive

句法

uint32_t check_cad_tx_inactive(void)

目的

使用CAD检测当前信道状态,用于CAD发射前的信道检测。

参数

返回值

  • FAIL 操作失败

  • OK 操作成功

check_cad_tx_inactive()操作成功后,需要检测SDK定义的cad_tx_timeout_flag事件判断CAD检测结果。开启检测前cad_tx_timeout_flag默认为MAC_EVT_TX_CAD_NONE,如果检测到信道活跃,不适宜发射,cad_tx_timeout_flag会变为MAC_EVT_TX_CAD_ACTIVE,如果检测到信道不活跃,适宜发射,cad_tx_timeout_flag会变为MAC_EVT_TX_CAD_TIMEOUT。

4 SDK移植

本章节详细描述SDK移植过程及注意事项。keil配置floating point hardware为“Not Used”,配置“One ELF Section per Function”不勾选,优化等级设置为“default”。编译代码后,统计SDK所需的Flash大小为9125 (8.91kB),所需SRAM大小为1485 (1.45kB)。

SDK《rf_port.c》中提供了用户需要移植的接口函数。要正确运行SDK,需要实现以下接口:

  • spi_cs_set_high(),SPI片选拉高。

  • spi_cs_set_low(),SPI片选拉低。

  • spi_readwritebyte(),SPI数据传输。

  • rf_delay_ms(),rf_delay_us(),delay函数。

  • RX_IO/TX_IO实现,芯片收发IO切换接口,包括rf_antenna_init,rf_antenna_tx,rf_antenna_rx,rf_antenna_close。RX_IO/TX_IO实现,SDK中通过SPI读写寄存器实现该部分,通过SPI控制3029内部GPIO10和GPIO0实现RX_IO/TX_IO。用户也可以使用外部MCU IO去控制RX_IO/TX_IO,具体实现取决于底板设计情况。

  • TCXO_IO实现,芯片有源晶振IO控制接口,包括rf_tcxo_init,rf_tcxo_close。SDK中通过SPI读写寄存器实现该部分,通过SPI控制3029内部GPIO3控制。用户也可以使用外部MCU IO去控制TCXO_IO,具体实现取决于PAN3029模组版本和底板设计情况。

  • rf_irq_handler(),IRQ中断处理函数。

PAN3029的IRQ引脚用于产生中断给MCU,连接IRQ的MCU引脚需要配置成外部中断触发模式,它的中断服务程序中要调用PAN3029的中断处理函数。

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  rf_irq_handler();
}

5 PAN3029状态图

本章节描述的是PAN3029芯片的状态切换图,方便用户深入了解芯片工作原理。其中,DeepSleep到STB3(standby3)的切换过程对应SDK中的rf_deepsleep_wakeup函数;STB3到DeepSleep对应SDK中的rf_deepsleep函数。Sleep到STB3的切换过程对应SDK中的rf_sleep_wakeup函数;STB3到Sleep对应SDK中的rf_sleep函数。

img

图 5-1 PAN3029上电流程

PAN3029上电后有七种状态,包括深度睡眠模式(DeepSleep)、睡眠模式(Sleep)、LDO工作模式(STB1)、OSC工作模式(STB2)、OSC输出模式(STB3)、TX模式以及RX模式。所有状态可通过配置寄存器进行切换。 注:如果芯片外围电路不支持DCDC,可不配置EN_DCDC,直接从STB1进入STB2。SDK默认不使用DCDC功能,如果需要使用DCDC功能,请参考对应的应用文档。

6 应用说明

6.1 低功耗休眠

关于低功耗休眠,SDK中提供了四个接口函数。 一种是睡眠Sleep模式。包含从STB3到Sleep的rf_sleep休眠函数,从Sleep到STB3的rf_sleep_wakeup唤醒函数。 一种是深度休眠DeepSleep模式。包含从STB3到DeepSleep的rf_deepsleep休眠函数,从DeepSleep到STB3的rf_deepsleep_wakeup唤醒函数。注意,PAN3029芯片进入深度休眠并再次唤醒后,原有的配置参数需要重新配置,收发模式也需要重新选择配置。

//deepsleep休眠示例
rf_deepsleep();													//进入深度休眠
rf_deepsleep_wakeup();											//唤醒
rf_set_default_para();												//重新配置参数
rf_enter_continous_rx();											//进入连续接收模式

6.2 CAD功能

CAD功能,修改了芯片的接收阈值,可能影响芯片的接收灵敏度。使用完成后,需要关闭CAD功能。更多功能说明请查阅CAD应用参考文档。

6.3 灵敏度RSSI

读取信号强度值需要在接收到数据包的时候调用,且在清除rxdone中断之前。如果清除中断,这个值就会失效。RSSI的测量范围是-12到-110,不同参数(SF、BW)模式下,测量范围略有不同。当需要读取芯片RSSI时,建议打开AGC,可以提高芯片RSSI准确性。更多功能说明请参考《PAN3029 RSSI应用参考文档》。

6.4 DCDC功能

DCDC功能开启后,可以使芯片的接收电流降低至4.77mA,默认该功能关闭。SDK中提供了一个接口函数开启或关闭DCDC功能。

uint32_t rf_set_dcdc_mode(uint32_t dcdc_val)	

参数 dcdc_val

  • DCDC_ON 开启

  • DCDC_OFF 关闭

DCDC功能可在STB1~STB3及RX模式开启。开启DCDC功能后,当芯片需要发送时,需要提前手动关闭DCDC功能。开启DCDC功能前,请联系并确认模组是否支持该功能开启,否则易对模组造成损害。

6.5 EFUSE功能

PAN3029支持82Bytes的eFuse空间区域供客户使用,可用于存储掉电不丢失的数据。关于eFuse功能的使用,SDK中提供了四个接口函数。

uint32_t rf_efuse_on(void)

目的

设置芯片打开eFuse功能

参数

返回值

  • FAIL 操作失败

  • OK 操作成功

uint32_t rf_efuse_off(void)

目的

设置芯片关闭eFuse功能

参数

返回值

  • FAIL 操作失败

  • OK 操作成功

uint8_t rf_efuse_read_byte(uint8_t reg_addr, uint8_t efuse_addr)

目的

读取指定efuse地址存储数据

参数

  • reg_addr efuse进入地址,客户区默认0x3c

  • efuse_addr efuse内部地址,客户区0x2d~0x7f

返回值

value 读取指定efuse地址返回的数据

void rf_efuse_write_byte(uint8_t reg_addr, uint8_t efuse_addr, uint8_t value)

目的

往指定efuse地址写入想存储的数据

参数

  • reg_addr efuse进入地址,客户区默认0x3c

  • efuse_addr efuse内部地址,客户区0x2d~0x7f

  • value 欲写入efuse的数据

返回值

eFuse读写需要特别注意:

  1. eFuse只能烧写一次,一旦进行烧写,无法修改。

  2. 不能对eFuse同一地址重复写,否则容易导致eFuse器件损坏。

  3. 写eFuse的电压范围是2.25V到2.75V,典型值为2.5V,因此在配置eFuse时,建议外部VDD1使用2.5V电压。读电压可正常使用3V电压。

  4. eFuse仅支持在STB3读写操作,请勿在其他模式下读写。

  5. eFuse区域不支持SPI和I2C的连续读写操作。

  6. eFuse读写的最高时钟速率为8MHz。

6.6 RF参数说明

Ø 信道带宽(BW)

信道带宽是限定允许通过该信道的信号下限频率和上限频率,可以理解为一个频率通带,其取值范围为62.5KHz、125KHz、250KHz、500KHz。比如一个信道允许的通带为1.5kHz至15kHz,则其带宽为13.5kHz。增加BW,可以提高有效数据速率以缩短传输时间,但是以牺牲部分接受灵敏度为代价,从而影响通信距离。

Ø 扩频因子(SF)

SF取值范围SF5-12,值越小传输速率越高,传输距离越短,相反SF值越大,传输速率越慢,传输距离越远。在同等数量的数据传输时,SF越大传输时间越长。

Ø 编码率(CR)

CR是数据流中有用部分(非冗余)的比例,取值范围1-4 对应1=4/5,2=4/6,3=4/7,4=4/8。也就是说,如果编码率是k/n,则对每k位有用信息,编码器总共产生n位的数据,其中n-k是多余的。CR越大单次传输的多余数据越多,有效数据速率降低,传输时间变长。

Ø 校验 (CRC)

CRC是TX端设置,RX端不设置。RX端接收信号中的信息,在帧结构中读取CRC,来决定要不要进行CRC检查。

Ø 低速率模式

取值范围1或者0,为1时为开启低速率模式,默认为关闭,开启后通信速率会降低,接收灵敏度会提升1-2dBm,通信距离会稍增加。

Ø 前导码符号数量

取值范围8—65535,默认值为8。在实现空中唤醒应用场景时可以将前导码符号数量增大,同时发射时间也会增大,从而实现接收端在低功耗模式下被长的前导码唤醒的功能。

备注:上述RF参数需要根据实际应用场景进行选择配置,且收发端的RF配置需要一致时才能正常通信。RF数据发送时间及参数的选择可参考SDK中工具目录下**《[磐启微电子PAN3029计算器.xlsx]》**

6.7 四线SPI和FIFO

外部设备可通过四线SPI方式对芯片中的寄存器和FIFO进行配置访问。PAN3029芯片实现了SPI总线的从机Slave,用于读写寄存器和FIFO。SPI总线为四线制,分别为:

  • SCK(时钟)

  • CSN(片选信号,低电平有效)

  • MOSI(数据输入)

  • MISO(数据输出)

其中SCK、CSN、MOSI由主机Master控制,MISO由Slave控制。在通信过程中,以CSN电平拉低起始,直至CSN电平拉高时结束本次传输过程。主机Master通过MOSI发送数据,MISO接收数据。SCK下降沿时产生数据,上升沿时进行数据采样。 Master传输的信息由Address Byte和Data Byte两部分组成。其中Address Byte前7bit为地址位addr;最后1bit为读写位wr,写操作时该bit置1,读操作时该bit置0。SPI有三种传输模式

  • Single:单字节传输模式。信息仅为2 byte,Master通过MOSI发送Address Byte。若为写操作,Master继续通过MOSI发送Data Byte;若为读操作,则Master读取MISO上Slave回复的Data Byte。

  • Burst:突发连续传输模式。信息大于2byte,Address Byte后跟若干个Data Byte,Data Byte之间无需增加Address Byte,从机Slave内部会自动在每个Data Byte之间递增地址。CSN信号在最后一个Data Byte后拉高,其余传输信息过程均维持低电平。

  • FIFO:FIFO读写模式。该模式下单字节或连续传输均可实现,传输规则同Signle模式和Burst模式,不同点在于Address Byte中的地址位addr只能配置为7’h1,且Slave在Data Byte之间不做地址递增操作。

SPI 写时序如下:

wps28

图 6-1 SPI写时序

SPI 读时序如下:

img

图 6-2 SPI读时序

PAN3029具有255bytes的FIFO用以存储TX模块发送数据和RX模块解码数据。FIFO由单口RAM组成,只能实现单包数据信息的存储和读取,在FIFO已存有一包数据的情况下,应先读取完此包数据后再写入,否则FIFO中前一包数据将被覆盖。

7 附件

7.1 发射功率表

img

图7-1 功率档位表

注:功率档位为rf_set_tx_power函数的参数,即rf_set_para函数的功率参数。其它频段的发射功率和发射电流会略有不同。