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.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.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.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.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函数。
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读写需要特别注意:
eFuse只能烧写一次,一旦进行烧写,无法修改。
不能对eFuse同一地址重复写,否则容易导致eFuse器件损坏。
写eFuse的电压范围是2.25V到2.75V,典型值为2.5V,因此在配置eFuse时,建议外部VDD1使用2.5V电压。读电压可正常使用3V电压。
eFuse仅支持在STB3读写操作,请勿在其他模式下读写。
eFuse区域不支持SPI和I2C的连续读写操作。
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 写时序如下:
SPI 读时序如下:
PAN3029具有255bytes的FIFO用以存储TX模块发送数据和RX模块解码数据。FIFO由单口RAM组成,只能实现单包数据信息的存储和读取,在FIFO已存有一包数据的情况下,应先读取完此包数据后再写入,否则FIFO中前一包数据将被覆盖。