cancel
Showing results for 
Search instead for 
Did you mean: 

ST67W61 - failing to receive correct boot sequence

Southbranch
Senior II

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

1 ACCEPTED SOLUTION

Accepted Solutions
EPASZ.1
ST Employee

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).

View solution in original post

3 REPLIES 3
EPASZ.1
ST Employee

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

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
ST Employee

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).