3.4.2 Analog to Digital Converter (ADC)
An internal ADC can monitor the internal die temperature and the battery voltage. The battery voltage is determined by reading the
voltage at the either the VDDA or VDDB pins of the device. The determination of which pin to read is made automatically by hardware -
if a valid voltage is present on VDDA (e.g., CC_MODE.SC_MODE==1), VDDA will be measured; otherwise, VDDB will be measured.
ADC Result Registers
The measured 12-bit ADC readings are automatically loaded into 8-bit register pairs, divided into the most significant nibble and the
least significant byte. Because these ADC results are spread over two registers and the result may be continuously updated, address-
ing any of these ADC result registers causes an inhibition in the updating of the register to prevent corruption. To ensure coherence
when reading the most significant and least significant bytes, a MSBY register read causes the corresponding LSBY register value to
be stored into a shadow register. Reading the LSBY register will then return the value stored in the LSBY shadow register.
There are three ADC voltage result register pairs and one ADC temperature result register pair, as described below:
• VDD_AVG_MSN, VDD_AVG_LSBY: These registers hold the 12-bit filtered average voltage reading. The IIR averaging low-pass
filter time constant is set by the ADC_CC_CTRL.ADC_IIR_TAU bitfield (time constant = 2ADC_IIR_TAU). It is recommended to set
ADC_IIR_TAU = 7 to provide the slowest filtering.
• VDD_MIN_MSN, VDD_MIN_LSBY: These registers hold the 12-bit minimum voltage reading since the device was powered on or
since the last ADC_CLR event.
• VDD_MAX_MSN, VDD_MAX_LSBY: These registers hold the 12-bit maximum voltage reading since the device was powered on, or
since the last ADC_CLR event.
• TEMP_MSN, TEMP_LSBY: These registers hold the last 12-bit temperature reading.
When the CMD.ADC_CLR bit is set, on the next subsequent ADC trigger (whether manual or automatic), all three of the ADC result
register pairs will be set to the same read value.
ADC Triggering
Each ADC triggering will cause a reading of both the voltage and temperature. The ADC readings can be triggered manually or auto-
matically:
• The CMD.ADC_START bit can be set to manually trigger an ADC reading.
• The ADC can be configured to trigger automatically based off the number of counted pulse events in all enabled converters by con-
figuring ADC_CC_CTRL.ADC_INTERVAL. If ADC_INTERVAL > 0, the rate of automatic ADC readings is determined by the number
of counted pulse events (2(ADC_INTERVAL + 3)). Note in certain scenarios (e.g., EM2 with very light loading) it is possible to have very
long periods of time with few or no pulse events. For that reason, whenever ADC_INTERVAL > 0, the ADC readings will be updated
at a minimum period of four refresh cycles (approximately ~400 msec at room temperature), regardless of the number of counted
pulse events. It is recommended to set ADC_INTERVAL=7.
• If ADC_CC_CTRL.ADC_INTERVAL = 0, no automatic ADC readings will occur.
Because the ADC has multiple uses (both internally and at the application level) and ADC readings consume very little power, it is rec-
ommended to always set ADC_INTERVAL=7 to ensure that ADC readings are always triggered periodically automatically. Some of the
uses of the ADC include the following:
• If BB_CTRL2.BB_IPK_NOADJ=0, the ADC is used internally to to adjust the boost converter peak current as the battery voltage
drops, providing a near-constant output load current over the entire battery range.
• The ADC is used to determine whether a Low Battery Fault (STATUS_G.VDD_LOW) has occurred. The threshold for a Low Battery
Fault is set in ADC_LIMITS.ADC_V_LIM.
• The battery voltage reading is used to determine the charge per pulse during Coulomb counting.
• The ADC temperature readings are used to optimize the internal bias refresh rate over temperature and to determine whether an
Over Temperature Fault (STATUS_G.TEMP_FAULT) has occurred (where the threshold for the Over Temperature condition is set
by ADC_LIMITS.ADC_T_LIM).
If enabled (i.e., ADC_CC_CTRL.ADC_INTERVAL > 0), the ADC will continue to take measurements in EM0 and EM2 energy modes. In
EM4, the ADC will be automatically disabled and no measurement updates will occur.
ADC Calculations
To convert from the result register values to usable units:
• VDDB (mV) = ((VDD_xxx_MSN<<8) + VDD_xxx_LSBY) × 1.49
• VDDA (mV) = ((VDD_xxx_MSN<<8) + VDD_xxx_LSBY) × 1.01
• Temperature (C) = 40 + (convert_from_2s_complement((TEMP_MSN<<8) + TEMP_LSBY) + 2) / 6.04236
EFP01 Energy Friendly PMIC Family Data Sheet
System Overview
silabs.com | Building a more connected world. Rev. 1.2 | 26