I2C-Bus components in softgun

The softgun I2C simulation is done one logical signal level with full timing check against the standard. A violation of the standard will be printed on standard error.

Simulated I2C-Slaves

Simulated I2C-Masters

I2C-Master using GPIO Pins

Because Softgun simulates I2C devices down to the logical Signal level it is possible to connect the I2C Slave to GPIO Lines.

Most Common I2C-Pitfalls

The deadly T-HDDAT

There is one parameter in the I2C Spec which has proven deadly for many mixed voltage I2C systems. This is T-HDDAT parameter. It is zero. In a mixed Voltage System the following can happen: A Microcontroller generates a negative clock edge. An eeprom detects this negative clock edge an immediately releases the SDA line (T-HDDAT is null). An other component on the same bus with a lower Voltage sees the rising edge of SDA before it sees the falling edge of the clock because it has lower thresholds. It now detects a stop condition which was not really there.

I2C-Bus Isolation Amplifiers

Isolation amplifiers are the most dangerous components for I2C-Busses, because the I2C-Bus is always bidirectional. Isolation amplifiers detect the direction by leaving a small remaining voltage on the non-driving side. This is typically 0.5 - 0.8 Volt. As a consequence of this its is in most cases not possible to switch two of them in series. Also they are very susceptible to the T-HDDAT problem (see above) because they have a very low switching Threshold (below 0.5 Volt). This is totally out of I2C-Spec. If you really need an electrical isolation for your I2C Master or slave i recommend using a Microcontroller with a four wire I2C-Bus like the Atmel XMega. It eliminates the need for direction recognition. The drivers for the I2C-Bus can be on the isolated side.

Mixed Voltage I2C Bus

If you want to use two voltages in your system (for example 3.3V / 5Volt) you often need no additional hardware for level shifting. Just use a pullup to 3.3 Volt. The most 5 Volt components will work with 3.3 Volt without a problem. But if you want to do it correct then do level shifting with two Field effect transistors as shown in the Philips I2C-Spec. If you want to have many separated segments in your I2C-Bus use the PCA9548. I recommend this version because it has a reset line. With this you can regain control over your I2C-Bus if one component is blocking the bus.