2023-10-12 08:14 PM - edited 2023-10-17 09:12 PM
Hi!
EDIT 4: it was solved, and the solution at the end of the post.
I did a hardware design based on the STM32WL55 chip + Balun and one line for controlling the radio, FE_CTRL1. I modified the HAL radio library for all the SET-RESET only using RF_SW_CTRL1 and added the RF_TCXO init and its VDD value 3V0.
The problem is that I can't communicate fully between the device and the network; it connects, sends the data (I see on the NS), and then freezes. I added some "logs" to print through the UART to check the process.
Normal working:
OnMacProcessNotify
32s099:MAC rxDone
32s101:UpdateRxSlotIdleState
OnTxData
###### ========== MCPS-Confirm =============
###### U/L FRAME:0001 | PORT:2 | DR:0 | PWR:5 | MSG TYPE:UNCONFIRMED
OUT OF IF - ELSE
RESTORE MAIN TASK
OnRxData
###### D/L FRAME:0000 | PORT:0 | DR:10 | SLOT:1 | RSSI:-29 | SNR:9
OnRxData END
Edit, I tried called the send task right after connecting and this happens:
SendTxFrame Init
81s196:TX on freq 904100000 Hz at DR 0
81s198:SEND REQUEST
SendTxFrame END
OnMacProcessNotify
81s569:MAC txDone
81s569:ProcessRadioTxDone
86s552:RX_1 on freq 923900000 Hz at DR 10
OnMacProcessNotify
86s655:MAC rxDone
86s655:ProcessRadioRxDone
EDIT2: it seems it is related to RX_2, right?
Despite that, I am having difficulty using a JTAG debugger through the SWDIO to see which part of the code is freezing. Any ideas I can test?
EDIT1(more information):
Part of the SCH
I am using the Balun WL-02D3 and a BGS12SN6 RF switch. I modified part of the code in stm32wlxx_nucleo_radio.c like this:
int32_t BSP_RADIO_Init(void)
{
GPIO_InitTypeDef gpio_init_structure = {0};
/* Enable the Radio Switch Clock */
RF_SW_CTRL1_GPIO_CLK_ENABLE();
/* Configure the Radio Switch pin */
gpio_init_structure.Pin = RF_SW_CTRL1_PIN;
gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP;
gpio_init_structure.Pull = GPIO_NOPULL;
gpio_init_structure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(RF_SW_CTRL1_GPIO_PORT, &gpio_init_structure);
gpio_init_structure.Pin = RF_TCXO_VCC_PIN;
HAL_GPIO_Init(RF_TCXO_VCC_GPIO_PORT, &gpio_init_structure);
HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(RF_TCXO_VCC_GPIO_PORT, RF_TCXO_VCC_PIN, GPIO_PIN_SET);
return BSP_ERROR_NONE;
}
int32_t BSP_RADIO_DeInit(void)
{
RF_SW_CTRL1_GPIO_CLK_ENABLE();
/* Turn off switch */
HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_RESET);
/* DeInit the Radio Switch pin */
HAL_GPIO_DeInit(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN);
return BSP_ERROR_NONE;
}
int32_t BSP_RADIO_ConfigRFSwitch(BSP_RADIO_Switch_TypeDef Config)
{
switch (Config)
{
case RADIO_SWITCH_OFF:
{
/* Turn off switch */
HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_RESET);
break;
}
case RADIO_SWITCH_RX:
{
/*Turns On in Rx Mode the RF Switch */
HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_RESET);
break;
}
case RADIO_SWITCH_RFO_LP:
{
/*Turns On in Tx Low Power the RF Switch */
HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_SET);
break;
}
case RADIO_SWITCH_RFO_HP:
{
/*Turns On in Tx High Power the RF Switch */
HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_SET);
break;
}
default:
break;
}
return BSP_ERROR_NONE;
}
TTN console:
1) Gateway:
2) Application:
EDIT3: Hard fault view.
SOLUTION:
It was very easy, but took me longer than I thought. In the file sys_app.c there is a function that was making the MCU halt, despite I had no debug lines activated. It added the comment block, and it worked like a charm.
Best,
Roberto.