Additional problems may arise if I2C devices which do not fully conform to the I2C specification are used on the bus. They are often hard to find without appropriate equipment like sophisticated I2C monitors or logic analysers, especially if they are not easily reproducible. Potential sources for non-obvious problems are:
- Some I2C masters (especially if implemented in software) have no multi-master support and/or cannot be used with certain devices which stretch SCL during transfers. Note that fully functioning multi-master support in software-implemented I2C masters is not trivial.
- Very simple I2C master implementations may not even recognize error conditions like negative acknowledges from slave devices.
- Some I2C devices do not use the correct voltage thresholds to recognize high and low levels on SDA and SCL, leaving them especially vulnerable to wrong combinations of serial and termination resistors.
- Some I2C devices do not have Schmitt trigger inputs and/or spike filters, which makes them especially susceptible to crosstalk and noise.
- Some I2C devices cancel an I2C transfer after a certain period of inactivity on the I2C bus and consider the bus idle afterwards. The I2C specification does not specify any timeout conditions – an I2C device can occupy the bus for an arbitrary time period.