PAN211x驱动移植指南¶
1. 概述¶
PAN211xSDK 提供两种射频参数配置方法,分别是常规配置方法和 EASY_RF 配置方法,两种方式本质上一样,只是代码的规模不一样。
常规配置方式
对于常规配置方法来说,配置流程如下:
第一步:芯片初始化
第二步:射频参数配置
第三步:射频参数校准
第四步:进入Tx/Rx模式。
EASY_RF方式
由于常规配置的第二步所须配置的寄存器较为复杂,因此本SDK提供了配置导出工具pan211_es_tool
,直接导出配置后的寄存器,简化流程。
2. 驱动讲解(EASY_RF)¶
这里重点讲解 EASY_RF 方式驱动的逻辑,使用时需要修改pan211.h
,使能EASY_RF
,如:
#define EASY_RF 1
PAN211_Init
接口进行芯片初始化、射频参数配置、射频参数校准三个步骤。
第一步,芯片初始化。上电之后将芯片配置到STB3状态,代码如下:
PAN211_Err_t PAN211_Init(void)
{
......
/* Enter STB1 Mode */
P_ASSERT(PAN211_WriteReg(0x02, 0x02));
/* Turn on EN_LS, POR_NRSTL, iso_to_0*/
P_ASSERT(PAN211_WriteReg(0x02, 0x72));
/* Wait for LDO to be stable*/
Pan211_Funs.delayus(200);
/* Enter STB2 Mode and */
P_ASSERT(PAN211_WriteReg(0x02, 0x73));
/* Wait for FSYNXO_CLKRDY, then turn off FSYNXO_STARTUP_FAST */
PAN211_SetPage(1);
while ((PAN211_ReadReg(0x6f) & BIT7) != BIT7)
;
PAN211_WriteReg(0x4c, 0x68);
/* Enter STB3 Mode */
P_ASSERT(PAN211_WriteReg(0x02, 0x74));
......
}
第二步,射频参数配置。在下面这段代码中,射频参数配置通过easy_reg.h
中的gPN211Page0Table
和gPN211Page1Table
,而easy_reg.h
可以通过配置导出工具pan211_es_tool
导出,使用方法见《PAN211 配置生成工具使用指南》。
PAN211_Err_t PAN211_Init(void)
{
......
/* Write preconfigured registers on Page 1 */
for (int i = 0; i < (sizeof(gPN211Page1Table) / sizeof(gPN211Page1Table[0])); i++)
{
PAN211_WriteReg(gPN211Page1Table[i][0], gPN211Page1Table[i][1]);
}
PAN211_SetPage(0);
/* Write preconfigured registers on Page 0*/
for (int i = 0; i < (sizeof(gPN211Page0Table) / sizeof(gPN211Page0Table[0])); i++)
{
PAN211_WriteReg(gPN211Page0Table[i][0], gPN211Page0Table[i][1]);
}
......
}
第三步,射频参数校准。写入射频参数表之后,调用PAN211_Calibration
接口完成射频参数的校准:
PAN211_Err_t PAN211_Init(void)
{
......
#if EASY_RF
PAN211_Calibraion();
#else
......
}
如果使用者需要更加灵活的配置方式,可以修改pan211.h
,不使能EASY_RF
,如:
#define EASY_RF 0
这种方式需要在调用PAN211_Init
函数之后再调用PAN211_SetUpConfig
函数,进行配置,并且射频参数校准PAN211_Calibration
不再被PAN211_Init
调用,而是在PAN211_SetUpConfig
函数内部被调用。
注意,pan211.c
中同样也有gPN211Page0Table
和gPN211Page1Table
,这是默认参数配置,不使能EASY_RF时,PAN211_Init
总是默认写入这些参数配置。
3. 驱动移植说明¶
3.1. 文件列表¶
pan211.c
&pan211.h
包含PAN211x 初始化、参数配置、FIFO操作以及状态的定义。pan211_reg.c
&pan211_reg.h
包含PAN211x 寄存器操作和FIFO操作的定义。pan211_port.c
&pan211_port.h
包含3线SPI/4线SP/IIC的底层软件模拟实现方式。以使用3线SPI为例,使用者需要根据所用的MCU实现相关接口。
3.2. 移植步骤¶
Step 1: 板级接口移植
实现pan211_port.c
中下列接口:
rf_delay_us
微秒级延时函数rf_delay_ms
毫秒级延时函数RF_BusInit
SPI接口相关寄存器初始化操作
Step 2: 通信接口移植
实现pan211_port.h
中下列接口:
SPI_DATA_OUTPUT
: SPI 数据线输出模式SPI_DATA_INPUT
: SPI 数据线输入模式SPI_SCK_LOW
: SPI时钟线拉低SPI_SCK_HIGH
:SPI时钟线拉高SPI_DATA_HIGH
: SPI数据线拉高SPI_DATA_LOW
: SPI数据线拉高IRQ_DETECTED
:SPI数据线与IRQ分时复用时,检测SPI数据线是否为低电平
Step3: 核心代码pan211.c
移植
下面是核心代码pan211.c
中的关键函数接口,用户可以根据需求对pan211.c
进行裁剪。
PAN211_Err_t PAN211_Init(void)
功能: 系统初始化函数。
void PAN211_Calibraion(void)
功能:射频参数校准函数。
PAN211_Err_t PAN211_EnterSleep(void)
功能:进入睡眠模式。
PAN211_Err_t PAN211_ExitSleep(void)
功能:退出睡眠模式。
PAN211_Err_t PAN211_ExitTxMode(void)
功能:退出发送模式。
PAN211_Err_t PAN211_ExitRxMode(void)
功能:退出接收模式。
PAN211_Err_t PAN211_TxStart(void)
功能:发送数据包。
PAN211_Err_t PAN211_RxStart(void)
功能:进入接收模式。
PAN211_Err_t PAN211_SetChannel(uint8_t Channel)
功能:设置通道。
PAN211_Err_t PAN211_SetRxAddr(PAN211_Pipe_t Pipe, uint8_t *Addr, uint8_t len)
功能:设置接收地址。
PAN211_Err_t PAN211_SetTxAddr(uint8_t *Addr, uint8_t len)
功能:设置发送地址。
PAN211_Pipe_t PAN211_GetRxPipeNum(void)
功能:获取接收通道。
uint8_t PAN211_GetIRQFlags(void)
功能:获取中断标志。
PAN211_Err_t PAN211_ClearIRQFlags(uint8_t flags)
功能:清除中断标志。
PAN211_Err_t PAN211_ConfigIT(uint8_t it)
功能:配置中断引脚的中断源。
PAN211_Err_t PAN211_EnableInterfaceMuxIRQ(bool NewState)
功能:使能IOMUX功能。
PAN211_Err_t PAN211_SendPacket(uint8_t *pBuf, uint8_t len)
功能:发送数据包。
uint8_t PAN211_GetRecvLen(void)
功能:获取接收数据长度。
PAN211_Err_t PAN211_SetAddrWidth(PAN211_AddrWidth_t AddrWidth)
功能:设置地址宽度。
PAN211_Err_t PAN211_ReadFifo(uint8_t *pBuf, uint8_t len)
功能:读取FIFO数据。
3.3 配置导出工具使用方法¶
见《PAN211 配置生成工具使用指南》。