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
- Analog devices ADS7828 A/D converter
- Analog devices ADS1505 A/D converter
- Dallas DS1337 Real time clock
- Dallas DS1388 Real time clock
- Philips ISP1301 USB-OTG transceiver
- National semiconductor LM75 temperature sensor
- M24Cxx and compatible I2C-EEproms
- MAX-6651 FAN controller
- Melexis MLX90614 Infrared Temperature sensor
- PCA9544/PCA9548 I2C Multiplexer
- PCF8563 Realtime clock
- PCF8574/8575 8/16 Bit IO-Expander
- PCF8591 A/D Converter
Simulated I2C-Masters
- NS9750 I2C-Controller
- Atmel RM9200 I2C Controller
- ATMega644 I2C-Controller (Master + Slave mode)
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.