SMB - Smart Battery Module (Laptop Battery Pack) Info
Prints SBM controller info.
Based on the unmaintained PackProbe program from Power Cartel http://powercartel.com/projects/packprobe/.
- Incudes a combined volt / resistance meter, to determine the function of unknown SBM connections.
- Starts with I2C address scanning.
- Computing of pack ESR (Equivalent Series Resistor) if current changes from 0 to != 0 e.g. at start to charge or discharge.
- Activating a discharge MOsFet, as long as voltages are above 3.3 volt per cell.
- Reconnecting after I2C failure.
I do not know how to enter full access mode, clear permanent failure or unlock any controller IC. Unfortunately according to most datasheets, you need an unlock key. See also this article from 2011. Extract: Macbook batteries ship with a default unseal password (0x36720414). This was found by reverse engineering a Macbook battery update. On Macbook batteries, the full access mode password is also hardcoded and default (0xffffffff).
Download and extract the repository. In the Arduino IDE open the sketch with File -> Open... and select the SBMInfo folder.
Valuable information about battery pinout can also be found here or here.
The minimal connector layout is: | GROUND | THERMISTOR (103AT) | CLOCK | DATA | VCC (11 or 14 volt) | (clock and data my be switched).
- The thermistor connection has 10 kΩ to ground at 25 degree celsius.
- Clock und data connectors have the same resistance (around 0.3 to 1 MΩ) to ground and are next to each other.
- VCC may not be enabled. Sometimes it gets enabled when Host Present is connected to ground or clock and data are pulled high to 3.3 or 5 volt.
Some packs (e.g.for IBM-T41 with bq29310) require once an external voltage (e.g. 11 volt) at the VCC connector to initially get alive after full discharge condition.
If you see more connectors, the may be used for:
- A second (adjacent) ground and / or VCC to reduce the connector resistance for the supply current.
- A Battery Present signal. This connector is internally connected to ground at the battery pack and NOT connected to ground at the PC.
- A Host Present signal. This connector has a pullup at the battery back and is connected to ground at the PC side. Examples: | GROUND | BatteryPresent | THERMISTOR ? | CLOCK | DATA | VCC | - seen at HP packs. | GROUND | GROUND | Alert ? | HostPresent | BatteryPresent | DATA | CLOCK | VCC | VCC | - seen at Dell packs.
After startup, the program scans for a connected I2C device.
In version 4.0 a voltage and resistance measurement by means of 4 additional resistors is integrated to identify the I2C pins.
It measures voltage or resistance to ground (if voltage is zero).
The I2c pins have around 300 kΩ to 1000 kΩ, the thermistor 10 kΩ (sometimes up to 40 kΩ).
You can try different I2C pin combinations until led stops blinking and Found I2C device attached at address: 0x0B is printed.
If you connect clock or data with the thermistor connector or ground, the scanning stops.
After connecting, full data is printed.
Dynamic values like temperature, voltage and current are checked every 3 seconds and printed if changed.
Tested with bq20z70, bq20z451, bq2084, bq80201DBT, bq40z50.
An example schematic for a SBM module can be found in the datasheet of TI bq29311 at page 9.
The charge control pin (9) is high as long as relative charge is below 95%. It can be used to control a NPN transistor, which collector controls a high side P FET.
The discharge control pin (10) is high as long as relative charge is above 5% and voltage, if available, is below 3300 mV. It can be used to control a logic level FET directly.
The switch off values can be changed here
- line: "SBMInfo" | Version | VCC voltage
- line: Date of program compilation
- line: "Scan for device" | Scan counter
- line: Resistance or Voltage
- line: "SBMInfo" | Version
- line: Date of program compilation | Manufacturer name
- line: Manufacturer date (YYYY-MM-DD) | Battery cycle count
- line: Design voltage | Design capacity
- line: Voltage | Current (negative for discharging) | optional 'H' for read error (hold)
- line: Percent of designed full charge capacity | Design capacity -> Full charge capacity
- line: Percent of relative charge
- line: Time to empty of full at current current (of line 1)
- line: Currently available (remaining) capacity
| Dynamic data | Dynamic data while discharging |
|---|---|
![]() |
![]() |
Gibt die Daten des SMB Controllers aus. Basiert auf https://github.com/PowerCartel/PackProbe von Power Cartel http://powercartel.com/projects/packprobe/. Hier gibt es auch weitere wertvolle Informationen.
In der Version 4.0 ist eine Spannungs und Widerstandsmessung mittels 4 Widerständen integriert, um die I2C Pins zu identifizieren.
Die Clock und Data Eingänge waren bei meinen Packs die Anschlüsse mit einem Widerstand von ca. 300 k bis 1 MΩ nach Masse.
Nach dem Booten sucht das Programm nach einem angeschlossenen I2C Device.
Man kann also alle möglichen Pinkombinationen von Clock und Data am Battery Pack ausprobieren.
Bei der Richtigen hört das Blinken der Led auf und es kommt sofort die Ausgabe Found I2C device attached at address: 0x0B und direkt danach werden die Daten ausgegeben.
Bei den Laptop Battery Packs war Plus und Masse immer außen. Wenn mehr als 5 Kontakte vorhanden waren, waren sie wie folgt belegt:
- Masse und Plus doppelt. z.B. + | + | Thermistor | Data | Clock | - | -
- Ein Enable (nur im Laptop mit Masse verbunden) und eine Signal Anschluss (nur im Battery Pack mit Masse verbunden). z.B. VCC | VCC | CLOCK | DATA | Signal | Enable | THERMISTOR | GROUND | GROUND |
Der Thermo-Sensor Anschluss war uneinheitlich, mal nicht messbar beschaltet, mal 1 MΩ, mal 1,6 Volt, mal 10 kΩ nach Masse.
Zur Verbindung mit den Kontakten habe ich normales 1,5 qmm Kupferkabel aus der Hausinstallation genommen, dessen eines Ende ich mit einem Hammer etwas plattgeklopft hab. Stecknadeln oder Breadboard Wires gehen auch.
Die Daten werden nur einmalig nach dem Reset ausgegeben, nur die veränderlichen Werte wie Spannung / Strom / Temperatur / Ladung werden alle 3 Sekunden auf Veränderungen gecheckt.
Tested with bq20z70, bq20z451, bq2084, bq80201DBT, bq40z50.
Einen Schaltplan zu den Batterie Modulen gibt es im Datenblatt zum TI bq29311 auf Seite 9.
Sample outputs can be found in folder extras.
START ../src/SBMInfo.cpp
Version 4.4 from Oct 4 2025
Configured to set charge control pin 9 to low above 95 %
Configured to set discharge control pin 10 to low below 5 % or 3300 mV
Found attached I2C device at address 0xB
Battery mode 0x6081 | 0b110000010000001
- Internal Charge Controller Supported
- Battery OK
- Disable AlarmWarning broadcast to Host and Smart Battery Charger
- Disable broadcasts of ChargingVoltage and ChargingCurrent to Smart Battery Charger
Value1=3687, Value2=3667 - Non standard info is supported
Manufacturer Name SANYO | 0x53 41 4E 59 4F
Chemistry LION | 0x4C 49 4F 4E
Manufacturer Data W_'_4_=__5_ | 0x57 7 27 3 34 E 3D E 1F E 35 E
Device Name M10B1 | 0x4D 31 30 42 31
Serial number 11444 | 0x2CB4
Manufacture date (YYYY-MM-DD) 2008-5-25
Design voltage 14.400 V | 4 cells
Design capacity 4400 mAh
Charging current 3080 mA
Charging voltage 16.800 V
SBM protocol (Version / Revision) 1.1 with optional PEC support / 1
Cycle count 331
Max error of charge calculation 100%
Remaining time alarm 10 min
Remaining capacity alarm 510 mAh
*** MANUFACTURER INFO ***
Device Type 1794 | 0x702
*** RATE TEST INFO ***
Setting AT rate to 100 mA
TimeToFull at rate Battery not being (dis)charged - received 0xFFFF
Setting AT rate to -100 mA
TimeToEmpty at rate 21 h 28 min
Can be delivered for 10 seconds at rate 1 | 0x1
*** DYNAMIC INFO ***
Relative charge 51%
Absolute charge 42%
Full charge capacity 4215 mAh = 82%
Remaining capacity 2148 mAh
Voltage 11.467 V
Current 0 mA
Average current of last minute 0 mA
Temperature 21.55 C
Minutes remaining until empty Battery not being (dis)charged - received 0xFFFF
Average minutes remaining until empty Battery not being (dis)charged - received 0xFFFF
Minutes remaining for full charge Battery not being (dis)charged - received 0xFFFF
Battery status 0xC0 | 0b11000000
80 Initialized
40 Discharging
Pack config and status 0x8230 | 0b1000001000110000
- Pack not inserted
- Voltage > EDV2
- Pack sealed
- Discharge is qualified for capacity learning
*** DYNAMIC NON STANDARD INFO / Cell Voltages + SOH ***
Cell 1 Voltage 3.826 V
Cell 2 Voltage 3.823 V
Cell 3 Voltage 3.819 V
Cell 4 Voltage 0x0
State of Health 5911 | 0x1717
*** CHANGED VALUES ***
--- After onnecting the 100 ohm discharge resistor, ESR is computed!
Current -147 mA
Voltage 14.653 V
Average current of last minute -31 mA
Minutes remaining until empty 1 min
Average minutes remaining until empty 1 min
Battery status (BIN) 0x3C0 | 0b1111000000
- REMAINING_CAPACITY_ALARM
- REMAINING_TIME_ALARM_FLAG
80 Initialized
40 Discharging
Cell 1 Voltage 3.666 V
Cell 2 Voltage 3.646 V
Cell 3 Voltage 3.674 V
Cell 4 Voltage 3.666 V
Voltage 14.650 V | ESR = 0.578 ohm
Average current of last minute -78 mA
Cell 2 Voltage 3.645 V
Cell 3 Voltage 3.673 V
Average current of last minute -104 mA
Voltage 14.648 V
Average current of last minute -120 mA
- Fixed ESR (Equivalent Series Resistor) computing bug.
- Fixed I2C global error handling.
- Improved optional info handling.
- Fixed no voltage measurement bug.
- Improved print and LCD display after I2C reconnection.
- Removed compile time warnings.
- Support for automatic discharge and charge.
- Improved output.
- Integrated voltage and resistance measurement.
- Major improvements in I2C communication and output.
- Detection of disconnect.
- Improved LCD output.
- Better prints at scanning.




