- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Labels:
-
Clocks (InternalExternal)
- Tags:
- 32 khz
- advantage external osc
- external oscillator
- external oscillator advantages
- internal oscillator
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.