9 Replies Latest reply on Feb 20, 2017 6:27 PM by josh.yu_1995211

    Wifi high throughput clock not starting

    saurabhk2

      I am using murata wifi board type 1dx housing a BCM4343W chip, SDK version is 3.4.0.

      In wwd_bus_sdio_download_firmware, there is a while loop which waits for high throughput

      clock, in that case timeout occurs as follows

      if ( loop_count >= (uint32_t) HT_AVAIL_TIMEOUT_MS )

          {

              /* If your system times out here, it means that the WLAN firmware is not booting.

               * Check that your WLAN chip matches the 'wifi_image.c' being built - in GNU toolchain, $(CHIP)

               * makefile variable must be correct.

               */

               WPRINT_WWD_ERROR(("Timeout while waiting for high throughput clock\n"));

               /*@-unreachable@*/ /* Reachable after hitting assert */

              return WWD_TIMEOUT;

               /*@+unreachable@*/

          }

      As per the comment, it says the chip used is wrong, but we have generated image.c file from

      WICED-SDK-3.4.0-AWS/resources/firmware/4343W/4343WA1.bin

      which is the same chip used by murata board.

       

      So are we missing any steps or compilation macros required

        • 1. Re: Wifi high throughput clock not starting
          mifo

          Murata 1DX with which Freescale Development board?

           

          A table listing the available options is here: Murata Wi-Fi/Bluetooth for Linux and Android

           

          vsubbiah_1779701 seyhan skerr_1713761 ghouse

          • 2. Re: Wifi high throughput clock not starting
            saurabhk2

            Murata 1DX is interfaced over SDIO with STM32F446.

            • 3. Re: Wifi high throughput clock not starting
              mifo

              Relocated discussion to the Murata Partner space for follow up.

               

              keith randerson yfang@murata.com hhyogo dan ghouse

              • 4. Re: Wifi high throughput clock not starting
                saurabhk2

                In wwd_bus_sdio_download_fimware() there is a while loop that waits for  high throughput clock to be available the csr_val returned by the murata chip is 0x40 but the HT expected value is 0x80.

                 

                Is there any configuration that we are missing to make this work.

                • 5. Re: Wifi high throughput clock not starting
                  saurabhk2

                  We are generating the image.c file using WICED-SDK-3.4.0-AWS\resources\firmware\4343W\4343WA1.bin and using the nvram_image file from WICED-SDK-3.4.0-AWS\platforms\BCM94343WWCD1\wifi_nvram_image.h

                   

                  Murata type1DX uses BCM4343W. Keeping that in mind we have used the files from the above paths. hope that is correct?

                  • 6. Re: Wifi high throughput clock not starting
                    user_422260470

                    Hi saurabhk2,

                     

                    Tthe nvram file in WICED is not for Murata 1DX module. We will send you the nvram file for Murata 1DX module. Please try that.

                    • 7. Re: Wifi high throughput clock not starting
                      saurabhk2

                      We had to add a hack to not start the wwd thread until the firmware loading completes. This fixed the issue and the HT clock started correctly.

                      • 8. Re: Wifi high throughput clock not starting
                        nishal

                        Hi Saurabh,

                         

                        Can you please share us the code snippet in which you have put this hack?

                        I am porting the code from SDK_3.5.2 to SDK_4.1.0(keeping old bootloader and DCT).  I am getting wiced_init() error with timeout. And the reason of timeout is "Timeout while waiting for high throughput clock".

                         

                        Can you please help me on the same.

                         

                        I am attaching the code snippet. From this I see that the WWD thread is initialized at the end.

                        /**
                        * Initialise Wi-Fi platform
                        *
                        * - Initialises the required parts of the hardware platform
                        *   i.e. pins for SDIO/SPI, interrupt, reset, power etc.
                        *
                        * - Initialises the WWD thread which arbitrates access
                        *   to the SDIO/SPI bus
                        *
                        * @return WWD_SUCCESS if initialization is successful, error code otherwise
                        */
                        wwd_result_t wwd_management_wifi_platform_init( wiced_country_code_t country, wiced_bool_t resume_after_deep_sleep )
                        {
                            wwd_result_t retval;
                            wwd_wlan_status.country_code = country;
                            retval = (wwd_result_t)host_platform_init( );
                            if ( retval != WWD_SUCCESS )
                            {
                                WPRINT_WWD_INFO(("Could not initialize platform interface:%d\n",retval));
                                return retval;
                            }
                            retval = (wwd_result_t)host_platform_bus_init( );
                            if ( retval != WWD_SUCCESS )
                            {
                                WPRINT_WWD_INFO(("Could not initialize platform bus interface:%d\n",retval));
                                return retval;
                            }
                            /* Enable 32K WLAN sleep clock */
                            host_platform_init_wlan_powersave_clock();
                            WPRINT_WWD_INFO(("host_platform_init_wlan_powersave_clock\n"));
                            if ( resume_after_deep_sleep == WICED_TRUE )
                            {
                                retval = ( wwd_result_t ) wwd_bus_resume_after_deep_sleep( );
                            }
                            else
                            {
                            WPRINT_WWD_INFO(("resume_after_deep_sleep FALSE\n"));
                            wwd_bus_init_stats( );
                                retval = ( wwd_result_t ) wwd_bus_init( );
                            WPRINT_WWD_INFO(("resume_after_deep_sleep %d\n",retval));
                            }
                            if ( retval != WWD_SUCCESS )
                            {
                                /* May have been due to user abort */
                                WPRINT_WWD_INFO(("Could not initialize bus\n"));
                                return retval;
                            }
                            WPRINT_WWD_INFO(("Success initialize bus\n"));
                            /* WLAN device is now powered up. Change state from OFF to DOWN */
                            wwd_wlan_status.state = WLAN_DOWN;
                            retval = wwd_thread_init( );
                            if ( retval != WWD_SUCCESS )
                            {
                                WPRINT_WWD_ERROR(("Could not initialize WWD thread\n"));
                                return retval;
                            }
                            host_platform_bus_enable_interrupt( );
                            return WWD_SUCCESS;
                        }

                         

                        Thanks in advance.

                        • 9. Re: Wifi high throughput clock not starting
                          josh.yu_1995211

                          I'm having the same problem. Could you post what you did to fix this?Thanks!