I3C (bus)
I3C, also known as SenseWire,[1][2] is a specification[3] to enable communication between computer chips by defining the electrical connection between the chips and signaling patterns to be used. Short for "Improved Inter Integrated Circuit",[4] the standard defines the electrical connection between the chips to be a two wire, shared (multidrop), serial data bus, one wire ( The I3C specification takes its name from, uses the same electrical connections as, and allows some backward compatibility with, the I²C bus, a de facto standard for inter-chip communication, widely used for low-speed peripherals and sensors in computer systems. The I3C standard is designed to retain some backward compatibility with the I²C system, notably allowing designs where existing I²C devices can be connected to an I3C bus but still have the bus able to switch to a higher data rate for communication at higher speeds between compliant I3C devices. The I3C standard thereby combines the advantage of the simple, two wire I²C architecture with the higher communication speeds common to higher pin count buses such as the Serial Peripheral Interface (SPI). The I3C standard was developed as a collaborative effort between electronics and computer related companies under auspices of the Mobile Industry Processor Interface Alliance (MIPI Alliance). The I3C standard was first released to the public at the end of 2017,[5][6] although access requires the disclosure of private information. Google and Intel have backed I3C as a sensor interface standard for Internet of things (IoT) devices.[7] HistoryGoals of the MIPI Sensor Working Group effort were first announced in November 2014 at the MEMS Executive Congress in Scottsdale AZ.[8] Electronic design automation tool vendors including Cadence,[9] Synopsys[10] and Silvaco[11] have released controller IP blocks and associated verification software for the implementation of the I3C bus in new integrated circuit designs. In December 2016, Lattice Semiconductor integrated I3C support into its new FPGA known as an iCE40 UltraPlus.[12] In 2017, Qualcomm announced the Snapdragon 845 mobile SOC with integrated I3C controller support.[13][failed verification] In December 2017, the I3C 1.0 specification was released for public review.[7][14] At about the same time, a Linux kernel patch introducing support for I3C was proposed by Boris Brezillon.[15] In 2021, DDR5 has introduced I3C. In June 2022, Renesas Electronics introduced the first I3C Intelligent switch products.[16] SNIA's Enterprise and Data Center Standard Form Factor version 3.1 (January 2023) describes the use of I3C Basic in managing PCI Express devices.[17] NVM Express 2.1 (August 2024) is reworded to allow the use of I3C, "to match the new conventions used by SNIA SFF TA's EDSFF and PCI-SIG specifications for I3C".[18] GoalsPrior to public release of the specification, a substantial amount of general information about it was published in the form of slides from the 2016 MIPI DevCon.[19] The goals for this interface were based on a survey of MIPI member organizations and MEMS Industry Group (MIG) members. The results of this survey have been made public.[20] I3C v1.0The initial I3C design sought to improve over I²C in the following ways:[21]
I3C Basic SpecificationAfter making the I3C 1.0 standard publicly accessible, the organization subsequently published the I3C Basic specification, a subset intended to be implementable by non-member organizations under a RAND-Z licence. I3C Basic allows royalty-free implementation of I3C, and is intended for organizations that may view MIPI membership as a barrier for adoption. The basic version includes many of the protocol innovations in I3C 1.0, but lacks some of the potentially more difficult-to-implement ones such as the optional high data rate (HDR) modes like DDR. None the less the default SDR mode at up to 12.5 Mbit/s is a major speed/capacity improvement over I²C.[23] I3C v1.1Published in December 2019, this specification is only available to MIPI members. I3C v1.1.1Published in June 2021, it has deprecated the terms "master/slave" and now uses the updated normative terms "controller/target." The technical definitions of such devices, and their roles on an I3C bus, remain unchanged. NomenclatureSignal pinsI3C uses same two signal pins as I²C, referred to as SCL (serial clock) and SDA (serial data). The primary difference is that I²C operates them as open-drain outputs at all times, so its speed is limited by the resultant slow signal rise time. I3C uses open-drain mode when necessary for compatibility, but switches to push-pull outputs whenever possible, and includes protocol changes to make it possible more often than in I²C.
Generally, SDA is changed just after the falling edge of SCL, and the resultant value is received on the following rising edge. When the controller hands SDA over to the target, it likewise does so on the falling edge of SCL. However, when an I3C target is handing back control of SDA to the controller (e.g. after acknowledging its address before a write), it releases SDA on the rising edge of SCL, and the controller is responsible for holding the received value (re-driving a copy of the target's bit) for the duration of SCL high. Because the controller drives SCL, it will see the rising edge first, so there will be a brief period of overlap when both are driving SDA, but as they are both driving the same value, no bus contention occurs. FramingAll communications in I²C and I3C requires framing for synchronization. Within a frame, changes on the SDA line should always occur while SCL is in the low state, so that SDA can be considered stable on the low-to-high transition of SCL. Violations of this general rule are used for framing (at least in legacy and standard data rate modes). Between data frames, the bus controller holds SCL high, in effect stopping the clock, and SDA drivers are in a high-impedance state, permitting a pull-up resistor to float it to high. A high-to-low transition of SDA while SCL is high is known as a START symbol, and signals the beginning a new data frame. A low-to-high transition on SDA while SCL is high is the STOP symbol, ending a data frame. A START without a preceding STOP, called a "repeated START", may be used to end one message and begin another within a single bus transaction. In I²C, the START symbol is usually generated by a bus controller, but in I3C, even target devices may pull SDA low to indicate they want to start a frame. This is used to implement some advanced I3C features, such as in-band interrupts, multi-controller support, and hot-joins. After the start, the bus controller restarts the clock by driving SCL, and begins the bus arbitration process. Ninth bitLike I²C, I3C uses 9 clock cycles to send each 8-bit byte. However, the 9th cycle is used differently. I²C uses the last cycle for an acknowledgement sent in the opposite direction to the first 8 bits. I3C operates the same way for the first (address) byte of each message, and for I²C-compatible messages, but when communicating with I3C targets, message bytes after the first use the 9th bit as an odd parity bit on writes, and an end-of-data flag on reads. Writes may be terminated only by the controller. Either the controller or the target may terminate a read. The target sets SDA low to indicate that no more data is available; the controller responds by taking over SDA and generating a STOP or repeated START. To allow a read to continue, the target drives SDA high while SCL is low before the 9th bit, but lets SDA float (open-drain) while SCL is high. The controller may drive SDA low (a repeated START condition) at this time to abort the read. Bus arbitrationAt the start of a frame, several devices may contend for use of the bus, and the bus arbitration process serves to select which device obtains control of the SDA line. In both I²C and I3C, bus arbitration is done with the SDA line in open-drain mode, which allows devices transmitting a binary 0 (low) to override devices transmitting a binary 1. Contending devices monitor the SDA line while driving it in open-drain mode. Whenever a device detects a low condition (0 bit) on SDA while transmitting a high (1 bit), it has lost arbitration and must cease contending until the next transaction begins. Each transaction begins with the target address, and the implementation gives priority to lower-numbered target addresses. The difference is that I²C has no limit on how long arbitration can last (in the rare but legal situation of several devices contending to send a message to the same device, the contention will not be detected until after the address byte). I3C, however, guarantees that arbitration will be complete no later than the end of the first byte. This allows push-pull drivers and faster clock rates to be used the great majority of the time. This is done in several ways:
Common command codesA write addressed to the reserved address First of all, a write consisting of just the address byte and no data bytes has no effect on I3C targets, but may be used to simplify I3C arbitration. As described above, this prefix may speed up arbitration (if the controller supports the optimization of switching to push-pull mid-byte), and it simplifies the controller by avoiding a slightly tricky arbitration case. If the write is followed by a data byte, the byte encodes a "common command code", a standardized I3C operation. Command codes While a direct command is in effect, per-target writes or reads convey command-specific parameters. This operation is in lieu of target's normal response to an I3C message. One direct command may be followed by multiple per-target messages, each preceded by a repeated START. This special mode ends at the end of the transaction (STOP symbol) or the next message addressed to Some command codes exist in both broadcast and direct forms. For example, the commands to enable or disable in-band interrupts may be sent to individual targets or broadcast to all. Commands to get parameters from a target (for example the GETHDRCAP command to ask a device which high-data-rate modes it supports) only exist in direct form. Device classesOn an I3C bus in its default (SDR) mode, four different classes of devices can be supported:
High Data Rate (HDR) optionsEach I3C bus transaction begins in SDR mode, but the I3C controller may issue an "Enter HDR" CCC broadcast command which tells all I3C targets that the transaction will continue in a specified HDR mode. I3C targets which do not support HDR may then ignore bus traffic until they see a specific "HDR exit" sequence which informs them it is time to listen to the bus again. (One of the I2C Common Command Codes lets the controller ask a target which HDR modes it supports. This is an 8-bit mask, allowing additional HDR modes to be added in future.) Some HDR modes are also compatible with I²C devices if the I²C devices have a 50 ns spike filter on the SCL line; that is, they will ignore a high level on the SCL line which lasts less than 50 ns. This is required by the I²C specification, but not universally implemented, and not all implementations ignore frequently repeated spikes,[26] so I3C HDR compatibility must be verified. The compatible HDR modes use SCL high pulses of at most 45 ns so that I²C devices will ignore them. HDR mode is entered before addressing any particular target; the target address and command is itself sent at high data rate. An HDR message is terminated by one of two sequences, which are not used by any HDR mode:
Although an HDR restart need only be recognized by targets which support that HDR mode, so could be redesigned in some future HDR mode, HDR exit must be recognized by all I3C targets, even SDR-only ones, so they can properly ignore HDR messages. HDR modes send data in 16-bit words, always transmitting an even number of bytes. Each word is followed by two parity bits, which are interleaved: the first applies to the odd-numbered bits, and the second applies to the even-numbered bits. Once in HDR mode, a controller sends a series of messages, each beginning with a command and address word, separated by HDR restarts, and ending with an HDR exit. An HDR command and address word consists of 16 bits:
HDR-DDR (double data rate) modeThe HDR-DDR mode uses double data rate signalling on the SDA line with a 12.5 MHz clock to achieve a 25 Mbit/s raw data rate (20 Mbit/s effective). This requires changing the SDA line while SCK is high, a violation of the I²C protocol, but as the high-going pulse is only 40 ns long, I²C devices will ignore it and thus not notice the violation. HDR-DDR accompanies each 16-bit data word with a 2-bit preamble and a 2-bit odd parity postamble, making 20 bits. Each word starts with a rising edge on SCK. The preamble has three possible states:
If a controller sees a preamble of "11" immediately after a command, that indicates that no target is responding and is treated the same as a NACK in SDR mode. To ensure the SDA line will be seen high if no target responds, the extra bit in the command and address word is set so that the final parity bit sent by the controller is 1. For subsequent words during read operations (from target to controller), the target drives the first preamble bit high, but releases the bus (allowing the pull-up resistors to maintain SDA high) for the second bit. The controller may drive SDA low during the second bit time (the falling edge of SCL) to request the read be aborted. If not aborted, a message is terminated with a 13-bit CRC word. This has a preamble of 01, a fixed pattern of 1100 (other patterns are reserved for future use), then a 5-bit cyclic redundancy check on the full message (including the command/address word, but not the preamble or parity bits, or any part of the CRC word), and two "1" bits (the first driven, the second passively held high so the controller can take over). This leaves the bus with both SCK and SDA high, after which the controller must generate an HDR restart or exit. HDR Ternary symbol modesThe HDR-TSP and HDR-TSL modes use one of three symbols as ternary digits (trits):
Two bytes plus two even parity bits (18 bits total) are broken into six 3-bit triplets, and each triplet is encoded as two trits. (The 3 bits are taken msbit-first to produce a value from 0–7, which is then converted to two trits using the numeric values in the list above, and sent most significant trit first.) Sent at 25 Mtrit/s, this achieves a 33.3 Mbit/s effective data rate. The trit pair 22 consisting of two transitions of SDA only is not used to encode data, and is instead used to encode the HDR restart and HDR exit sequences which terminate a message. Although this limits the maximum time between SCL transitions to three trit times, that exceeds the 50 ns limit for legacy I²C devices, so HDR-TSP (ternary symbol, pure) mode may only be used on a bus without legacy I²C devices. To permit buses including I²C devices (with a spike filter), the HDR-TSL (ternary symbol, legacy) mode must be used. This maintains I²C compatibility by trit stuffing: after any rising edge on SCL, if the following trit is not 0, a 1 trit (transition on SCL only) is inserted by the sender, and ignored by the receiver. This ensures that SCL is never high for more than one trit time, but at the cost of transmitting 2.67 trits per 3 bits of payload, a 25 Mbit/s effective data rate (assuming random data). In ternary symbol mode, the controller finishes a read command by leaving the SDA and SCL lines high, after which the target drives both of them at whatever rate it wishes. There is no provision for the controller to interrupt the read operation; if the controller does not trust the target to stop on time, it must choose a different transmission mode. When it is done transmitting, the target hands the bus back to the controller as follows:
Note that ternary data mode does not include a CRC. I²C features not supported in I3C
If clock stretching is needed, a "I3C Hub" can be used to bridge between the I3C network and the I²C target device.[17] The current I3C Hub specification is defined by Intel. The hub attaches onto a I²C/SMBus or I3C bus and presents as two targets. The hub can be connected to up to 8 target devices, either I²C/SMBus or I3C. When needed, the hub translates between the two protocols by buffering data.[27] References
Further reading
External links
|