CYW43439: WHD in gSPI mode keeps waking up due to SPI interrupt

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
fvaussard
Level 1
Level 1
10 sign-ins 5 sign-ins First reply posted

Hello,

We are testing a CYW43439 to integrate it in our next product. I am using WHD with our RTOS to perform periodic scans of nearby access points. This is working almost as expected, but there is an unexpected behaviour that I wanted to check with you.

My environment:

  • MCU is a STM32L496 (NUCLEO-L496ZG)
  • CYW43439 module is a development kit based on Laird LWB+, but we are planning to use a Murata 1YN in our product
  • gSPI interface is used (SDIO_D2 is tied to GND)
  • Using the latest version of WHD (2.5.0.15307)
  • Firmware / NVRAM / CLM blob from the WHD repository
  • We wrote the glue layer to work with our RTOS (Zephyr)
  • The test firmware performs a scan every 30 seconds using whd_wifi_scan()

In brief (see details below):

  1. If I am using the SPI IRQ line as the OOB interrupt, the module generates an IRQ every 10ms even when scan is off. This prevents the module from reaching a low-power state. The average current is around 12mA in that case.
  2. If I am using the HOST_WAKE line as the OOB interrupt, it seems to work as expected and the average current is 430uA between scans.

My questions:

  1. Am I doing something wrong with the SPI IRQ that would explain this behaviour ?
  2. I had to change the NVRAM config in order to enable the HOST_WAKE interrupt. I would like to confirm that the changes (see below) are correct for both Laird and Murata CYW43439 modules since these parameters are not documented.
  3. If we use the HOST_WAKE line instead of the SPI interrupt line, would it be safe to not route the SPI IRQ on the PCB to save some real estate ? Or would the SPI IRQ be of any use in the future ?

DETAILS

After writing the glue layer, I resorted to use the SPI interrupt line for the OOB interrupt, because whd_wifi_on() was failing if I tried to use the HOST_WAKE line instead. The logic analyser confirmed no activity on HOST_WAKE.

But after doing a scan, the power consumption was too high. I noticed that whd_kso_enable() was constantly called, which was due to the SPI IRQ line firing every 10ms as it can be seen in the captures:

SPI IRQ fires every 10msSPI IRQ fires every 10ms

 

spi-irq-1.png

 

For each interrupt, WHD performs whd_kso_enable(WHD_TRUE) and reads the SPI interrupt register. Strangely, the interrupt register reads 0x0000 (confirmed by logging + logic analyser, see below). As a result, nothing is done and the module is put back to sleep with whd_kso_enable(WHD_FALSE). This repeats every 10ms forever.

The gSPI interrupt register reads 0x0000The gSPI interrupt register reads 0x0000

By searching on the forum, I found (HERE ) that the HOST_WAKE interrupt can be enabled by modifying the NVRAM as follow:

muxenab=0x10
sd_gpout=0
sd_gpval=1
sd_oobonly=1

By applying these changes to the Laird LWB+ NVRAM, I was able to get a working HOST_WAKE (but changing only muxenab does not seem enough as I already tried this earlier during testing). I was not able to find any documentation on the sd_xxx parameters.

To conclude, a comparison image of the power consumption around a scan for the 2 configurations

  • green: SPI IRQ used as OOB
  • red: NVRAM change + HOST_WAKE used as OOB

Current comparison between both casesCurrent comparison between both cases

 

We can clearly see the ripple at 100Hz on the green line due to the SPI IRQ which keeps firing after the scan.

Best regards,

Florian

0 Likes
1 Solution
Aditi_B
Moderator
Moderator
Moderator
500 replies posted 5 questions asked 250 replies posted

Hi,

I raised the query to the internal team and the internal team confirms the setting of the NVRAM to set the HOST_WAKE GPIO pin as OOB interrupt. The settings are not documented currently in any document. I'll take this as a feedback to provide proper documentation on this. 

The internal team said that it's required to use the HOST_WAKE GPIO pin as an OOB interrupt to enter the low power mode. Otherwise, it won't enter the low power mode, not sure why SPI interrupt is getting triggered every 10ms even though there is no activity.

You can go ahead and remove the SPI IRQ pin if it's not used at all in your project, but this totally depends on your application. You can analyze and see if the pin finds a use in your application or in future additions, then you can keep it.

Thanks

Aditi

View solution in original post

0 Likes
3 Replies
Aditi_B
Moderator
Moderator
Moderator
500 replies posted 5 questions asked 250 replies posted

Hi,

I'll check with the internal team and will revert back.

Thanks

Aditi

0 Likes
fvaussard
Level 1
Level 1
10 sign-ins 5 sign-ins First reply posted

Hello @Aditi_B 

Do you have any news regarding this question ?

With my best regards,

Florian

0 Likes
Aditi_B
Moderator
Moderator
Moderator
500 replies posted 5 questions asked 250 replies posted

Hi,

I raised the query to the internal team and the internal team confirms the setting of the NVRAM to set the HOST_WAKE GPIO pin as OOB interrupt. The settings are not documented currently in any document. I'll take this as a feedback to provide proper documentation on this. 

The internal team said that it's required to use the HOST_WAKE GPIO pin as an OOB interrupt to enter the low power mode. Otherwise, it won't enter the low power mode, not sure why SPI interrupt is getting triggered every 10ms even though there is no activity.

You can go ahead and remove the SPI IRQ pin if it's not used at all in your project, but this totally depends on your application. You can analyze and see if the pin finds a use in your application or in future additions, then you can keep it.

Thanks

Aditi

0 Likes