This appnote describes how to calculate the pull-up resistors for a particular I2C bus: http://www.ti.com/lit/an/slva689/slva689.pdf
The minimum resistance is pretty easy to determine, and is based on the bus voltage (Vbus), the maximum voltage that can be read as a logic-low (VOL), and the maximum current that the pins can sink when at or below VOL (IOL).
The formula is:
Rp(min) = (Vbus – VOL) / IOL
Formula 1. Minimum Pull-up Resistance
As an example, we will use an EFM8LB1 MCU, operating at VIO = 3.3V with an I2C speed of 400 kHz (fast mode), for the I2C bus characteristics. The EFM8LB1 datasheet is here: https://www.silabs.com/documents/public/data-sheets/efm8lb1-datasheet.pdf
For the LB1, VIL is 0.3 * VIO, which would be 0.99 V. This is the maximum voltage that will be registered by the LB1 as a logic low. In high-drive mode, the pins can also sink up to 13.5 mA while retaining a voltage of at most 0.6V, which is below the VIL threshold, so we can use that as the input for IOL.
This is the minimum pull-up resistance for an I2C bus composed of EFM8LB1 devices. Lower than this, and we cannot guarantee that the device can pull the I2C bus lines below VOL.
The maximum pull-up resistance is based on the needed rise-time of the clock (dependent on the I2C clock frequency), and the total capacitance on the bus.
The I2C specification (http://cache.nxp.com/documents/user_manual/UM10204.pdf) lists the maximum total bus capacitance with a pull-up resistor to be 200 pF (it can be up to 400 pF if the pull-up is a current source, section 5.1).
This specification also describes the rise-time of SDA/SCL to be a maximum of 300 ns in “Fast-mode” – 400 kHz (table 10).
Back to the appnote: the formula for calculating the maximum pull-up resistance is:
Rp(min) = rt / ( 0.8473 * Cb )
Formula 2. Maximum Pull-up Resistance
Where rt is the maximum allowed rise-time of the bus, and Cb is the total bus capacitance.
The appnote actually already calculated this for the worst-case Fast Mode ( 300 ns / 0.8473 * 200 pF), to be 1.77 k Ohms. These pull-ups would draw 3.3V / 1.77 k = 1.86 mA each when SCL / SDA is low.
So, theoretically, if this bus has the absolute maximum amount of capacitance on it, this bus should use at least 1.77 k Ohm pull-up resistors, down to 171 Ohm resistors if their maximum low drive strength is 13.5 mA each during SCL/SDA low.
Ideally, the bus capacitance should be lower than the I2C maximum specification, so the formula may give you a higher resistance than this theoretical worst case.