The sx1261 seems to be timing sensitive during configuration. I have multiple strange behaviors like low power output or bad frequency.
I'm using a custom bord with stm32l152 and I measure output power with an R&S Spectrum Rider FPH (spectrometer 5kHz->3Ghz).
Config 1 :
- SX126xWaitOnBusy not implemented
- Delay of 1s before and after Radio.SetChannel
==> Works correctly, the power is 14dB and frequency is 868Mhz
Config 2:
- SX126xWaitOnBusy implemented
- No delay
==> Frequency is OK, but power is reduce to -15dB
Config 3:
- SX126xWaitOnBusy not implemented
- No delay
==> Power output is Ok but frequency is set to 915Mhz
Here most important part of my code:
Main.c
Radio.Init( &RadioEvents );
// Delays are mandatory without SX126xWaitOnBusy
//HAL_Delay(1000);
Radio.SetChannel( RF_FREQUENCY );
//HAL_Delay(1000);
Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
LORA_SPREADING_FACTOR, LORA_CODINGRATE,
LORA_PREAMBLE_LENGTH,LORA_FIX_LENGTH_PAYLOAD,
LORA_CRC, 0, 0, LORA_IQ_INVERSION, TX_TIMEOUT_VALUE );
Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD,
LORA_RX_LENGTH_PAYLOAD, LORA_CRC, 0, 0, LORA_IQ_INVERSION, RX_CONTINUOUS );
while (1){
SetTrame(BufferTx, LORA_TX_LENGTH_PAYLOAD);
Radio.Send(BufferTx, LORA_TX_LENGTH_PAYLOAD);
RadioStatus_t status = SX126xGetStatus();
}
sx126X-board.c
void SX126xReset( void ){
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = SX_NRESET_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(SX_NRESET_GPIO_Port, &GPIO_InitStruct);
HAL_Delay(10);
HAL_GPIO_WritePin(SX_NRESET_GPIO_Port, SX_NRESET_Pin, GPIO_PIN_RESET);
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
HAL_GPIO_Init(SX_NRESET_GPIO_Port, &GPIO_InitStruct);
HAL_Delay(10);
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
HAL_GPIO_Init(SX_NRESET_GPIO_Port, &GPIO_InitStruct);
}
void SX126xWaitOnBusy( void ){
/*
HAL_Delay(3);
while( HAL_GPIO_ReadPin(SX_BUSY_GPIO_Port, SX_BUSY_Pin) == 1 );
*/
}
Anyone have this issue ?