meta data for this page
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
com:basic_i2c [2024/05/02 18:53] – [I²C Arduino] vamsan | com:basic_i2c [2025/05/31 22:45] (current) – vamsan | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== lamaPLC Communication: | ====== lamaPLC Communication: | ||
{{ : | {{ : | ||
- | **I²C** (// | + | **I²C** (// |
- | \\ | + | |
+ | I²C is a common digital communication standard | ||
+ | |||
+ | This application note discusses the protocol and the physical layer for I²C communications. Because I²C is often used with data converter devices, examples of communications were provided for a DAC and an ADC to write and read from registers. | ||
+ | |||
+ | Several competitors, | ||
+ | |||
+ | **Protocols Similar to I²C** | ||
+ | |||
+ | The I²C specification discusses several other communications protocols based on I²C. These other protocols can be similar and compatible with I²C communication and can be used for specific applications. Some protocols also have defined commands and application-specific extensions for their systems. This section briefly describes the applications for these other protocols, but their systems, applications, | ||
+ | elsewhere. | ||
+ | |||
+ | The first of these similar protocols is the Two-Wire Interface, or TWI, which is the same as I²C. | ||
+ | |||
+ | However, there are some minor differences. TWI does not support a START byte and does not support high-speed | ||
+ | |||
+ | The System Management Bus, or SMBus®, is a protocol similar to I²C that is tailored to a specific function. It is commonly used in servers and computer motherboards for power source management. The protocol is very similar to I²C in the communication protocol and can be understood by an I²C controller. | ||
+ | |||
+ | The SMBus protocol has some additional features in comparison to I²C. The SMBus can dynamically set addresses, allowing for quick communications at the start-up of a system. Also, the bus has a 35-ms timeout, which prevents one device from indefinitely tying up the bus. The protocol also has a packet error checking for error detection in data communication. | ||
+ | as an interrupt to tell the controller about certain events detected by the target device. | ||
+ | |||
+ | The Power Management bus, or PMBus®, is a variant of SMBus defined by Intel. It is used in the digital management of power supplies. This protocol also defines specific commands to retrieve data about the system' | ||
+ | |||
+ | Intelligent Platform Management Interface IPMI is another I²C-based protocol. This protocol is used by baseboard management controllers (BMCs) for autonomous computer subsystems to monitor and manage the system CPU, firmware, and operating system. The protocol uses a standardized message-based interface for a computer motherboard or server. The BMC is always running even when the central system is off, allowing for operation, measurement, | ||
+ | |||
+ | There are several other similar protocols discussed in the I²C specifications. Advanced Telecommunications Computing Architecture (ATCA) is a follow-on to Compact PCI used in rack-mounted telecom hardware. | ||
+ | |||
+ | Display Data Channel (DDC) is a monitor or display information protocol that hosts use to control display functions. Finally, C-Bus is another protocol derived from I²C. As mentioned in the reserved address section, this protocol is used in some parts of the world for home and building automation. | ||
I²C is similar in concept to [[com: | I²C is similar in concept to [[com: | ||
- | \\ | ||
- | Several competitors, | ||
- | \\ | ||
- | System Management Bus (**SMBus**), | ||
- | \\ | ||
===== I²C specifications ===== | ===== I²C specifications ===== | ||
* In the most common case, the I²C bus contains only one master, but the possibility of a multimaster is also not excluded | * In the most common case, the I²C bus contains only one master, but the possibility of a multimaster is also not excluded | ||
- | * I²C uses an open-ended pair of wires for data transfer, the serial data line (SDA) and the serial clock signal (SCL). The two wires must be pulled to the operating voltage with resistors, the wires typically operate with a voltage of 5V or 3.3V, but a different voltage specification is also not excluded. | + | * I²C uses an open-ended pair of wires for data transfer: the serial data line (SDA) and the serial clock signal (SCL). The two wires must be pulled to the operating voltage with resistors. The wires typically operate with a voltage of 5V or 3.3V, but a different voltage specification is also not excluded. |
{{ : | {{ : | ||
Line 27: | Line 50: | ||
|high-speed mode (HS) |1.7 .. 3.4 Mbit / sec| | |high-speed mode (HS) |1.7 .. 3.4 Mbit / sec| | ||
|Ultra-fast mode (UFm) |5 Mbit / sec| | |Ultra-fast mode (UFm) |5 Mbit / sec| | ||
+ | |||
+ | ===== Open-Drain Connection ===== | ||
+ | The open-drain connections are used on both SDA and SCL lines and connect to an NMOS transistor. This open-drain connection controls the I2C communication line and pulls the line low or releases the line high. The open-drain refers to the NMOS bus connection when the NMOS is turned OFF. The next pic shows the open-drain connection as the NMOS is turned on: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | The NMOS is set on or off to set the voltage level of the SDA or SCL line. When the NMOS is on, the device pulls current through the resistor to ground, pulling the open-drain line low. Typically, the transition from high to low for I²C is as fast as the NMOS pulls down on SDA or SCL. The NMOS drive strength and any bus capacitance on SDA or SCL determine the transition speed. | ||
+ | |||
+ | When the NMOS turns off, the device stops pulling current, and the pull-up resistor pulls the SDA or SCL line to VDD. The next picture shows an open-drain line as the NMOS is turned off. The pull-up resistor pulls the line high. The transition of the open-drain line is slower because the line is pulled up against the bus capacitance and is not actively driven. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | ===== I²C addresses ===== | ||
+ | Different manufacturers' | ||
+ | |||
===== I²C Arduino ===== | ===== I²C Arduino ===== | ||
- | The I²C protocol | + | The I²C protocol |
- | In I²C, there is one controller device, with one or more peripheral devices connected to the controllers | + | In I²C, one controller device |
- | As the clock line changes from low to high (known as the rising edge of the clock pulse), a single bit of information is transferred from the board to the I²C device over the SDA line. As the clock line keeps pulsing, more and more bits are sent until a sequence of a 7 or 8 bit address, and a command or data is formed. When this information is sent - bit after bit -, the called upon device executes the request and transmits | + | As the clock line changes from low to high (known as the rising edge of the clock pulse), a single bit of information is transferred from the board to the I²C device over the SDA line. As the clock line keeps pulsing, more and more bits are sent until a sequence of a 7 or 8-bit address, and a command or data is formed. When this information is sent - bit after bit -, the called upon device executes the request and transmits |
{{ : | {{ : | ||
Line 43: | Line 82: | ||
* The controller sends out instructions through the I2C bus on the data pin (SDA), and the instructions are prefaced with the address, so that only the correct device listens. | * The controller sends out instructions through the I2C bus on the data pin (SDA), and the instructions are prefaced with the address, so that only the correct device listens. | ||
* Then there is a bit signifying whether the controller wants to read or write. | * Then there is a bit signifying whether the controller wants to read or write. | ||
- | * Every message needs to be acknowledged, to combat unexpected results, once the receiver has acknowledged the previous information it lets the controller know, so it can move on to the next set of bits. | + | * Every message needs to be acknowledged to combat unexpected results. Once the receiver has acknowledged the previous information, it lets the controller know so it can move on to the next set of bits. |
* 8 bits of data | * 8 bits of data | ||
* Another acknowledgement bit | * Another acknowledgement bit | ||
Line 50: | Line 89: | ||
More from [[https:// | More from [[https:// | ||
+ | |||
+ | ==== Arduino applications with I²C communication ==== | ||
+ | * [[arduino: | ||
+ | * [[sensor: | ||
+ | |||
+ | |||
+ | ===== I²C Arduino with 3.3V ===== | ||
+ | |||
+ | The I²C communication basically works with 5V, but in certain cases, for example, if there is a 3.3V base voltage unit (ESP32) in the network, then 3.3V is also sufficient for the 5V units. The voltage level can be stabilized with 4.7 kOhm pull-up resistors (SDO, SCL): | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | According to the analysis of Texas Instruments, | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | They recommend using the [[: | ||
+ | |||
===== Sources ===== | ===== Sources ===== | ||
[[https:// | [[https:// | ||
+ | [[https:// | ||
+ | [[https:// | ||
\\ | \\ | ||
===== I²C topics on lamaPLC ===== | ===== I²C topics on lamaPLC ===== | ||
{{topic> | {{topic> | ||
\\ | \\ | ||
- | {{tag> | + | {{tag> |
\\ | \\ | ||
This page has been accessed for: Today: {{counter|today}}, | This page has been accessed for: Today: {{counter|today}}, |