文章出處
文章列表
和硬件相關的問題
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 );//切換到高頻接收電路
}
}
如果只有高頻或者低頻一個部分,上面的代碼只要保留相應的部分即可
文章列表
全站熱搜