I²C (Inter-IC-Communication)

The I²C bus is a bidirectional, serial two-wire bus, which allows many different peripheral components to connect to a single microprocessor. I²C is the abbreviation of Inter IC Communication and is invented and patented by Philips in the early 1980s. Nowadays, there are more than 50 licensees and over 1000 I²C compatible components at the market. This tutorial will show, how to program the communication via the I²C bus. For example application, a usual I²C compatible temperature sensor of type LM75 will be used to acquire temperature values.

Requirements: To complete this tutorial requires the JControl/IDE, a JControl-based device with I²C interface, and a temperature sensor with I²C bus interface of type LM75 (manufacturer: National Semiconductor).

Figure 1: JControl in an I²C application

The I²C bus has become a standard for simple communication between integrated circuits. It is supported by most JControl compatible products by means of a respective interface (ports I2C_SDA and I2C_SCL). This way, external circuits are easily connected to a JControl device directly via I²C. Figure 1 shows a general schematic of how components are connected by an I²C bus.

I²C is a bus system. This means, that several components are connected to the same wires and are distinguished from one another only by different addresses. JControl devices hereby act as a "control center" (bus master) while the other devices are common components (so called bus slaves). On many peripheral components, the individual address of a bus slave (slave address) has been predefined by factory settings. But it may in most cases be varied by means of special address pins, which are respectively conntected and therefore allow multiple I²C components of the same kind to be connected to one bus master.

If you want to know more about the functionality and the extensive range of possible applications of the I²C bus, please refer to the respective sites of Philips Semiconductors.

There is a descendant of the I²C bus called SMBus. This has been specified in 1995 by some organisations surrounding the manufacturer semiconductors Intel. The main application area for SMBus capable components is to be found within pc hardware (motherboards, notebooks, graphics cards, etc.); where the SMBus isn't just used to obtain temperature values, but also fan revolutions and operating voltages. In future PCI specifications, the SMBus will even be included as a "sub bus". The differences between I²C and SMBus mainly apply to the wires' voltages as well as some timing parameters. JControl devices are designed to connect to both I²C and SMBus components. Further information on the SMBus are to be found at the homepage of the SMBus consortium.