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
                    hhyogo

                    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!