| 
									
										
										
										
											2020-01-29 16:19:51 +01:00
										 |  |  | ==================
 | 
					
						
							|  |  |  | The SMBus Protocol
 | 
					
						
							|  |  |  | ==================
 | 
					
						
							| 
									
										
										
										
											2008-05-11 20:37:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | The following is a summary of the SMBus protocol. It applies to
 | 
					
						
							|  |  |  | all revisions of the protocol (1.0, 1.1, and 2.0).
 | 
					
						
							|  |  |  | Certain protocol features which are not supported by
 | 
					
						
							|  |  |  | this package are briefly described at the end of this document.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Some adapters understand only the SMBus (System Management Bus) protocol,
 | 
					
						
							|  |  |  | which is a subset from the I2C protocol. Fortunately, many devices use
 | 
					
						
							|  |  |  | only the same subset, which makes it possible to put them on an SMBus.
 | 
					
						
							| 
									
										
										
										
											2008-05-11 20:37:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | If you write a driver for some I2C device, please try to use the SMBus
 | 
					
						
							|  |  |  | commands if at all possible (if the device uses only that subset of the
 | 
					
						
							|  |  |  | I2C protocol). This makes it possible to use the device driver on both
 | 
					
						
							|  |  |  | SMBus adapters and I2C adapters (the SMBus command set is automatically
 | 
					
						
							|  |  |  | translated to I2C on I2C adapters, but plain I2C commands can not be
 | 
					
						
							|  |  |  | handled at all on most pure SMBus adapters).
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-11 20:37:05 +02:00
										 |  |  | Below is a list of SMBus protocol operations, and the functions executing
 | 
					
						
							|  |  |  | them.  Note that the names used in the SMBus protocol specifications usually
 | 
					
						
							|  |  |  | don't match these function names.  For some of the operations which pass a
 | 
					
						
							|  |  |  | single data byte, the functions using SMBus protocol operation names execute
 | 
					
						
							|  |  |  | a different protocol operation entirely.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-16 21:11:55 +01:00
										 |  |  | Each transaction type corresponds to a functionality flag. Before calling a
 | 
					
						
							|  |  |  | transaction function, a device driver should always check (just once) for
 | 
					
						
							|  |  |  | the corresponding functionality flag to ensure that the underlying I2C
 | 
					
						
							| 
									
										
										
										
											2021-06-16 08:27:33 +02:00
										 |  |  | adapter supports the transaction in question. See
 | 
					
						
							|  |  |  | Documentation/i2c/functionality.rst for the details.
 | 
					
						
							| 
									
										
										
										
											2012-12-16 21:11:55 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | Key to symbols
 | 
					
						
							|  |  |  | ==============
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  | =============== =============================================================
 | 
					
						
							| 
									
										
										
										
											2020-01-29 16:19:38 +01:00
										 |  |  | S               Start condition
 | 
					
						
							| 
									
										
										
										
											2021-11-15 12:08:18 +01:00
										 |  |  | Sr              Repeated start condition, used to switch from write to
 | 
					
						
							|  |  |  |                 read mode.
 | 
					
						
							| 
									
										
										
										
											2020-01-29 16:19:38 +01:00
										 |  |  | P               Stop condition
 | 
					
						
							|  |  |  | Rd/Wr (1 bit)   Read/Write bit. Rd equals 1, Wr equals 0.
 | 
					
						
							| 
									
										
										
										
											2020-01-29 16:19:39 +01:00
										 |  |  | A, NA (1 bit)   Acknowledge (ACK) and Not Acknowledge (NACK) bit
 | 
					
						
							| 
									
										
										
										
											2022-08-08 16:17:01 +02:00
										 |  |  | Addr  (7 bits)  I2C 7 bit address. Note that this can be expanded to
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |                 get a 10 bit I2C address.
 | 
					
						
							| 
									
										
										
										
											2020-01-29 16:19:38 +01:00
										 |  |  | Comm  (8 bits)  Command byte, a data byte which often selects a register on
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |                 the device.
 | 
					
						
							| 
									
										
										
										
											2022-08-08 16:17:03 +02:00
										 |  |  | Data  (8 bits)  A plain data byte. DataLow and DataHigh represent the low and
 | 
					
						
							|  |  |  |                 high byte of a 16 bit word.
 | 
					
						
							| 
									
										
										
										
											2020-01-29 16:19:38 +01:00
										 |  |  | Count (8 bits)  A data byte containing the length of a block operation.
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-29 16:19:38 +01:00
										 |  |  | [..]            Data sent by I2C device, as opposed to data sent by the host
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  |                 adapter.
 | 
					
						
							|  |  |  | =============== =============================================================
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-07-14 22:38:23 +02:00
										 |  |  | SMBus Quick Command
 | 
					
						
							|  |  |  | ===================
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  | This sends a single bit to the device, at the place of the Rd/Wr bit::
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-14 20:23:55 +02:00
										 |  |  |   S Addr Rd/Wr [A] P
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-16 21:11:55 +01:00
										 |  |  | Functionality flag: I2C_FUNC_SMBUS_QUICK
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-29 16:19:40 +01:00
										 |  |  | SMBus Receive Byte
 | 
					
						
							|  |  |  | ==================
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Implemented by i2c_smbus_read_byte()
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | This reads a single byte from a device, without specifying a device
 | 
					
						
							|  |  |  | register. Some devices are so simple that this interface is enough; for
 | 
					
						
							|  |  |  | others, it is a shorthand if you want to read the same register as in
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  | the previous SMBus command::
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  |   S Addr Rd [A] [Data] NA P
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-16 21:11:55 +01:00
										 |  |  | Functionality flag: I2C_FUNC_SMBUS_READ_BYTE
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-29 16:19:40 +01:00
										 |  |  | SMBus Send Byte
 | 
					
						
							|  |  |  | ===============
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Implemented by i2c_smbus_write_byte()
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-11 20:37:05 +02:00
										 |  |  | This operation is the reverse of Receive Byte: it sends a single byte
 | 
					
						
							|  |  |  | to a device.  See Receive Byte for more information.
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  | ::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   S Addr Wr [A] Data [A] P
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-16 21:11:55 +01:00
										 |  |  | Functionality flag: I2C_FUNC_SMBUS_WRITE_BYTE
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-29 16:19:40 +01:00
										 |  |  | SMBus Read Byte
 | 
					
						
							|  |  |  | ===============
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Implemented by i2c_smbus_read_byte_data()
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | This reads a single byte from a device, from a designated register.
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  | The register is specified through the Comm byte::
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-15 12:08:18 +01:00
										 |  |  |   S Addr Wr [A] Comm [A] Sr Addr Rd [A] [Data] NA P
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-16 21:11:55 +01:00
										 |  |  | Functionality flag: I2C_FUNC_SMBUS_READ_BYTE_DATA
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-29 16:19:40 +01:00
										 |  |  | SMBus Read Word
 | 
					
						
							|  |  |  | ===============
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Implemented by i2c_smbus_read_word_data()
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-11 20:37:05 +02:00
										 |  |  | This operation is very like Read Byte; again, data is read from a
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | device, from a designated register that is specified through the Comm
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  | byte. But this time, the data is a complete word (16 bits)::
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-15 12:08:18 +01:00
										 |  |  |   S Addr Wr [A] Comm [A] Sr Addr Rd [A] [DataLow] A [DataHigh] NA P
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-16 21:11:55 +01:00
										 |  |  | Functionality flag: I2C_FUNC_SMBUS_READ_WORD_DATA
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-29 16:19:41 +01:00
										 |  |  | Note the convenience function i2c_smbus_read_word_swapped() is
 | 
					
						
							| 
									
										
										
										
											2011-10-30 13:47:25 +01:00
										 |  |  | available for reads where the two data bytes are the other way
 | 
					
						
							|  |  |  | around (not SMBus compliant, but very popular.)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-29 16:19:40 +01:00
										 |  |  | SMBus Write Byte
 | 
					
						
							|  |  |  | ================
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Implemented by i2c_smbus_write_byte_data()
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | This writes a single byte to a device, to a designated register. The
 | 
					
						
							|  |  |  | register is specified through the Comm byte. This is the opposite of
 | 
					
						
							| 
									
										
										
										
											2008-05-11 20:37:05 +02:00
										 |  |  | the Read Byte operation.
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  | ::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   S Addr Wr [A] Comm [A] Data [A] P
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-16 21:11:55 +01:00
										 |  |  | Functionality flag: I2C_FUNC_SMBUS_WRITE_BYTE_DATA
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-29 16:19:40 +01:00
										 |  |  | SMBus Write Word
 | 
					
						
							|  |  |  | ================
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Implemented by i2c_smbus_write_word_data()
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-11 20:37:05 +02:00
										 |  |  | This is the opposite of the Read Word operation. 16 bits
 | 
					
						
							| 
									
										
										
										
											2020-01-29 16:19:42 +01:00
										 |  |  | of data are written to a device, to the designated register that is
 | 
					
						
							| 
									
										
										
										
											2020-01-29 16:19:43 +01:00
										 |  |  | specified through the Comm byte::
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  |   S Addr Wr [A] Comm [A] DataLow [A] DataHigh [A] P
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-16 21:11:55 +01:00
										 |  |  | Functionality flag: I2C_FUNC_SMBUS_WRITE_WORD_DATA
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-29 16:19:41 +01:00
										 |  |  | Note the convenience function i2c_smbus_write_word_swapped() is
 | 
					
						
							| 
									
										
										
										
											2011-10-30 13:47:25 +01:00
										 |  |  | available for writes where the two data bytes are the other way
 | 
					
						
							|  |  |  | around (not SMBus compliant, but very popular.)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-29 16:19:40 +01:00
										 |  |  | SMBus Process Call
 | 
					
						
							|  |  |  | ==================
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | This command selects a device register (through the Comm byte), sends
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  | 16 bits of data to it, and reads 16 bits of data in return::
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  |   S Addr Wr [A] Comm [A] DataLow [A] DataHigh [A]
 | 
					
						
							| 
									
										
										
										
											2021-11-15 12:08:18 +01:00
										 |  |  |                               Sr Addr Rd [A] [DataLow] A [DataHigh] NA P
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-16 21:11:55 +01:00
										 |  |  | Functionality flag: I2C_FUNC_SMBUS_PROC_CALL
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-29 16:19:40 +01:00
										 |  |  | SMBus Block Read
 | 
					
						
							|  |  |  | ================
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Implemented by i2c_smbus_read_block_data()
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  | This command reads a block of up to 32 bytes from a device, from a
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | designated register that is specified through the Comm byte. The amount
 | 
					
						
							|  |  |  | of data is specified by the device in the Count byte.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  | ::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   S Addr Wr [A] Comm [A]
 | 
					
						
							| 
									
										
										
										
											2021-11-15 12:08:18 +01:00
										 |  |  |             Sr Addr Rd [A] [Count] A [Data] A [Data] A ... A [Data] NA P
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-16 21:11:55 +01:00
										 |  |  | Functionality flag: I2C_FUNC_SMBUS_READ_BLOCK_DATA
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-29 16:19:40 +01:00
										 |  |  | SMBus Block Write
 | 
					
						
							|  |  |  | =================
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Implemented by i2c_smbus_write_block_data()
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  | The opposite of the Block Read command, this writes up to 32 bytes to
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | a device, to a designated register that is specified through the
 | 
					
						
							|  |  |  | Comm byte. The amount of data is specified in the Count byte.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  | ::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   S Addr Wr [A] Comm [A] Count [A] Data [A] Data [A] ... [A] Data [A] P
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-16 21:11:55 +01:00
										 |  |  | Functionality flag: I2C_FUNC_SMBUS_WRITE_BLOCK_DATA
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-11 20:37:05 +02:00
										 |  |  | SMBus Block Write - Block Read Process Call
 | 
					
						
							|  |  |  | ===========================================
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-11 20:37:05 +02:00
										 |  |  | SMBus Block Write - Block Read Process Call was introduced in
 | 
					
						
							|  |  |  | Revision 2.0 of the specification.
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | This command selects a device register (through the Comm byte), sends
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  | 1 to 31 bytes of data to it, and reads 1 to 31 bytes of data in return::
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  |   S Addr Wr [A] Comm [A] Count [A] Data [A] ...
 | 
					
						
							| 
									
										
										
										
											2021-11-15 12:08:18 +01:00
										 |  |  |                               Sr Addr Rd [A] [Count] A [Data] ... A P
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-16 21:11:55 +01:00
										 |  |  | Functionality flag: I2C_FUNC_SMBUS_BLOCK_PROC_CALL
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | SMBus Host Notify
 | 
					
						
							|  |  |  | =================
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This command is sent from a SMBus device acting as a master to the
 | 
					
						
							|  |  |  | SMBus host acting as a slave.
 | 
					
						
							|  |  |  | It is the same form as Write Word, with the command code replaced by the
 | 
					
						
							|  |  |  | alerting device's address.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  | ::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   [S] [HostAddr] [Wr] A [DevAddr] A [DataLow] A [DataHigh] A [P]
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-09 16:53:48 +02:00
										 |  |  | This is implemented in the following way in the Linux kernel:
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 14:10:40 +02:00
										 |  |  | * I2C bus drivers which support SMBus Host Notify should report
 | 
					
						
							|  |  |  |   I2C_FUNC_SMBUS_HOST_NOTIFY.
 | 
					
						
							|  |  |  | * I2C bus drivers trigger SMBus Host Notify by a call to
 | 
					
						
							|  |  |  |   i2c_handle_smbus_host_notify().
 | 
					
						
							|  |  |  | * I2C drivers for devices which can trigger SMBus Host Notify will have
 | 
					
						
							| 
									
										
										
										
											2023-01-28 11:21:09 -08:00
										 |  |  |   client->irq assigned to a Host Notify IRQ if no one else specified another.
 | 
					
						
							| 
									
										
										
										
											2016-10-13 14:10:40 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | There is currently no way to retrieve the data parameter from the client.
 | 
					
						
							| 
									
										
										
										
											2016-06-09 16:53:48 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | Packet Error Checking (PEC)
 | 
					
						
							|  |  |  | ===========================
 | 
					
						
							| 
									
										
										
										
											2008-05-11 20:37:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | Packet Error Checking was introduced in Revision 1.1 of the specification.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-11 20:37:05 +02:00
										 |  |  | PEC adds a CRC-8 error-checking byte to transfers using it, immediately
 | 
					
						
							|  |  |  | before the terminating STOP.
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Address Resolution Protocol (ARP)
 | 
					
						
							|  |  |  | =================================
 | 
					
						
							| 
									
										
										
										
											2008-05-11 20:37:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | The Address Resolution Protocol was introduced in Revision 2.0 of
 | 
					
						
							|  |  |  | the specification. It is a higher-layer protocol which uses the
 | 
					
						
							|  |  |  | messages above.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ARP adds device enumeration and dynamic address assignment to
 | 
					
						
							|  |  |  | the protocol. All ARP communications use slave address 0x61 and
 | 
					
						
							|  |  |  | require PEC checksums.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-02 12:23:42 +01:00
										 |  |  | SMBus Alert
 | 
					
						
							|  |  |  | ===========
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SMBus Alert was introduced in Revision 1.0 of the specification.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The SMBus alert protocol allows several SMBus slave devices to share a
 | 
					
						
							|  |  |  | single interrupt pin on the SMBus master, while still allowing the master
 | 
					
						
							|  |  |  | to know which slave triggered the interrupt.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This is implemented the following way in the Linux kernel:
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-02 12:23:42 +01:00
										 |  |  | * I2C bus drivers which support SMBus alert should call
 | 
					
						
							| 
									
										
										
										
											2020-02-28 18:12:20 +01:00
										 |  |  |   i2c_new_smbus_alert_device() to install SMBus alert support.
 | 
					
						
							| 
									
										
										
										
											2010-03-02 12:23:42 +01:00
										 |  |  | * I2C drivers for devices which can trigger SMBus alerts should implement
 | 
					
						
							|  |  |  |   the optional alert() callback.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | I2C Block Transactions
 | 
					
						
							|  |  |  | ======================
 | 
					
						
							| 
									
										
										
										
											2008-05-11 20:37:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-29 16:19:44 +01:00
										 |  |  | The following I2C block transactions are similar to the SMBus Block Read
 | 
					
						
							|  |  |  | and Write operations, except these do not have a Count byte. They are
 | 
					
						
							|  |  |  | supported by the SMBus layer and are described here for completeness, but
 | 
					
						
							|  |  |  | they are *NOT* defined by the SMBus specification.
 | 
					
						
							| 
									
										
										
										
											2008-05-11 20:37:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | I2C block transactions do not limit the number of bytes transferred
 | 
					
						
							|  |  |  | but the SMBus layer places a limit of 32 bytes.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-29 16:19:40 +01:00
										 |  |  | I2C Block Read
 | 
					
						
							|  |  |  | ==============
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Implemented by i2c_smbus_read_i2c_block_data()
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  | This command reads a block of bytes from a device, from a
 | 
					
						
							|  |  |  | designated register that is specified through the Comm byte::
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  |   S Addr Wr [A] Comm [A]
 | 
					
						
							| 
									
										
										
										
											2021-11-15 12:08:18 +01:00
										 |  |  |             Sr Addr Rd [A] [Data] A [Data] A ... A [Data] NA P
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-16 21:11:55 +01:00
										 |  |  | Functionality flag: I2C_FUNC_SMBUS_READ_I2C_BLOCK
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-29 16:19:40 +01:00
										 |  |  | I2C Block Write
 | 
					
						
							|  |  |  | ===============
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Implemented by i2c_smbus_write_i2c_block_data()
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  | The opposite of the Block Read command, this writes bytes to
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | a device, to a designated register that is specified through the
 | 
					
						
							|  |  |  | Comm byte. Note that command lengths of 0, 2, or more bytes are
 | 
					
						
							|  |  |  | supported as they are indistinguishable from data.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-26 09:51:16 -03:00
										 |  |  | ::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   S Addr Wr [A] Comm [A] Data [A] Data [A] ... [A] Data [A] P
 | 
					
						
							| 
									
										
										
										
											2012-12-16 21:11:55 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | Functionality flag: I2C_FUNC_SMBUS_WRITE_I2C_BLOCK
 |