Skip to main content
Southbranch
Senior
December 2, 2025
Solved

ST67W61 - failing to receive correct boot sequence

  • December 2, 2025
  • 2 replies
  • 603 views

Hi!

I am trying a very simple test to receive the correct boot-up sequence which should be 0x55 0xAA and I am using this code:

void ST67W_test(void)
{
 printf("\r\n*** Bare-metal ST67W SPI Test ***\r\n");

 // 1. Turn module ON
 HAL_GPIO_WritePin(CHIP_EN_GPIO_Port, CHIP_EN_Pin, GPIO_PIN_SET);

 // 2. Wait for RDY = HIGH (boot event present)
 while (HAL_GPIO_ReadPin(SPI_RDY_GPIO_Port, SPI_RDY_Pin) == GPIO_PIN_RESET) {;}

 // 3. Assert CS = HIGH (begin frame)
 HAL_GPIO_WritePin(SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_SET);

 // 4. Perform SPI transfer
 uint8_t tx[8] = {0};
 uint8_t rx[8] = {0};
 if (HAL_SPI_TransmitReceive(&NCP_SPI_HANDLE, tx, rx, 8, 100) != HAL_OK)
 {
 printf("\r\nSPI transfer failed!\r\n");
 HAL_GPIO_WritePin(SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_RESET);
 return;
 }

 printf("\r\nRX: %02X %02X %02X %02X %02X %02X %02X %02X\r\n", 
 rx[0], rx[1], rx[2], rx[3], rx[4], rx[5], rx[6], rx[7]);

 // 5. CS = LOW -> end of frame
 HAL_GPIO_WritePin(SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_RESET);
 
 // 6. Done, turn off module
 HAL_GPIO_WritePin(CHIP_EN_GPIO_Port, CHIP_EN_Pin, GPIO_PIN_RESET);
}

 

I have tried three different boards with the NUCLEO-67W61M1 but with the same faulty result:

*** Bare-metal ST67W SPI Test ***
Waiting for SPI_RDY...
RDY boot detected.
RX: 01 55 00 00 00 00 01 00

 

Feels like some timing issue, but I am using the same SPI settings as in CubeMX examples:

Southbranch_0-1764669963803.png

 

Many thanks in advance for any hints

Best answer by EPASZ.1

You can take the application in Projects\NUCLEO-U575ZI-Q\Utilities\NCP\NCP_Loader\ as a base for the custom Bootloader binary. UART_bypass does not need to be ported for "normal" application functionality - it is only used for specific RF testing (with the Manufacturing binary loaded on the module).

2 replies

EPASZ.1
ST Employee
December 4, 2025

A reason for this is probably that the binary on the NCP is not updated to the same version as the host FW. The 0x5501 value was used in the initial SW in modules shipped after the release.

I'd suggest updating the binary, using to the attached scripts in \Projects\ST67W6X_Scripts\Binaries - described in https://wiki.st.com/stm32mcu/wiki/Connectivity:Wi-Fi_MCU_Hardware_Setup#Flashing_the_ST67W611M1_using_QConn_Flash_with_an_STM32_host

Southbranch
Senior
December 6, 2025

Thanks,

I have tried most of it without success and I suspect a faulty NUCLEO-67W61 board. To rule out I have now ordered a new one.

In the meanwhile, is there any source code available for Bootloader.bin, UART_bypass.bin that could be adopted for other than the listed boards?

Thanks in advance

EPASZ.1
EPASZ.1Best answer
ST Employee
December 8, 2025

You can take the application in Projects\NUCLEO-U575ZI-Q\Utilities\NCP\NCP_Loader\ as a base for the custom Bootloader binary. UART_bypass does not need to be ported for "normal" application functionality - it is only used for specific RF testing (with the Manufacturing binary loaded on the module).