LoRaWAN_stack移植笔记(一)--RF硬件相关

和硬件相关的问题TCXO 的使用根据SX1276数据手册,
  • 如果使用TCXO,则需要配置RegTcxo寄存器为0x19,代码如下
    ``` c
    void SX1276SetTcxoConfig(void)//此函数为自定义的
    {
    SX1276Write( REG_TCXO, 0x19 ); //设置TCXO
    }
  • //在初始化中调用
    void SX1276Init( RadioEvents_t *events )
    {
    ...
    SX1276SetTcxoConfig();
    ...
    }
    ```
  • 否则配置为0x09,因为芯片上电默认不使用TCXO,即上电寄存器值即为0x09,所以无需配置
  • PA_BOOST 引脚的使用根据sx1276 数据手册
  • 如果使用PA_BOOST作为RF输出,则需要配置PaSelect脚为1
  • void SX1276SetTxConfig(......)
    {
        ...
        paConfig = ( paConfig & RF_PACONFIG_PASELECT_MASK ) | SX1276GetPaSelect( SX1276.Settings.Channel );//选择是否使用PA_BOOST引脚
        ...
        
    }
    
    //根据具体的电路图不一样,此函数也会币一样,比如低频使用PA_BOOST,高频使用RFO_HF,则函数体如下
    uint8_t SX1276GetPaSelect( uint32_t channel )
    {
        //如果是低频的,使用PA_BOOST,高频使用RFO_HF
        if( channel < RF_MID_BAND_THRESH )
        {
            return RF_PACONFIG_PASELECT_PABOOST;
        }
        else
        {
            return RF_PACONFIG_PASELECT_RFO;
        }
    }
    //如果高低频都使用PA_BOOST,则函数体如下
    uint8_t SX1276GetPaSelect( uint32_t channel )
    {
        return RF_PACONFIG_PASELECT_PABOOST; 
    }
    //如果高频使用PA_BOOST,低频使用RFO_LF,则函数体如下
    uint8_t SX1276GetPaSelect( uint32_t channel )
    {
        //如果是高频的,使用PA_BOOST,低频使用RFO_LF
        if( channel > RF_MID_BAND_THRESH )
        {
            return RF_PACONFIG_PASELECT_PABOOST;
        }
        else
        {
            return RF_PACONFIG_PASELECT_RFO;
        }
    }
    
    /*!
    * RegPaConfig
    */
    #define RF_PACONFIG_PASELECT_MASK                   0x7F
    #define RF_PACONFIG_PASELECT_PABOOST                0x80
    #define RF_PACONFIG_PASELECT_RFO                    0x00 // Default
  • 否则为0
  • RXTX switch(接收和发送的天线电路的切换)
    在图中可以看到,射频输入和射频输出是不一样的电路,但是用的是一个天线,所以用到了一个射频电路切换的芯片。
    在程序中,需要做的就是控制FEM_CPS脚,在RX和TX时进行RF1(RFI)和RF2(RFO)的切换。
    由于在设计中兼容高低频,并且使用两个引脚分别控制高频和低频部分的射频部分输入输出的切换,所以在实际使用中需要控制两个引脚。
    void SX1276SetAntSw( uint8_t rxTx )
    {
        if( rxTx != 0 ) // 1: TX, 0: RX
        {
            GpioWrite( &AntSwitchLf, 0 );//切换到低频发射电路
            GpioWrite( &AntSwitchHf, 1 );//切换到高频发射电路
        }
        else
        {
            GpioWrite( &AntSwitchLf, 1 );//切换到低频接收电路
            GpioWrite( &AntSwitchHf, 0 );//切换到高频接收电路 
        }
    }
    如果只有高频或者低频一个部分,上面的代码只要保留相应的部分即可

    相关内容推荐