1 Reply Latest reply on Apr 5, 2010 8:45 AM by csai@cypress.com

    lowest possible sleep using CYRF69103

    victor.carvajal
              hello,   
         
      We want to achieve the lowest possible power consumption during sleep mode.   
         
      We are following suggestions made in the datasheet, Rev E, for the CYRF69103 pg. 31.   
      as well as the suggestions made in the KB article,   
          http://www.cypress.com/?id=4&rID=27383 But we are no where near the 1mA current, we are drawing .400 mA   
         
      Attached is a snippet from our project that illustrates what we are trying to attached.   
         
         
      /*
      * 2. goes here second to try and configure for lowest possible sleep
      */
      void state_sleep_enter(void)
      {
      // turn off the XOUT
      // Note: free to use XOUT after call to Radio_Init()
      RadioWrite(XTAL_CTRL_ADR, XOUT_FNC_GPIO); // XOUT=GPIO
      RadioWrite(IO_CFG_ADR, IRQ_GPIO); // IRQ=GPIO
      RadioWrite(GPIO_CTRL_ADR, RadioRead(GPIO_CTRL_ADR) & ~XOUT_OP); // XOUT and MISO drive low
      RadioWrite(GPIO_CTRL_ADR, RadioRead(GPIO_CTRL_ADR) & ~MISO_OP);
      RadioWrite(GPIO_CTRL_ADR, RadioRead(GPIO_CTRL_ADR) & ~IRQ_OP);
      RadioForceState(0); // Set END_STATE_SLEEP & Force transition now; go to sleep once after tx/rx operations.
      RadioWrite(PWR_CTRL_ADR, PMU_MODE_FORCE); // Disable PMU

      // put MCU in lowest power setting
      // set to lowest cpu clk setting and sleep for 1 sec.
      OSC_CR0 = OSC_CR0_CPU_187d5kHz | OSC_CR0_SLEEP_1Hz;

      // put the 32kHz oscillator in low power mode
      LPOSCTR |= 0x80;
      // make sure ITMRCLK and TCPCLK are not source by either oscillator
      TMRCLKCR |= 0x30;

      }

      /*
      * 3.
      * stay here for a while to measure sleep current.
      */
      void state_sleep(void)
      {
      while(1) {
      M8C_ClearIntFlag(INT_MSK0, INT_MSK0_SLEEP);
      M8C_EnableIntMask(INT_MSK0, INT_MSK0_SLEEP); // Enable Sleep Timer
      M8C_ClearWDTAndSleep; // Clear watchdog and sleep
      M8C_Sleep; // ~800ms @ this clock speed
      }
      }

      /*
      * 1.
      * Goes here first to initialize
      */
      void state_main_enter(void)
      {

      M8C_EnableGInt;

      P21_LO;
      P17_LO;
      P12_LO;
      P11_LO;
      P10_LO;
      //TO_MISO_LO;
      //TO_XOUT_LO;
      //LP_IRQ_LO;
      RadioForceState(0); // Set END_STATE_SLEEP & Force transition now; go to sleep once after tx/rx operations.
      RadioWrite(PWR_CTRL_ADR, PMU_MODE_FORCE); // Disable PMU
      }
         
         
         
      Anyone who has worked with this chip and has suggestions would be greatly appreciated.   
        • 1. Re: lowest possible sleep using CYRF69103
          csai@cypress.com
                  Dear Victor,   
             
          There is small mistake in the code you have mentioned. Please find the code snippet which is making you drive such a high current.   
             
          P11_LO;   
          P10_LO;   
             
          You should not make your P1[0] and P1[1] low during sleep mode.   
             
          To achieve the lowest possible power consumption during suspend/sleep, the following conditions must be observed in addition to considerations for the sleep timer and external crystal oscillator:   
          .All GPIOs must be set to outputs and driven low   
          .The port pins P1.0 and P1.1 should be configured as inputs with their pull ups enabled.   
             
             
          Hope this helps you. I have given you the same reply in the technical support case you have created :-)   
             
          Regards,   
          Sai Prashanth   
          Applications Engineer.