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

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中的gPN211Page0TablegPN211Page1Table,而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中同样也有gPN211Page0TablegPN211Page1Table,这是默认参数配置,不使能EASY_RF时,PAN211_Init总是默认写入这些参数配置。

3. 驱动移植说明

3.1. 文件列表

  1. pan211.c & pan211.h 包含PAN211x 初始化、参数配置、FIFO操作以及状态的定义。

  2. pan211_reg.c & pan211_reg.h 包含PAN211x 寄存器操作和FIFO操作的定义。

  3. 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 配置生成工具使用指南》。