€•*wŒ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ŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ+/translations/pt_BR/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”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j uh1jhhþ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”…””}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj)h²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´Khj)h²hubeh}”(h]”Œ introduction”ah ]”h"]”Œ introduction”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)”}”(hhh]”(hÎ)”}”(hŒI3C Bus”h]”hŒI3C Bus”…””}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjPh²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.”…””}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhjPh²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:”…””}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K!hjPh²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).”…””}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K#hj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjh²hh³hÇh´Nubjƒ)”}”(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&]”uh1j‚hjh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ*”uh1j}h³hÇh´K#hjPh²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*hjPh²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.hjPh²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´K3hjPh²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´K6hjPh²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:”…””}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KDhjüh²hubj~)”}”(hhh]”(jƒ)”}”(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&]”uh1j‚hj7h²hh³hÇh´Nubjƒ)”}”(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”…””}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KHhjRubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hj7h²hh³hÇh´Nubjƒ)”}”(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.”…””}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KJhjjubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hj7h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jºj»uh1j}h³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”…””}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjh²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.”…””}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KPhjh²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´KShjh²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´KVhjh²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[hjh²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:”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kehjáh²hubj~)”}”(hhh]”(jƒ)”}”(hŒ0the device is not powered when the bus is probed”h]”hï)”}”(hjh]”hŒ0the device is not powered when the bus is probed”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kghjubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjh²hh³hÇh´Nubjƒ)”}”(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”…””}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jºj»uh1j}h³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.”…””}”(hjFh²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.”…””}”(hjTh²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”…””}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjjh²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.”…””}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kshjjh²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.”…””}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kvhjjh²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Èhjjh²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.”…””}”(hjh²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).”…””}”(hj#h²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Èhjjh²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Íhj9h²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.”…””}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K hj9h²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):”…””}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K£hj9h²hubj~)”}”(hhh]”(jƒ)”}”(hŒHDR-DDR: Double Data Rate mode”h]”hï)”}”(hjkh]”hŒHDR-DDR: Double Data Rate mode”…””}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K§hjiubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjfh²hh³hÇh´Nubjƒ)”}”(hŒFHDR-TSP: Ternary Symbol Pure. Only usable on buses with no I2C devices”h]”hï)”}”(hj‚h]”hŒFHDR-TSP: Ternary Symbol Pure. Only usable on buses with no I2C devices”…””}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K¨hj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjfh²hh³hÇh´Nubjƒ)”}”(hŒAHDR-TSL: Ternary Symbol Legacy. Usable on buses with I2C devices ”h]”hï)”}”(hŒ@HDR-TSL: Ternary Symbol Legacy. Usable on buses with I2C devices”h]”hŒ@HDR-TSL: Ternary Symbol Legacy. Usable on buses 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&]”uh1j‚hjfh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jºj»uh1j}h³hÇh´K§hj9h²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«hj9h²hubj~)”}”(hhh]”(jƒ)”}”(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&]”uh1j‚hjÃh²hh³hÇh´Nubjƒ)”}”(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&]”uh1j‚hjÃh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jºj»uh1j}h³hÇh´K°hj9h²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³hj9h²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·hj9h²hubj~)”}”(hhh]”(jƒ)”}”(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”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K¹hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjh²hh³hÇh´Nubjƒ)”}”(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”…””}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kºhj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjh²hh³hÇh´Nubjƒ)”}”(hŒ@bit[7:1]: I3C address of the device this command is addressed to”h]”hï)”}”(hjKh]”hŒ@bit[7:1]: I3C address of the device this command is addressed to”…””}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K¼hjIubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjh²hh³hÇh´Nubjƒ)”}”(hŒbit[0]: reserved/parity-bit ”h]”hï)”}”(hŒbit[0]: reserved/parity-bit”h]”hŒbit[0]: reserved/parity-bit”…””}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K½hj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jºj»uh1j}h³hÇh´K¹hj9h²hubeh}”(h]”Œi3c-hdr-commands”ah ]”h"]”Œi3c hdr commands”ah$]”h&]”uh1hÈhjjh²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ÍhjŽh²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ÂhjŽh²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ÇhjŽh²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Åj&j#jMjJjùjöjjŠjÞjÛjgjdj‹jˆjójðj6j3jƒj€jÀj½uŒ nametypes”}”(jȉj&‰jM‰jù‰j‰jÞ‰jg‰j‹‰jó‰j6‰jƒ‰jÀ‰uh}”(jÅhÊj#hÝjJj)jöjPjŠjüjÛjjdjájˆjjjðj—j3jöj€j9j½jŽuŒ 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.