Skip to main content
WSH
Associate II
August 5, 2021
Solved

STM32WB Fails on SHCI_C2_BLE_Init

  • August 5, 2021
  • 9 replies
  • 3754 views

Hello! I'm working with a custom STM32WB10CCU board and can't seem to get BLE working.

Here are the details:

  • I have no LSE on the board.. just HSE. I'm configuring RFWKP to HSE/1024 and RTC to HSE/32 (I know that LSE is strongly recommended -.. but from what I've read it's not a hard req unless you want to go into certain sleep modes)
  • I'm using STM32WB v1.2 core and have IPCC enabled with the added RTC_WKUP_IRQHandler call that's supposed to be implemented as per every BLE workshop video/slide deck
  • I have a ST-Link V2 and I'm stepping through the code. It's going to my Error handler directly after running the SHCI_C2_BLE_Init because it fails.. Not sure why.
  • I used STM32CubeProgrammer to upload the latest Wireless Stack via FUS and ensured it was abled. When reading FUS info with wireless stack enabled I'm getting version: 4.0.0.c
  • Since I'm running RTC off of HSE, I had to add HAL_PWR_EnableBkUpAccess(); to my HAL_RTC_MspInit call or else RTC init times out and fails. I think this could possibly be related to my problem?
  • I'm using the peer2peer BLE service

I don't know what else to put since I haven't done anything outside of configure the project and add the HSE configuration via OTP and added the other interrupt handler.

I'm at a loss and don't know where to go from here.. I verified there isn't an issue with my 32MHz source by de-soldering it from the board to see that SystemClock_Config would fail -- and it does.

Is there any other way to test that the M0 is active and accepting commands? I have a feeling something is wrong it, but don't know how to debug from this point.

Thank you!

This topic has been closed for replies.
Best answer by WSH

I figured it out! The Init struct must have the header. The reason why I was getting the memory error was due to the STM32WB10's limited memory capacity and an improper CubeMx setup.

For anyone using the STM32WB10, please note you are limited in GATT/GAP services you can initialize. The default CubeMx BLE setup will initialize BLE as if it's for the STM32WB55. You can look at the STM32WB15's sample project setup for the proper settings.

9 replies

WSH
WSHAuthor
Associate II
August 5, 2021

After further debugging. The error code SHCI_C2_BLE_Init is returning is: 0x07. This isn't defined anywhere in the shci.h. What does this code mean?

WSH
WSHAuthor
Associate II
August 5, 2021

Sorry for continuously bumping this... Want to provide information as I come across it.. Incase it helps someone else or helps us to the solution.

I found AN5270 and the HCI Status Error Codes. 0x07 corresponds to "Memory Capacity Exceeded" error. Which in BLE Core Specification 5.2 Vol. 2 Part D is: "The memory capacity exceeded error code indicates to the host that the controller has run out of memory to store new parameters."

So this either means something is off with the STM32WB10CC's M0+'s firmware or the p2p server code for sending the BLE_Init CMD is too big.. Don't quite know which.

WSH
WSHAuthor
Associate II
August 5, 2021

Update #3:

Within app_ble.c I found that removing the header from SHCI_C2_Ble_Init_Cmd_Packet_t seems to make SHCI_C2_BLE_Init return a status code of 0x00. Here is my CMD Packet struct:

SHCI_C2_Ble_Init_Cmd_Packet_t ble_init_cmd_packet =
 {
 {0, /** pBleBufferAddress not used */
 0, /** BleBufferSize not used */
 CFG_BLE_NUM_GATT_ATTRIBUTES,
 CFG_BLE_NUM_GATT_SERVICES,
 CFG_BLE_ATT_VALUE_ARRAY_SIZE,
 CFG_BLE_NUM_LINK,
 CFG_BLE_DATA_LENGTH_EXTENSION,
 CFG_BLE_PREPARE_WRITE_LIST_SIZE,
 CFG_BLE_MBLOCK_COUNT,
 CFG_BLE_MAX_ATT_MTU,
 CFG_BLE_SLAVE_SCA,
 CFG_BLE_MASTER_SCA,
 1,
 CFG_BLE_MAX_CONN_EVENT_LENGTH,
 CFG_BLE_HSE_STARTUP_TIME,
 CFG_BLE_VITERBI_MODE,
 CFG_BLE_OPTIONS,
 0,
 CFG_BLE_MAX_COC_INITIATOR_NBR,
 CFG_BLE_MIN_TX_POWER,
 CFG_BLE_MAX_TX_POWER}
 };

With this... Still not able to see the p2p advertising.

WSH
WSHAuthorBest answer
Associate II
August 9, 2021

I figured it out! The Init struct must have the header. The reason why I was getting the memory error was due to the STM32WB10's limited memory capacity and an improper CubeMx setup.

For anyone using the STM32WB10, please note you are limited in GATT/GAP services you can initialize. The default CubeMx BLE setup will initialize BLE as if it's for the STM32WB55. You can look at the STM32WB15's sample project setup for the proper settings.

ERoja.2
Visitor II
February 11, 2022

Hi there, first of all ty for you help WSH,

You were right, i'm using the stm32wb15cc so as you appoint there's a bad configuration caused by the cube ide configurator, inside the file app_ble.c line 302, the function SHCI_C2_BLE_Init( &ble_init_cmd_packet ) returns a 0x07 as you stated before, so the way i was able to fix it was changing some default parameters in the WPAN configuration tab, here's a snapshot of the most important IMHO, there are others but i guess these are the most important because the stack size, so any way, checking all the parameters against the examples of wb15cc can solve the problem :)

Regards!

0693W00000JPW9aQAH.png