Is there a standard I2C/SM bus protocol for laptop battery packs

Since you already know about the SMBus, why not look into the Smart Battery Data Specification or the Smart Battery Charger Specification, as this is what you'll have to simulate. Yet, this won't describe if the System Management chip has some additional features which are undocumented ;-)


There is no real standard. [Edit: I'm wrong on that - see other answer]

However, most battery are manufactured in more or less the same way: They have some I2C EEPROM chip (often an industry-standard one) that contains all the static information about the battery (model, serial number, manufacturing date, capacity, etc...), and another chip named "battery gas gauge" or "battery fuel gauge" that monitors the actual charge level and all dynamic stuff.

TI has a whole range of battery gauge chips available: http://www.ti.com/lsds/ti/power-management/battery-fuel-gauge-overview.page. Chances are the battery of your laptop contains such a chip.

So, basically, only the laptop manufacturer knows exactly how to communicate with the battery, but everything is usually based on widely available, documented, chips (well, there might also be some additional MCU with proprietary firmware that take care of extra stuff, eventually). So if you must reverse-engineer a battery, you may have some chance to actually be successful. Here is a document that provides interesting information: Battery Firmware Hacking

Now, regarding the software part: indeed, the company that makes the BIOS, based on the information provided by the laptop/battery manufacturer, includes all relevant I2C messaging in the BIOS itself and the OS asks the BIOS when it needs to know.