Using Framework 13 battery without SMB interface

Is it possible to directly extract 17.6V from the Framework 13 batteries without connecting anything to the SMB interface?

I’d love to use the Framework battery for some projects as I have one, yet the PMIC used by framework isn’t readily available, its datasheet is under NDA, and framework doesn’t really provide its schematics. (+ no interface documentation it seems) I got a BQ25703A battery IC without the SMB interface, so I’m wondering if I can just directly pull 17.6V from the BAT+ and GND pins without connecting anything to the SMB interface.

Has anyone tried it out before?

Welcome to the forum.

Framework’s Embedded Controller code is open source and on their github. What you need to talk to the battery’s BMS will be in there. If you’re unwilling or unable to read through it, and I mean not using AI, than quite frankly I’d say don’t mess with the battery. A certain barrier for entry, at a reasonable level, is appropriate for something that carries dangers like this.

I would not advise bypassing the battery’s safety system, it’s BMS. Large li-ion packs are not forgiving of mistakes. The BQ25703A is not at all a substitution. It doesn’t even provide a battery NTC.

I don’t know. But I would hope it will at least cut power if you attempt to recharge while bypassing it / while not communicating, reading cell voltages and temperature from it.

2 Likes

Thanks for the pointers! The EC controller code was what I was missing, I only looked in the hardware repo. :grin:

I guess I’ll look into charging ICs that has the required features… There is only 10pcs of the isl9241 on lcsc so it’ll probably be gone the next time I pass a order there :frowning:

Glad using the EC code doesn’t present a problem for you! If I recall you’ll find the EC code under a number of branches in their github. With names like lilac, marigold, sakura. Here are what they should correspond to.

2 Likes

I have done quite a lot of work on the EC source code.

The interface to the smart battery is a very simple interface. It is I2C.
The EC code talks to it in the FW laptop.
You don’t need to write to any of the I2C registers in the battery. You only need to read them.
An example of some of them is here:
sudo ectool battery

[sudo: authenticate] Password:     
interfaces:0xffffffff
comm_init_dev being used /dev/cros_ec
Battery 0 info:
  Manufacturer:           NVT
  Device name:            FRANDBAT01
  Chemistry   :           LION
  Serial number:          0084
  Design capacity:        5491 mAh
  Last full charge:       5264 mAh
  Design output voltage   15480 mV
  Cycle count             149
  Present voltage         16168 mV
  Present current         0 mA
  Remaining capacity      3662 mAh
  Desired voltage         17600 mV
  Desired current         5491 mA
  Flags                   0x83 AC_PRESENT BATT_PRESENT

There are a few others, one being the battery temperature, but apart from that you don’t need to do much.
The “Desired voltage” and “Desired current” is all you really need to read.
Those are the limits you must not exceed. You read these, and then tell to charging chip, via I2C also, to abide my them.
You also need to read the “temp” and try not to charge/discharge the battery when it gets higher than somewhere between 35 to 55 C
You extend the battery life if you limit it to 35 C, but can still use it above 35 C, you just reduce the lifetime of a battery a little if you do.
If you look at the EC code you will see all this being taken into account.
There are also quite a few edge cases the EC code has to take into account, so the code it quite complex.
E.g. If the battery charge goes below say 3%, it is kill the battery for good. So, the EC will actually force shut down the laptop if it gets that low.
There are also various “limp” modes, where it will charge the battery really, really slowly in an attempt to recover it, if it is discharged too much.

Another thing that saves the battery life, is not charging it to 100%. So also reading the Remaining Capacity vs Design Capacity will give you where the, say, 70% charge point is.

So, the charging chip is not clever. It needs the brains of the EC to properly and safely charge the battery. You can use any MCU/CPU that has I2C interfaces on it to do the job of the EC, so long as it has enough space to store the rather complex EC battery management code.

For example, and Raspberry Nano would probably be good enough to act as the EC.
It has the I2C interface needed.

1 Like

Yes, you can use the battery without the SMB as long as you know the limitation.

The BMS tells the computer it’s battery percentage, temperature, desired current and voltage, cycle count, serial number, etc. The computer only tells the BMS one thing: shutdown using the “battery disconnect” command. The BMS also cuts the battery in case of danger, such as over voltage, under voltage, over current (including short circuit).

The point is, you don’t need to know the battery percentage to charge it. In fact, charging a smart battery is easier than negotiating USB-C PD because you don’t need to “announce” yourself as a charger or a sink.

Based on previous knowledge from users. The battery charging is CC-CV, at first a constant current is applied until the battery reaches a certain voltage, after that a constant voltage is applied until the current gets sufficiently low, then the charger disconnects and the charging is complete. The charging current is often said to be 1C, however the sustained current is actually 0.7C, so you’ll need to time the capacity mAh (not Wh) by 0.7 and charge that mA. It can be easily done using a bench power supply, set the voltage to 17.6V, current to
2480mA, and connect the output to the BAT+ and GND. Discharging is also simple, connect the battery to the device as long as you make sure the current won’t exceed 1C and never discharge the battery below 13V. Also be aware, if your project device has a large input capacitor, it may trigger short circuit cutoff, you may need some pre-charge resistors to mitigate it. The same applies to charging, start as 17.6V, 0.1A and gradually turn the current knob to 2.4A.

In this way, if you don’t need to read the battery information in real time, you can treat the battery as a non-smart one with built-in protection and balancing circuit. As long as you use it within its limits, the battery won’t malfunction.

1 Like