Internal vs. External Oscillator

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

cross mob
MichaelF_56
Moderator
Moderator
Moderator
250 sign-ins 25 comments on blog 10 comments on blog

On page 9 of the 20732S datasheet, it says that the oscillator circuit can be designed for a 32 kHz or 32.768 kHz crystal oscillator and implies in the next sentence that this can be provided externally (characteristics defined in Table 1).

Does this mean that there is already an internal low power oscillator internal to the device?

I have seen mentions of this clock scattered throughout various pieces of the API/SDK documentation, but nothing within the datasheet really explains the internal LPO.

My guess is that the external oscillator is used to provide better accuracy and lower sleep current, but what I'm wondering is whether or not the clock that's internal to the module can be used to wake from deep sleep.

0 Likes
3 Replies
MichaelF_56
Moderator
Moderator
Moderator
250 sign-ins 25 comments on blog 10 comments on blog


Per the diagram on page 8 of the datasheet, the module includes a standard 24MHz Pierce oscillator for System and RF timing.  In addition, there is an internal LPO which handles the other clocking chores required by the SOC inside the module.

Related to Deep Sleep, the firmware supports waking the part after configured time interval.

With the internal clock, it can wake anywhere from 64mS to ~36 Hrs.

With external 32 KHz xtal, 128mS - ~144 Hrs

0 Likes
Anonymous
Not applicable

From the SDK API documentation and also doing searches it would appear there is a 128KHz internal clock that can be used to wake from DEEP_SLEEP.  This 128KHz Clock and the ability to use it to wake from DEEP SLEEP is referenced in platform.cgs and also in devicelpm.c as shown below.  There is no mention of this 128KHz clock in the BCM20732S Reference Manual though and/or what all it can be used for so there is a bit of uncertainty here...?

This 128KHz clock is also referenced in miadriver.h and rtc.h in which it is not clear what the difference is between what the differences between the MIA function such as mia_enterHidOff and mia_setupTimedWake() functions vs. similar functions found in devicelpm.c. 

platform.cgs

################################################################################

#  Low power configuration

################################################################################

ENTRY "Sleep Mode Configuration"

{

    "Sleep mode" = "HIDD"

    "Sleep enable" = 1

}

ENTRY "Device LPM Configuration"

{

   "Disconnect Low Power Mode" = "HID_OFF"

   "wakeFromHidoffInMs" = 0                               # Time in milliseconds to automatically wake from hid-off. 0 = don't wake.

   "wakeFromHidoffRefClk" = "TIMED_WAKE_CLK_SRC_128KHZ"       # Reference clock source

devicelpm.c

/// Configuration record of this LPM

DeviceLpmConfig devLpmConfig =

{

    // Use sleep in disconnect

    DEV_LPM_DISC_LOW_POWER_MODES_SLEEP,

    // Never wakeup

    HID_OFF_WAKEUP_TIME_NONE,

    // Use 128 KHz internal MIA clock as reference

    HID_OFF_TIMED_WAKE_CLK_SRC_128KHZ,

};

miadriver.h

typedef enum

{

    /// Use the 32 KHz clock for the RTC to give a range of ~64 ms - ~36 Hrs

    HID_OFF_TIMED_WAKE_CLK_SRC_32KHZ,

    /// Use the 128 KHz clock for the RTC to give a range of ~256 ms - ~144 Hrs

    HID_OFF_TIMED_WAKE_CLK_SRC_128KHZ

} MiaTimedWakeRefClock;

rtc.h

enum

{

    RTC_REF_CLOCK_SRC_32KHZ  = 32,

    RTC_REF_CLOCK_SRC_128KHZ = 128

};

Regards,

Frank

0 Likes

With the internal clock (this is the 128 kHz clock you reference in your post), the part can be programmed to wake anywhere from 64mS to ~36 Hrs.

0 Likes