€•OvŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ+/translations/zh_CN/driver-api/i3c/protocol”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ+/translations/zh_TW/driver-api/i3c/protocol”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ+/translations/it_IT/driver-api/i3c/protocol”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ+/translations/ja_JP/driver-api/i3c/protocol”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ+/translations/ko_KR/driver-api/i3c/protocol”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ+/translations/sp_SP/driver-api/i3c/protocol”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…””}”hh£sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1h¡hhhžhhŸŒE/var/lib/git/docbuild/linux/Documentation/driver-api/i3c/protocol.rst”h KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒ I3C protocol”h]”hŒ I3C protocol”…””}”(hh»hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hh¶hžhhŸh³h Kubhµ)”}”(hhh]”(hº)”}”(hŒ Disclaimer”h]”hŒ Disclaimer”…””}”(hhÌhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hhÉhžhhŸh³h KubhŒ paragraph”“”)”}”(hŒãThis chapter will focus on aspects that matter to software developers. For everything hardware related (like how things are transmitted on the bus, how collisions are prevented, ...) please have a look at the I3C specification.”h]”hŒãThis chapter will focus on aspects that matter to software developers. For everything hardware related (like how things are transmitted on the bus, how collisions are prevented, ...) please have a look at the I3C specification.”…””}”(hhÜhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K hhÉhžhubhÛ)”}”(hŒúThis document is just a brief introduction to the I3C protocol and the concepts it brings to the table. If you need more information, please refer to the MIPI I3C specification (can be downloaded here https://resources.mipi.org/mipi-i3c-v1-download).”h]”(hŒÉThis document is just a brief introduction to the I3C protocol and the concepts it brings to the table. If you need more information, please refer to the MIPI I3C specification (can be downloaded here ”…””}”(hhêhžhhŸNh NubhŒ reference”“”)”}”(hŒ/https://resources.mipi.org/mipi-i3c-v1-download”h]”hŒ/https://resources.mipi.org/mipi-i3c-v1-download”…””}”(hhôhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”höuh1hòhhêubhŒ).”…””}”(hhêhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KhhÉhžhubeh}”(h]”Œ disclaimer”ah ]”h"]”Œ disclaimer”ah$]”h&]”uh1h´hh¶hžhhŸh³h Kubhµ)”}”(hhh]”(hº)”}”(hŒ Introduction”h]”hŒ Introduction”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjhžhhŸh³h KubhÛ)”}”(hXThe I3C (pronounced 'eye-three-see') is a MIPI standardized protocol designed to overcome I2C limitations (limited speed, external signals needed for interrupts, no automatic detection of the devices connected to the bus, ...) while remaining power-efficient.”h]”hXThe I3C (pronounced ‘eye-three-see’) is a MIPI standardized protocol designed to overcome I2C limitations (limited speed, external signals needed for interrupts, no automatic detection of the devices connected to the bus, ...) while remaining power-efficient.”…””}”(hj&hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h Khjhžhubeh}”(h]”Œ introduction”ah ]”h"]”Œ introduction”ah$]”h&]”uh1h´hh¶hžhhŸh³h Kubhµ)”}”(hhh]”(hº)”}”(hŒI3C Bus”h]”hŒI3C Bus”…””}”(hj?hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj<hžhhŸh³h KubhÛ)”}”(hŒxAn I3C bus is made of several I3C devices and possibly some I2C devices as well, but let's focus on I3C devices for now.”h]”hŒzAn I3C bus is made of several I3C devices and possibly some I2C devices as well, but let’s focus on I3C devices for now.”…””}”(hjMhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h Khj<hžhubhÛ)”}”(hŒAAn I3C device on the I3C bus can have one of the following roles:”h]”hŒAAn I3C device on the I3C bus can have one of the following roles:”…””}”(hj[hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K!hj<hžhubhŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒ¿Master: the device is driving the bus. It's the one in charge of initiating transactions or deciding who is allowed to talk on the bus (slave generated events are possible in I3C, see below).”h]”hÛ)”}”(hŒ¿Master: the device is driving the bus. It's the one in charge of initiating transactions or deciding who is allowed to talk on the bus (slave generated events are possible in I3C, see below).”h]”hŒÁMaster: the device is driving the bus. It’s the one in charge of initiating transactions or deciding who is allowed to talk on the bus (slave generated events are possible in I3C, see below).”…””}”(hjthžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K#hjpubah}”(h]”h ]”h"]”h$]”h&]”uh1jnhjkhžhhŸh³h Nubjo)”}”(hŒ¾Slave: the device acts as a slave, and is not able to send frames to another slave on the bus. The device can still send events to the master on its own initiative if the master allowed it. ”h]”hÛ)”}”(hŒ½Slave: the device acts as a slave, and is not able to send frames to another slave on the bus. The device can still send events to the master on its own initiative if the master allowed it.”h]”hŒ½Slave: the device acts as a slave, and is not able to send frames to another slave on the bus. The device can still send events to the master on its own initiative if the master allowed it.”…””}”(hjŒhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K&hjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jnhjkhžhhŸh³h Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ*”uh1jihŸh³h K#hj<hžhubhÛ)”}”(hŒÔI3C is a multi-master protocol, so there might be several masters on a bus, though only one device can act as a master at a given time. In order to gain bus ownership, a master has to follow a specific procedure.”h]”hŒÔI3C is a multi-master protocol, so there might be several masters on a bus, though only one device can act as a master at a given time. In order to gain bus ownership, a master has to follow a specific procedure.”…””}”(hj¨hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K*hj<hžhubhÛ)”}”(hXEach device on the I3C bus has to be assigned a dynamic address to be able to communicate. Until this is done, the device should only respond to a limited set of commands. If it has a static address (also called legacy I2C address), the device can reply to I2C transfers.”h]”hXEach device on the I3C bus has to be assigned a dynamic address to be able to communicate. Until this is done, the device should only respond to a limited set of commands. If it has a static address (also called legacy I2C address), the device can reply to I2C transfers.”…””}”(hj¶hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K.hj<hžhubhÛ)”}”(hŒIn addition to these per-device addresses, the protocol defines a broadcast address in order to address all devices on the bus.”h]”hŒIn addition to these per-device addresses, the protocol defines a broadcast address in order to address all devices on the bus.”…””}”(hjÄhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K3hj<hžhubhÛ)”}”(hŒèOnce a dynamic address has been assigned to a device, this address will be used for any direct communication with the device. Note that even after being assigned a dynamic address, the device should still process broadcast messages.”h]”hŒèOnce a dynamic address has been assigned to a device, this address will be used for any direct communication with the device. Note that even after being assigned a dynamic address, the device should still process broadcast messages.”…””}”(hjÒhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K6hj<hžhubeh}”(h]”Œi3c-bus”ah ]”h"]”Œi3c bus”ah$]”h&]”uh1h´hh¶hžhhŸh³h Kubhµ)”}”(hhh]”(hº)”}”(hŒI3C Device discovery”h]”hŒI3C Device discovery”…””}”(hjëhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjèhžhhŸh³h K;ubhÛ)”}”(hŒéThe I3C protocol defines a mechanism to automatically discover devices present on the bus, their capabilities and the functionalities they provide. In this regard I3C is closer to a discoverable bus like USB than it is to I2C or SPI.”h]”hŒéThe I3C protocol defines a mechanism to automatically discover devices present on the bus, their capabilities and the functionalities they provide. In this regard I3C is closer to a discoverable bus like USB than it is to I2C or SPI.”…””}”(hjùhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K=hjèhžhubhÛ)”}”(hŒ’The discovery mechanism is called DAA (Dynamic Address Assignment), because it not only discovers devices but also assigns them a dynamic address.”h]”hŒ’The discovery mechanism is called DAA (Dynamic Address Assignment), because it not only discovers devices but also assigns them a dynamic address.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KAhjèhžhubhÛ)”}”(hŒ7During DAA, each I3C device reports 3 important things:”h]”hŒ7During DAA, each I3C device reports 3 important things:”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KDhjèhžhubjj)”}”(hhh]”(jo)”}”(hŒcBCR: Bus Characteristic Register. This 8-bit register describes the device bus related capabilities”h]”hÛ)”}”(hŒcBCR: Bus Characteristic Register. This 8-bit register describes the device bus related capabilities”h]”hŒcBCR: Bus Characteristic Register. This 8-bit register describes the device bus related capabilities”…””}”(hj*hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KFhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jnhj#hžhhŸh³h Nubjo)”}”(hŒmDCR: Device Characteristic Register. This 8-bit register describes the functionalities provided by the device”h]”hÛ)”}”(hŒmDCR: Device Characteristic Register. This 8-bit register describes the functionalities provided by the device”h]”hŒmDCR: Device Characteristic Register. This 8-bit register describes the functionalities provided by the device”…””}”(hjBhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KHhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jnhj#hžhhŸh³h Nubjo)”}”(hŒ”Provisioned ID: A 48-bit unique identifier. On a given bus there should be no Provisioned ID collision, otherwise the discovery mechanism may fail. ”h]”hÛ)”}”(hŒ“Provisioned ID: A 48-bit unique identifier. On a given bus there should be no Provisioned ID collision, otherwise the discovery mechanism may fail.”h]”hŒ“Provisioned ID: A 48-bit unique identifier. On a given bus there should be no Provisioned ID collision, otherwise the discovery mechanism may fail.”…””}”(hjZhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KJhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jnhj#hžhhŸh³h Nubeh}”(h]”h ]”h"]”h$]”h&]”j¦j§uh1jihŸh³h KFhjèhžhubeh}”(h]”Œi3c-device-discovery”ah ]”h"]”Œi3c device discovery”ah$]”h&]”uh1h´hh¶hžhhŸh³h K;ubhµ)”}”(hhh]”(hº)”}”(hŒI3C slave events”h]”hŒI3C slave events”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj|hžhhŸh³h KNubhÛ)”}”(hŒzThe I3C protocol allows slaves to generate events on their own, and thus allows them to take temporary control of the bus.”h]”hŒzThe I3C protocol allows slaves to generate events on their own, and thus allows them to take temporary control of the bus.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KPhj|hžhubhÛ)”}”(hŒžThis mechanism is called IBI for In Band Interrupts, and as stated in the name, it allows devices to generate interrupts without requiring an external signal.”h]”hŒžThis mechanism is called IBI for In Band Interrupts, and as stated in the name, it allows devices to generate interrupts without requiring an external signal.”…””}”(hj›hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KShj|hžhubhÛ)”}”(hXDuring DAA, each device on the bus has been assigned an address, and this address will serve as a priority identifier to determine who wins if 2 different devices are generating an interrupt at the same moment on the bus (the lower the dynamic address the higher the priority).”h]”hXDuring DAA, each device on the bus has been assigned an address, and this address will serve as a priority identifier to determine who wins if 2 different devices are generating an interrupt at the same moment on the bus (the lower the dynamic address the higher the priority).”…””}”(hj©hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KVhj|hžhubhÛ)”}”(hŒšMasters are allowed to inhibit interrupts if they want to. This inhibition request can be broadcast (applies to all devices) or sent to a specific device.”h]”hŒšMasters are allowed to inhibit interrupts if they want to. This inhibition request can be broadcast (applies to all devices) or sent to a specific device.”…””}”(hj·hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K[hj|hžhubeh}”(h]”Œi3c-slave-events”ah ]”h"]”Œi3c slave events”ah$]”h&]”uh1h´hh¶hžhhŸh³h KNubhµ)”}”(hhh]”(hº)”}”(hŒ I3C Hot-Join”h]”hŒ I3C Hot-Join”…””}”(hjÐhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjÍhžhhŸh³h K`ubhÛ)”}”(hŒ‹The Hot-Join mechanism is similar to USB hotplug. This mechanism allows slaves to join the bus after it has been initialized by the master.”h]”hŒ‹The Hot-Join mechanism is similar to USB hotplug. This mechanism allows slaves to join the bus after it has been initialized by the master.”…””}”(hjÞhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KbhjÍhžhubhÛ)”}”(hŒ$This covers the following use cases:”h]”hŒ$This covers the following use cases:”…””}”(hjìhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KehjÍhžhubjj)”}”(hhh]”(jo)”}”(hŒ0the device is not powered when the bus is probed”h]”hÛ)”}”(hjÿh]”hŒ0the device is not powered when the bus is probed”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h Kghjýubah}”(h]”h ]”h"]”h$]”h&]”uh1jnhjúhžhhŸh³h Nubjo)”}”(hŒ?the device is hotplugged on the bus through an extension board ”h]”hÛ)”}”(hŒ>the device is hotplugged on the bus through an extension board”h]”hŒ>the device is hotplugged on the bus through an extension board”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h Khhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jnhjúhžhhŸh³h Nubeh}”(h]”h ]”h"]”h$]”h&]”j¦j§uh1jihŸh³h KghjÍhžhubhÛ)”}”(hŒ…This mechanism is relying on slave events to inform the master that a new device joined the bus and is waiting for a dynamic address.”h]”hŒ…This mechanism is relying on slave events to inform the master that a new device joined the bus and is waiting for a dynamic address.”…””}”(hj2hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KjhjÍhžhubhÛ)”}”(hŒpThe master is then free to address the request as it wishes: ignore it or assign a dynamic address to the slave.”h]”hŒpThe master is then free to address the request as it wishes: ignore it or assign a dynamic address to the slave.”…””}”(hj@hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KmhjÍhžhubeh}”(h]”Œ i3c-hot-join”ah ]”h"]”Œ i3c hot-join”ah$]”h&]”uh1h´hh¶hžhhŸh³h K`ubhµ)”}”(hhh]”(hº)”}”(hŒI3C transfer types”h]”hŒI3C transfer types”…””}”(hjYhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjVhžhhŸh³h KqubhÛ)”}”(hŒ†If you omit SMBus (which is just a standardization on how to access registers exposed by I2C devices), I2C has only one transfer type.”h]”hŒ†If you omit SMBus (which is just a standardization on how to access registers exposed by I2C devices), I2C has only one transfer type.”…””}”(hjghžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KshjVhžhubhÛ)”}”(hŒ„I3C defines 3 different classes of transfer in addition to I2C transfers which are here for backward compatibility with I2C devices.”h]”hŒ„I3C defines 3 different classes of transfer in addition to I2C transfers which are here for backward compatibility with I2C devices.”…””}”(hjuhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KvhjVhžhubhµ)”}”(hhh]”(hº)”}”(hŒI3C CCC commands”h]”hŒI3C CCC commands”…””}”(hj†hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjƒhžhhŸh³h KzubhÛ)”}”(hŒœCCC (Common Command Code) commands are meant to be used for anything that is related to bus management and all features that are common to a set of devices.”h]”hŒœCCC (Common Command Code) commands are meant to be used for anything that is related to bus management and all features that are common to a set of devices.”…””}”(hj”hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K|hjƒhžhubhÛ)”}”(hŒ¶CCC commands contain an 8-bit CCC ID describing the command that is executed. The MSB of this ID specifies whether this is a broadcast command (bit7 = 0) or a unicast one (bit7 = 1).”h]”hŒ¶CCC commands contain an 8-bit CCC ID describing the command that is executed. The MSB of this ID specifies whether this is a broadcast command (bit7 = 0) or a unicast one (bit7 = 1).”…””}”(hj¢hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KhjƒhžhubhÛ)”}”(hXŒThe command ID can be followed by a payload. Depending on the command, this payload is either sent by the master sending the command (write CCC command), or sent by the slave receiving the command (read CCC command). Of course, read accesses only apply to unicast commands. Note that, when sending a CCC command to a specific device, the device address is passed in the first byte of the payload.”h]”hXŒThe command ID can be followed by a payload. Depending on the command, this payload is either sent by the master sending the command (write CCC command), or sent by the slave receiving the command (read CCC command). Of course, read accesses only apply to unicast commands. Note that, when sending a CCC command to a specific device, the device address is passed in the first byte of the payload.”…””}”(hj°hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KƒhjƒhžhubhÛ)”}”(hŒ`The payload length is not explicitly passed on the bus, and should be extracted from the CCC ID.”h]”hŒ`The payload length is not explicitly passed on the bus, and should be extracted from the CCC ID.”…””}”(hj¾hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KŠhjƒhžhubhÛ)”}”(hŒhNote that vendors can use a dedicated range of CCC IDs for their own commands (0x61-0x7f and 0xe0-0xef).”h]”hŒhNote that vendors can use a dedicated range of CCC IDs for their own commands (0x61-0x7f and 0xe0-0xef).”…””}”(hjÌhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h Khjƒhžhubeh}”(h]”Œi3c-ccc-commands”ah ]”h"]”Œi3c ccc commands”ah$]”h&]”uh1h´hjVhžhhŸh³h Kzubhµ)”}”(hhh]”(hº)”}”(hŒI3C Private SDR transfers”h]”hŒI3C Private SDR transfers”…””}”(hjåhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjâhžhhŸh³h K‘ubhÛ)”}”(hŒ†Private SDR (Single Data Rate) transfers should be used for anything that is device specific and does not require high transfer speed.”h]”hŒ†Private SDR (Single Data Rate) transfers should be used for anything that is device specific and does not require high transfer speed.”…””}”(hjóhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K“hjâhžhubhÛ)”}”(hŒ¨It is the equivalent of I2C transfers but in the I3C world. Each transfer is passed the device address (dynamic address assigned during DAA), a payload and a direction.”h]”hŒ¨It is the equivalent of I2C transfers but in the I3C world. Each transfer is passed the device address (dynamic address assigned during DAA), a payload and a direction.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K–hjâhžhubhÛ)”}”(hŒfThe only difference with I2C is that the transfer is much faster (typical clock frequency is 12.5MHz).”h]”hŒfThe only difference with I2C is that the transfer is much faster (typical clock frequency is 12.5MHz).”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h Kšhjâhžhubeh}”(h]”Œi3c-private-sdr-transfers”ah ]”h"]”Œi3c private sdr transfers”ah$]”h&]”uh1h´hjVhžhhŸh³h K‘ubhµ)”}”(hhh]”(hº)”}”(hŒI3C HDR commands”h]”hŒI3C HDR commands”…””}”(hj(hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj%hžhhŸh³h KžubhÛ)”}”(hŒbHDR commands should be used for anything that is device specific and requires high transfer speed.”h]”hŒbHDR commands should be used for anything that is device specific and requires high transfer speed.”…””}”(hj6hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K hj%hžhubhÛ)”}”(hŒ±The first thing attached to an HDR command is the HDR mode. There are currently 3 different modes defined by the I3C specification (refer to the specification for more details):”h]”hŒ±The first thing attached to an HDR command is the HDR mode. There are currently 3 different modes defined by the I3C specification (refer to the specification for more details):”…””}”(hjDhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K£hj%hžhubjj)”}”(hhh]”(jo)”}”(hŒHDR-DDR: Double Data Rate mode”h]”hÛ)”}”(hjWh]”hŒHDR-DDR: Double Data Rate mode”…””}”(hjYhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K§hjUubah}”(h]”h ]”h"]”h$]”h&]”uh1jnhjRhžhhŸh³h Nubjo)”}”(hŒGHDR-TSP: Ternary Symbol Pure. Only usable on busses with no I2C devices”h]”hÛ)”}”(hjnh]”hŒGHDR-TSP: Ternary Symbol Pure. Only usable on busses with no I2C devices”…””}”(hjphžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K¨hjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jnhjRhžhhŸh³h Nubjo)”}”(hŒBHDR-TSL: Ternary Symbol Legacy. Usable on busses with I2C devices ”h]”hÛ)”}”(hŒAHDR-TSL: Ternary Symbol Legacy. Usable on busses with I2C devices”h]”hŒAHDR-TSL: Ternary Symbol Legacy. Usable on busses with I2C devices”…””}”(hj‡hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K©hjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jnhjRhžhhŸh³h Nubeh}”(h]”h ]”h"]”h$]”h&]”j¦j§uh1jihŸh³h K§hj%hžhubhÛ)”}”(hŒÙWhen sending an HDR command, the whole bus has to enter HDR mode, which is done using a broadcast CCC command. Once the bus has entered a specific HDR mode, the master sends the HDR command. An HDR command is made of:”h]”hŒÙWhen sending an HDR command, the whole bus has to enter HDR mode, which is done using a broadcast CCC command. Once the bus has entered a specific HDR mode, the master sends the HDR command. An HDR command is made of:”…””}”(hj¡hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K«hj%hžhubjj)”}”(hhh]”(jo)”}”(hŒ&one 16-bits command word in big endian”h]”hÛ)”}”(hj´h]”hŒ&one 16-bits command word in big endian”…””}”(hj¶hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K°hj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jnhj¯hžhhŸh³h Nubjo)”}”(hŒ#N 16-bits data words in big endian ”h]”hÛ)”}”(hŒ"N 16-bits data words in big endian”h]”hŒ"N 16-bits data words in big endian”…””}”(hjÍhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K±hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jnhj¯hžhhŸh³h Nubeh}”(h]”h ]”h"]”h$]”h&]”j¦j§uh1jihŸh³h K°hj%hžhubhÛ)”}”(hŒ¢Those words may be wrapped with specific preambles/post-ambles which depend on the chosen HDR mode and are detailed here (see the specification for more details).”h]”hŒ¢Those words may be wrapped with specific preambles/post-ambles which depend on the chosen HDR mode and are detailed here (see the specification for more details).”…””}”(hjçhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K³hj%hžhubhÛ)”}”(hŒ$The 16-bits command word is made of:”h]”hŒ$The 16-bits command word is made of:”…””}”(hjõhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K·hj%hžhubjj)”}”(hhh]”(jo)”}”(hŒ-bit[15]: direction bit, read is 1, write is 0”h]”hÛ)”}”(hjh]”hŒ-bit[15]: direction bit, read is 1, write is 0”…””}”(hj hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K¹hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jnhjhžhhŸh³h Nubjo)”}”(hŒjbit[14:8]: command code. Identifies the command being executed, the amount of data words and their meaning”h]”hÛ)”}”(hŒjbit[14:8]: command code. Identifies the command being executed, the amount of data words and their meaning”h]”hŒjbit[14:8]: command code. Identifies the command being executed, the amount of data words and their meaning”…””}”(hj!hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h Kºhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jnhjhžhhŸh³h Nubjo)”}”(hŒ@bit[7:1]: I3C address of the device this command is addressed to”h]”hÛ)”}”(hj7h]”hŒ@bit[7:1]: I3C address of the device this command is addressed to”…””}”(hj9hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K¼hj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jnhjhžhhŸh³h Nubjo)”}”(hŒbit[0]: reserved/parity-bit ”h]”hÛ)”}”(hŒbit[0]: reserved/parity-bit”h]”hŒbit[0]: reserved/parity-bit”…””}”(hjPhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K½hjLubah}”(h]”h ]”h"]”h$]”h&]”uh1jnhjhžhhŸh³h Nubeh}”(h]”h ]”h"]”h$]”h&]”j¦j§uh1jihŸh³h K¹hj%hžhubeh}”(h]”Œi3c-hdr-commands”ah ]”h"]”Œi3c hdr commands”ah$]”h&]”uh1h´hjVhžhhŸh³h Kžubeh}”(h]”Œi3c-transfer-types”ah ]”h"]”Œi3c transfer types”ah$]”h&]”uh1h´hh¶hžhhŸh³h Kqubhµ)”}”(hhh]”(hº)”}”(hŒ'Backward compatibility with I2C devices”h]”hŒ'Backward compatibility with I2C devices”…””}”(hj}hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjzhžhhŸh³h KÀubhÛ)”}”(hXThe I3C protocol has been designed to be backward compatible with I2C devices. This backward compatibility allows one to connect a mix of I2C and I3C devices on the same bus, though, in order to be really efficient, I2C devices should be equipped with 50 ns spike filters.”h]”hXThe I3C protocol has been designed to be backward compatible with I2C devices. This backward compatibility allows one to connect a mix of I2C and I3C devices on the same bus, though, in order to be really efficient, I2C devices should be equipped with 50 ns spike filters.”…””}”(hj‹hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KÂhjzhžhubhÛ)”}”(hX>I2C devices can't be discovered like I3C ones and have to be statically declared. In order to let the master know what these devices are capable of (both in terms of bus related limitations and functionalities), the software has to provide some information, which is done through the LVR (Legacy I2C Virtual Register).”h]”hX@I2C devices can’t be discovered like I3C ones and have to be statically declared. In order to let the master know what these devices are capable of (both in terms of bus related limitations and functionalities), the software has to provide some information, which is done through the LVR (Legacy I2C Virtual Register).”…””}”(hj™hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KÇhjzhžhubeh}”(h]”Œ'backward-compatibility-with-i2c-devices”ah ]”h"]”Œ'backward compatibility with i2c devices”ah$]”h&]”uh1h´hh¶hžhhŸh³h KÀubeh}”(h]”Œ i3c-protocol”ah ]”h"]”Œ i3c protocol”ah$]”h&]”uh1h´hhhžhhŸh³h Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”h³uh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(h¹NŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jÚŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”h³Œ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(j´j±jjj9j6jåjâjyjvjÊjÇjSjPjwjtjßjÜj"jjojlj¬j©uŒ nametypes”}”(j´‰j‰j9‰jå‰jy‰jʉjS‰jw‰j߉j"‰jo‰j¬‰uh}”(j±h¶jhÉj6jjâj<jvjèjÇj|jPjÍjtjVjÜjƒjjâjlj%j©jzuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nhžhub.