I3C协议Single Data Rate(SDR)模式研读(六):通用命令代码(CCC)

        通用命令代码(CCC)是全局支持的命令,可以直接传输到特定的I3C从设备,也可以同时传输到所有I3C从设备。 本节指定如何在I3C总线上传输CCC,每个CCC如何工作以及需要I3C设备支持哪些CCC。

一、通用命令代码格式

CCC命令协议仅使用I3C SDR进行格式化,并且始终以I3C广播地址(7’h7E)开头。 也就是说,在启动或重复启动之后,CCC命令的地址应始终为7’h7E,而RnW位应始终为写。

一旦分配了I3C从机,所有I3C从机都将识别7’h7E广播地址和它们自己的动态地址。 在分配I3C动态地址之前和之后,I3C主机均应发出CCC命令。

CCC命令分为四类:

  1. 广播写:所有的I3C从机都可以看到广播写命令。即使从机随后忽略广播命令,所有从机都应检查每个收到的广播命令。所有的广播写命令都以重复起始或停止条件结束,而ENTDAA通常以停止条件结束。
  2. 直接读/写:直接读/写CCC可以从一个或多个特定的I3C从机读取数据或向其中写入数据,一次从一个或多个,具体由从机动态地址选择。 例如,它可以写入相同的从机,然后从该从机回读以验证更改是否被接受。每个直接读/写CCC命令以STOP或重复的START结尾,后跟I3C广播地址(7’h7E)。
  3. 直接写:直接写入CCC定向到一个或多个特定的I3C从器件,由从器件动态地址选择。 每个直接写入CCC命令以STOP或重复的START结尾,后跟I3C广播地址(7’h7E)。
  4. 直接读取:直接读取CCC从一个或多个特定的I3C从设备读取数据,一次从一个I3C从设备,由从设备动态地址选择。 每个直接读取CCC命令以STOP或重复的START结尾,后跟I3C广播地址(7’h7E)。

所有CCC命令共享相同的通用帧格式,对于广播CCC,如图21所示,对于直接CCC,如图22所示。 每个CCC命令都有唯一的命令代码。 表14中详细说明了此帧格式中的字段。

二、广播CCC和直接CCC

Broadcasts Commands命令码是从0x00到0x7F,Direct Commands命令码是从0x80到0xFE,命令码0xFF保留。因此,从机可以很容易地判断出接收到的命令是针对所有从机的Broadcast,还是只针对当前从机的Direct。

三种条件下,CCC命令可以结束,第一,在命令或数据后存在一个停止条件;第二,一个重复的起始条件可以结束Broadcast Command;第三,对于Direct Command,7’h7E后一个重复的起始条件可以使其结束。

如果CCC命令进入一个模式,则该模式根据自己的规则结束。

主机可能在不寻址从机的情况下终止一个Direct CCC命令。如果主机过早地无效终止了与CCC相关的数据,则从机应尽最大努力来处理终止并确定适当的措施。 也就是说,从机可能选择不理会事件,或者从机可能会处理来自不完整数据的部分影响。

在直接CCC命令中,框架首先包含命令代码,然后包含一个或多个重复的START,然后是目标从设备的地址,然后是数据,最后是STOP,或重复的START和7’h7E。

单个直接CCC命令还可以选择寻址多个从设备。为此,对于每个其他所需的从设备,在最后的7'h7E之前插入一个附加的块(请参见图22)。

每个这样的块包括重复的START,附加的所需从机的从地址以及要发送到该从机的数据。

使用直接读/写直接CCC命令,命令代码后可以跟随数据,例如定义字节。 此外,每个从机访问可以是主设备后面具有0个或多个数据字节的写操作,也可以是从机后面具有1个或多个数据字节的读操作(如果已对读进行了确认)。 每个Direct CCC将说明是否以及如何使用Write and Read。

I3C对Direct GET CCC Commands强制使用一次重试模型。

 回想一下,直接GET CCC命令首先使用广播地址7’h7E向所有从设备发送一条总体GET命令,然后发送目标从地址以激发每个从设备的响应。这要求从机处于允许发送其地址的情况下立即做出响应的状态,而且还需要为不发送其地址做好准备(因此,从机不必实际响应)。对于从属设备在硬件中支持的直接GET CCC命令,例如那些处理从属设备内本地已知信息的命令(例如GETBCR),此要求通常不会出现问题。但是,对于从属系统支持的Direct GET CCC或从属系统中的软件支持的Direct GET CCC,从属可能无法及时响应Direct GET CCC。

 可以通过以下单次重试模型处理这种情况,该模型仅适用于Direct GET CCC Commands。

如果从机不能及时对Direct GET CCC 命令提供相应,则:

  1. 从机不会响应其地址。
  2. 主机发出重复开始tiaojian,然后是从机地址。注意这是从机地址的第二次发送。使从机有更多时间准备响应。另一种措施是在从机的非响应之后到主机重复启动前,主机还可以选择采用时钟延迟。
  3. 从机应响应步骤2中的尝试,然后发送Direct GET CCC请求的结果。

此重试模型仅限于单个重试。 任何仍然无法(出于任何原因)响应从步骤2重试尝试的从站将对其进行NACK。 如果从机在步骤2中进行了第二次尝试,则主机将不尝试进一步重试该从机。

请注意,仅当从机NACKs原始Direct GET CCC请求时,才会发生步骤2。 结果,该重试模型从不施加时间损失,除非从机实际上需要额外的时间。

三、CCC指令描述

所有I3C主设备和所有I3C从设备都应支持表15中标记为“必需”的每个I3C通用命令代码(CCC)。 当I3C设备支持非“必需” CCC时,应按照本规范中的规定实施。

1. Enable/Disable Slave Events Command (ENEC/DISEC)

以下四个Direct或Broadcast CCC允许主机控制何时在I3C总线上允许和禁止从机发起的通信。这个控制主要包括从机尝试请求中断(ENINT/DISINT),请求主控权(ENMR/DISMR),或者表示热加入事件(ENHJ/DISHJ)的尝试。

表18和表19分别显示了从机事件字节中要设置的位,以分别启用和禁用四种受支持的I3C从机/辅助主机事件类型。 保留位供将来MIPI使用。

支持I3C从机/第二主机的事件类型包括:

从机中断请求:Enable(ENINT)/Disable(DISINT)

当从机初始化中断使能并且在I3C总线上未被禁止时,这些位允许主机来控制。

主机请求:Enable(ENMR)/Disable(DISMR)

第二主机的主机请求使能并在I3C总线上未被禁止时,这些位允许当前主机来控制。

热加入事件:Enable(ENHJ)/Disable(DISHJ)

当从机初始化热加入使能并且在I3C总线上未被禁止时,这些位允许主机来控制。主机可以广播此CCC,以命令设备不要发出动态地址分配请求,直到主机后来准备好为热连接设备提供服务时才获得主机的授权。 (热加入事件是异步的。)

2. Enter Activity State 0–3 (ENTAS0–ENTAS3)

这四个直接(表20)和四个广播(表21)CCC允许主设备通知一个或所有从设备,在大约的一段时间内它将不会在I3C总线上处于活动状态,因此从属设备可以在此期间使用较低的功耗状态。 每个活动状态有一个直接CCC和一个广播CCC。所有I3C从设备都应在所有活动状态下保持I3C通信功能。

3. Reset Dynamic Address Assignment (RSTDAA)

主机需要一个或全部I3C设备清除/复位其主机分配的动态地址。清除后,这些设备为动态地址分配程序做好准备。

4. Enter Dynamic Address Assignment (ENTDAA)

下面的Broadcast CCC表示,主机需要所有的I3C设备加入动态地址分配程序。已有动态地址的从机设备无需相应此命令。

5. Set/Get Max Write Length (SETMWL/GETMWL)

下面的命令允许I3C主设备设置或获取一个从设备的最大数据写入长度(以字节为单位)。该最大写入长度不影响广播CCC的数据写入长度。 设置/获取最大写长度值在两个字节上传输,最高有效字节(MSb)首先传输。 最大写入长度可以设置为的最小值是8。

当(且仅)从设备实现的任何专用写入消息和/或任何扩展写入CCC支持每个消息的最大数据字节数的可变限制时,才需要此CCC,并且此限制大于8个字节。

这允许从设备限制主设备发送的字节数。 没有此类可设置限制的从设备可以选择支持此CCC,但预计不会这样做。

6. Set/Get Max Read Length (SETMRL/GETMRL)

下面的命令允许I3C主机设置或获取一个最大的数据读长度,并选择一个最大的IBI有效载荷大小。

设置/获取最大读取长度值在前两个字节上传输,最高有效字节(MSb)首先传输。 可以将“最大读取长度”设置为的最小值是16。

对于BCR位2设置为1’b1的设备,Max IBI有效负载大小值将添加为第三个字节,其中值0表示无限制负载大小。 IBI有效载荷的最小大小为一(一个字节)。

该命令对从机是可选的,两种情况除外:

  1. 如果(a)从机实现的任何专用读取请求消息和/或任何扩展读取请求CCC都支持从机每个消息可以返回的最大数据字节数的可变限制,则需要此CCC ,并且(b)此限制大于16个字节。
  2. 如果从机都(a)支持IBI有效载荷(如BCR位1所示),并且从机(b)将传送一个以上字节的私有有效载荷,则需要此CCC。

7. Define List of Slaves (DEFSLVS)

此广播CCC(表30)仅与次要主机相关,次要主机可以独立选择响应或忽略此CCC。该CCC通过每个从机四个连续的数据字节,告诉辅助主设备I3C总线上存在哪些从机。首先,当前主机通过使用值7’h7E作为静态地址在第一组四个数据字节中传输自己的数据来标识自己。然后,I3C总线从机上的每个其他从机都由另外四个数据字节集表示。

计数是I3C总线上存在的从机数量。 每个从机由一组四个数据字节表示:

  1. 动态地址:7个最高有效位(位[7:1])包含从机的主要主机分配的7位动态地址的当前值,而最低有效位(位[0])则填充值1’b0。 对于旧版I2C设备,动态地址的值应为7'h00。
  2. DCR 类型:从机的设备特性寄存器值,如果未知则0x00。对于旧版I2C设备,DCR类型值可以使设备的LVR值。
  3. BCR 类型:从机的总线特性寄存器值,若未知则为0x00。
  4. 静态地址:从机的原始7位静态I2C地址,其中7个最高有效位(位[7:1]),最低有效位(位[0])填充了值1’b0。 如果没有静态地址,则该值为7'h00。

对于旧式I2C设备,“动态地址”字段的值为7'h00,而DCR字段将包含设备的旧版虚拟寄存器(LVR)的值。

除非存在至少一个辅助主机设备,主机不会发送DEFSLVS CCC。每个热加入事件后主机发送DEFSLVS CCC。

8. Enter Test Mode(ENTTM)

这个指令会通知所有I3C设备在制造或设备测试期间主机正在进入指定的测试模式。输入测试模式命令帧格式包括一个字节,该字节指定要输入的测试模式。 支持的I3C设备应在收到输入测试模式CCC后进入指示的测试模式。 表32列出了定义的测试模式字节值。

9. Set Dynamic Address from Static Address (SETDASA)

这个指令允许主机利用从机的静态地址给该从机分配动态地址。比ENTDAA动态地址分配方法要快。SETDASA要在ENTDAA使用前使用,除了已经分配动态地址的从机外,所有的从机都要响应ENTDAA CCC。

注意:SETDASA命令代码与众不同,因为它通过其I2C静态地址而不是其动态地址来寻址所需的I3C设备。 结果,此CCC只能发送到具有I2C静态地址的从站。

新分配的地址在表34中所示的动态地址字节中发送,其中7个最高有效位(位[7:1])包含7位动态地址,最低有效位(位[0])填充为值1’b0。

SETDASA CCC还可以专门用于I3C最小总线使用案例中的简单点对点通信。 I3C最小总线是具有一个I3C主机(可能功能降低)和一个I3C从机的I3C总线。 在SETDASA CCC的这种特殊用法中,主机既使用固定值7'h01作为静态地址,又使用固定(且保留)值7'h01作为动态地址(请参见表35)。 SETDASA CCC的这种特殊用法允许使用更简单的主机,还可以选择使用更简单的从机,这些设备专门用于最小总线配置。

I3C从机应支持SETDASA CCC的这种特殊用法,除非这种支持会使从机在最小总线用例中无法使用。 支持SETDASA CCC的这种特殊最小总线用法的从机应与静态地址7’h01匹配,然后接受7’h01作为其新的动态地址(与SETDASA的自然结果相同)。 从机以这种方式接收到其动态地址后可能会选择不同的行为。

要使用这个特殊的形式,需要已知I3C总线只有一个主机,并且要么有一个活跃的I3C从机设备,该设备有能力支持这个SETDASA CCC特殊的用法,要么一个或者更多I3C从机设备,这些设备必须作为接收器,不能使用带内中断,不会收到读请求。实际上,这种布置允许单个主机广播到从机。

10. Set New Dynamic Address (SETNEWDA)

该命令允许I3C主机给单一I3C从机设备分配动态地址。动态地址中,前七位包含7位的动态地址,最后一位[0]由值1’b0填充。

11. Get Provisional ID (GETPID)

该命令获取单一I3C从机设备请求,来给主机返回其48位临时的ID。在该命令中,48位的值通过6个字节传输,以MSb开始。

12. Get Bus Characteristics Register (GETBCR)

该命令获取单一I3C设备请求,返回总线特性寄存器给主机。BCR的值由一个字节传输,以MSb开始。

13. Get Device Characteristics Register (GETDCR)

该命令获取单一I3C设备请求,返回设备特性寄存器给主机。DCR的值由一个字节传输,以MSb开始。

14. Get Device Status (GETSTATUS)

该命令获取单一I3C设备请求,返回其当前的状态,由两字节传输,字节0是LSb,字节1是MSb。

15. Get Accept Mastership (GETACCMST)

该命令验证主机请求,允许当前主机提供主机角色给I3C的第二主机。这个命令用来确认第二主机是否接受角色,第二主机会返回其7位的动态地址,7为动态地址的值和从机地址的值是相同的。如果第二主机没有接受角色,则它会NACK请求。

只有以下四个步骤都发生,第二主机才会获得主机角色。步骤2到步骤4适用在当前主机上。

  1. 当前主机响应主机角色请求。
  2. 当前主机发送一个GETACCMST命令给第二主机。
  3. 第二主机用7位动态地址回复命令。7为动态地址的值和从机地址的值是相同的。如果第二主机以NACK回复,或者以不正确的7位地址回复,则:第二主机将不会获得主机角色,取消GETACCMST命令,当前主机可以重试CCC,或者以STOP条件结束此过程
  4. 当前主机发出一个STOP:如果当前主机发出一个重复起始条件,则:第二主机将不会获得主机角色,取消GETACCMST命令,当前主机可以重试CCC,或者以STOP条件结束此过程。

16. Set Bridge Targets (SETBRGTGT)

该直接CCC(表45)仅与桥接设备相关,即主机预先知道的I3C设备(不通过检查BCR位)为桥接设备。 I3C主机只能将此CCC发送到已知的接受它的桥接设备。

从机地址是从机的原始7位静态I2C地址,如果从机没有此类静态I2C地址,则为7'h00。

计数是桥接“从机”的数量。

  每个描述的桥接“从机”由两个字段表示:

  •动态地址:7个最高有效位(位[7:1])包含从机的主主机分配的7位动态地址的当前值,而最低有效位(位[0])则用该值填充 1'b0。 对于旧版I2C设备,动态地址的值应为7'h00。

  •ID:桥接设备的16位明确标识符(两个字节)

ID字段的含义不是本规范定义的,它应该是网桥和主服务器(或向主服务器提供此类信息的任何其他实体)之间的合同。 例如,高半字节可能指示通信类型(例如I2C,SPI,UART,LIN等),而低12位可能是端口(作为端口号和设备选择器)。

17. Get Max Data Speed (GETMXDS)

主机利用此CCC决定一个从机设备的SDR模式数据速率限制。仅当被寻址的从机设备的总线控制寄存器(BCR,Bus Control Register)的位0设置为1’b1时,需要主机使用此命令。仅当上述条件发生时,从机才支持此命令。

总线特性寄存器的位0应该在从时钟到数据周转时间大于12ns的从机中设置。除非存在其他限制,否则tSCO延迟范围内的从机不应设置限制位(即位[0])。 但是设备应支持此CCC,以便在计算读取的最大有效频率时可以更好地考虑每个数字,因为可以告知主/系统设计者tSCO参数以及线长(传播时间),线电容,从站数量 和存根(如果有)。

tSCO延迟是从SCL输入到SDA输出的总内部延迟的量度,不包括其他因素,例如线路电容和路径延迟,这些因素不计入器件计算范围,而是纳入更广泛的计算范围。 tSCO延迟适用于主设备和从设备,因为基于系统配置,主设备在多主系统中可能充当从设备。

任何从时钟到数据的周转(tSCO)延迟大于12 ns的从设备,都应将maxRD字节的“时钟到数据的周转”字段设置为3’b111,并通过私下协议将此值报告给主设备。

最大读取周转时间用于通知主机在读取其请求的数据之前要等待多长时间。 这样,主机就可以为数据读取请求(不包括带内中断响应)获得从设备的周转延迟时间。因为某些从站可能会由于时钟启动效应,桥接,内部处理器变慢等原因而出现数据读取延迟(与CCC读取相反)。主机可以使用返回的延迟因子来避免由于过早读取设备而导致的NACK。从设备可以在报告时间之前准备好数据,主设备也可以估算时间,并在最大读取周转时间之前重试读取。主机应意识到,在最大时间之前,来自从设备的读取请求的任何NACK都是正常情况,并且不需要恢复方法;相反,在最大数据周转时间之后的NACK应作相应处理。

注意:此CCC与位数据速率和读取周转时间有关,与数据大小无关。 数据大小是CCC获取最大读取长度(GETMRL)和获取最大写入长度(GETMWL)的主题。

从机设备返回格式有两种:

格式1:两个数据字节包含从机设备的最大读/写速度

格式2:五个数据字节包含从机设备的最大读写速度以及三字节最大读转换速度。

从机通过返回的数据字节数来表示要返回的格式:两个字节表示格式1,五个字节表示格式2。

从机选择格式1与格式2,应基于是否需要将最大读取周转时间传达给主设备。

  表48,表49和表50分别显示了对返回字段maxWr,maxRd和(仅对于格式2)maxRdTurn的解释。

18. Set All Addresses to Static Address (SETAASA)

这个CCC允许主机请求所有连接的从机使用自己已知的静态地址作为他们的动态地址。这是为带静态地址的从机分配I3C动态地址最快的方法。

猜你喜欢

转载自blog.csdn.net/yinuoheqian123/article/details/108324396
今日推荐