I3C协议Single Data Rate(SDR)模式研读(二):总线通信Bus Communication-1

I3C主要的协议和模式就是SDR(Single Data Rate)模式,SDR协议是基于I2C标准协议的,但是也有一些值得注意的地方:

1. I3C的起始和停止条件和I2C的起始停止条件在信令上是相同的,但是在时间上有可能不同。下面两个图为参考;

2. I3C和I2C的地址标头在位形式和信令方面相同,但在时序上可能和I2C不同。

3. 9位数据的位计数和I2C相同,但是第9位不相同

4. 通常使用推挽信号发送I3C数据,而I2C使用漏极开路信号发送。

有一些例外,包括在DAA中的使用,以及允许主从设备同意允许从设备使用漏极开路返回读操作的例外情况。 推挽式使用会影响主机和从机之间的转换。

5. 在I3C中,SCL线仅由主机驱动。 通常,该驱动器是推挽式,但也可以是漏极开路。

由于地址报头和数据字的位数相同,因此,如果将消息寻址到该从机(直接发送或通过广播),则I3C从机仅需要知道消息是否为I3C消息(与I2C信息相比)。 

An I3C Message is defined as everything from the initial START to the next Repeated START or STOP.(这句话待理解)

以下情况下I3C消息是一个SDR消息:

  1. 地址头地址是7'h7E(I3C的广播地址)。所有的I3C从机将匹配地址7'h7E,任何I2C从机设备将不会匹配此地址,因为这个地址在I2C中是保留的并且未使用。

    2. 地址头的地址和从机的动态地址相匹配。所有的I3C从机将匹配它们自己的动态地址。

所有的I3C从机会忽略地址非7'h7E的消息以及I3C主机已经分配地址的消息,并等待重复的START或STOP。 I3C从机不得响应不匹配的地址在总线上进行传输。

旧版I2C从机将忽略任何未发送给他们的消息,并等待下一个START或STOP。由于SCL信令的速度,旧版I2C从机也可能看不到部分或全部I3C消息和模式。

Role of I3C Slave

 I3C从机并不一定要知道其是在旧版I2C总线上还是I3C总线上。如果从机有一个静态的I2C地址,那么它可以使用该地址参与,直到(如果有)为其分配了动态地址。 一旦分配了动态地址,除非要求复位,否则它只能作为I3C从设备运行。

在未分配动态地址前,一个I3C可作为一个I2C设备。然而,从机应通过地址7'h7E确认启动。(唯一的例外是,如果从机选择在给定的总线或用途上保留仅I2C的设备,在这种情况下,它将使50ns尖峰滤波器保持启用状态。)

能够识别START和7'h7E地址的从设备可能会看到任何CCC(Common Command Code常用命令代码),而不仅仅是ENTDAA(Enter Dynamic Address Assignment输入动态地址分配),并且其行为如下:

(1) 从机应适当执行所有必需的广播CCC,而不仅仅是ENTDAA,ENEC和DISEC。例如,RSRDAAA由于没有分配动态地址,所以不起作用。如果从机不发出成为主机的请求,则可以忽略成为主机请求的DISEC。

(2)从机可以识别到CCCs ENTHDR0 through ENTHDR7,然后等待HDR等待模式。

(3)静态地址匹配时从机可以选择理解并执行SETDASA CCC

(4)从机可以选择理解并执行SETAASA CCC

(5)从机可以忽略所有的CCC命令,但是要识别到CCCs结束(either repeated START followed by 7’h7E, or STOP)

(6)当尚未分配任何动态地址时,从站可以支持或忽略非必需和有条件必需的广播CCC。

即使从站在分配了动态地址后支持这些CCC中的任何一个,也是如此。 例如,从属设备可以选择仅在未分配动态地址时才支持测试模式。

(7)I3C从站应忽略仅与错误地址相关的S0类型错误。

I3C从机角色如下:

     1. 在起始条件或重复起始条件之后,I3C从机设备一旦分配,它应尝试将该地址与I3C广播地址或它自己的动态地址进行匹配。 如果找到匹配项,则I3C从机应将该消息视为I3C SDR。

     2. 如果该消息发送到从机的动态地址,则从机可以对地址报头进行确认:

          1)如果从机确认地址报头,则从机应按照本节概述的所有规则将消息作为I3C SDR处理。

          2)如果从机不确认地址报头(不将ACK位驱动为低电平),则从机可能会忽略随后的任何位,直到下一个重复的START或STOP。

     3. 如果消息通过写(RnW位为0)寻址到I3C广播地址(7’h7E),则从站至少应通过数据的第一个字节处理该消息(如果消息中存在任何数据):

         1)如果7’h7E广播消息中有一个字节的数据,则该消息为CCC命令。

         2)I3C从机应处理所有适用的必需CCC命令。 命令可以是“始终必需”,也可以仅是“上下文相关”。

         3)如果CCC命令改变了I3C总线的模式,则I3C从机应以两种方式之一处理新模式。其一,若新模式是动态地址分配模式,并且是所有I3C从站都需要的,则从站如果没有当前动态地址,则应参与; 否则,从机将等待指示退出动态地址分配模式的STOP;其二,如果新模式是HDR(高数据速率)模式,则从设备可以进入HDR模式(如果它支持特定的HDR模式),或者启用其HDR退出模式检测器以等待退出HDR模式。

     4. 如果消息未寻址到I3C广播地址(7’h7E)或从机的动态地址,则I3C从机将等待重复的START或STOP。 从机可以在通过时记录/监视这些位(如果需要),但是唯一的义务是等待重复的START或STOP:

        1)当SCL线为高电平时,SDA线从高电平变为低电平来定义重复启动。

        2)当SCL线为高电平时,SDA线从低电平变为高电平表示STOP。

在这两种情况下,I3C时序可能与I2C相同或不同。

I3C地址头

I3C地址标头跟随一个START或重复的START。格式和I2C相同:7位地址,1位读写位,以及1位确认位。

START之后的地址标头是可仲裁的地址标头。 这意味着,使用开漏总线驱动器(类似于I2C)在SDA上发出START和至少第一个地址位以及ACK / NACK。 但是,某些可仲裁地址标头可以使用推挽和更高速度在SDA上驱动。

除ACK / NACK之外,始终使用推挽在SDA上驱动重复START之后的地址报头。

使用I3C可仲裁地址标头,I3C从设备可以将以下三个请求中的任何一个发送到I3C主设备:

  1. 带内中断。这等效于切换电线以引起主机的注意。 带内中断请求应使用RnW位为1的从机动态地址来进行。
  2. 次要主机请求。 除非I3C从设备在其BCR寄存器中被标记为“辅助主设备”,否则不得提出此类请求。 次要主机请求应使用RnW位为0的从机动态地址发出。
  3. 热加入请求。 I3C从站仅在I3C总线运行后可用时才发出此类请求。 热加入请求应使用特殊的7’h02热加入地址进行。

I3C从站只能在两种总线条件下向I3C主站发出这些请求:

(1) 在总线可用状态之后,在总线上发出启动(但不是重复启动)。 从设备可以通过遵循I3C地址仲裁规则,在START之后发送其动态地址或热连接地址(7’h02)。

(2) 总线处于总线可用状态,因此从机可以通过将SDA拉低来发出启动信号。

a. 如果从机将SDA拉低,则主机应在尽力而为的时间内(未明确定义该时间)将SCL拉低。

b. 主机也应将SDA拉低(重叠从机将其拉低)。

c. 一旦主机将SCL拉低,从机应在漏极开路模式下控制SDA线(即拉低或释放高电平)。

d. 然后,从站可以以正常方式发布其地址(上述条件1)。

I3C地址仲裁

START(但不是重复的START)之后的地址报头需要仲裁,这意味着主机和一个或多个Slave都可以​​尝试使用SDA将地址驱动到总线上。这样的地址头被定义为可仲裁地址头。

仲裁模型遵循常见的“开漏”方法。 然后,所有发送地址的设备(无论是主设备还是从设备)都应遵循相同的规则:

1.如果要发送的当前位为0,则设备应在SCL的下降沿之后将SDA驱动为低电平,并保持低电平直到SCL的下一个下降沿。

注意:

其他设备也可能会将SDA驱动为低电平,但这是可以接受的。

2.如果要发送的当前位为1,则设备不应驱动SDA,而应在SCL的下降沿驱动High-Z SDA。

a.此外,设备应在SCL的上升沿监视SDA,以确定另一台设备是否已将SDA驱动为低电平。

b.如果另一个设备将SDA驱动为低电平,则该设备已“失去”仲裁且不得进一步参与该地址报头。也就是说,该设备不得再发送任何比特,但可以等待将来的开始条件(而不是重复的启动条件)。

I3C地址仲裁优化

I3C主设备会为7位动态地址分配7'h03到7'h7B之间的值。 但是,由于I3C主设备将整个9位可仲裁地址标头视为漏极开路,因此它无法检测从设备是否可能在某些(或全部)地址标头中发送自己的地址。

请注意,对于I3C辅助主设备和I3C带内中断从设备,I3C主设备可以自由地将分配的动态地址限制为可用范围的下半部分(7'h03至7'h3F),从而保留地址位A6的值(在START之后的第一个地址位)在所有分配的动态地址中均为0。

以这种方式限制了动态地址之后,I3C主设备可以选择优化可仲裁地址标头,如下所示:

 •如果I3C主设备正在传输1值(即SDA上的高阻),就像在传输7'h7E时一样,那么它可以在SCL的上升沿监视SDA。如果SDA的值为1(即,如果SDA未被任何从设备驱动),则I3C主设备可以选择在推挽模式下发送地址报头的其余部分(直到ACK / NACK)。参见图10,上部波形。

 •如果I3C主设备正在发送0值(即,将SDA驱动为低电平),或者如果SDA被从设备驱动为低电平,则I3C主设备应使用漏极开路发送地址报头的其余部分。

 •如果I3C主设备打算仅发送给其他I3C设备(即不发送给任何I2C设备),则可以选择将SCL脉冲宽度保持在50ns以下,从而使总线上存在的任何I2C设备只能看到0。值。此较短的脉冲宽度产生较高的数据速率,因为对于漏极开路仲裁,仅延长了低电平时间。参见图10,中间波形。

 •如果I3C主设备打算传输到任何I2C设备,则它必须使用较慢的I2C时序。参见图10,下部波形。

图10的上部波形说明了这种优化。 当I3C主设备看到地址位A6的值为1,但之前已确保分配给I3C带内中断从设备的所有动态地址的位A6都为0时,那么I3C主设备就会知道该线路不是由任何此类从设备驱动的。

主机利用I3C从机地址开始的有利条件

I3C主设备通常应以7'h7E(对于所有I3C消息)或I2C静态地址(仅发送给旧版I2C从设备)开始帧。

在这两种情况下,都可以对地址进行仲裁,因此主机应监视是否已提出IBI,主控权请求(从属请求成为主机)或热加入请求。

 •如果不是,则主机可以正常进行。

 •如果是,则主机可以对该请求进行ACK或NACK,然后进行相应处理。

I3C从机可能正在发起IBI或主机请求。因此,可能会发生以下三种情况之一:

  1. 地址匹配,但在读写位捕获到差别,并且主机正在写入(读写位为0),因此主机获胜(RnW=1的IBI输了),进程正常继续。
  2. 地址匹配,但在读写位捕获到差别,并且主机正在读取(读写位为1),因此主机将丢失,并且必须ACK或NACK主机请求(RnW=0)
  3. 地址与RnW一样,主机和从机都不会ACK,因为主机期望成为从机,从机期望成为主机。这是一个问题,因为主机无法判断NACK是这种情况造成的,还是由于从机可能选择NACK。主机应在重复启动后再次发送从机地址,这样就可以确定发生了那种情况,避免进入死循环。

Address Header Following a Repeated START is Push-Pull

I3C主机在重复启动之后发送的地址不得被仲裁。 也就是说,在重复启动之后,任何I3C从设备都不得尝试发送自己的动态地址或热连接地址。

这样,当消息不发送给旧式I2C从机时,应使用推挽模式在SDA上发送地址报头(即地址的7位加上RnW位)。 RnW位之后的ACK / NACK位始终为漏极开路,以允许从器件对其地址进行ACK或被动NACK。

I3C Slave Adddress Restrictions

I3C从机地址空间取决于主机的决定。 也就是说,主机可以从一组值中选择动态地址,并遵守以下可选和非可选限制。

  1. I3C主机不能使用任何7’h00, 7’h01, 7’h02, 7’h7E, 7’h7F。以上为I3C保留
  2. I3C主机不能使用任何7’h3E, 7’h5E, 7’h6E, 7’h76, 7’h7A, 7’h7C, 7’h7F。禁止以上检测广播地址(7’h7E)中的错误。
  3. I3C尽量不使用7’h03,在I2C中标记为保留。
  4. 总线中如果有支持I2C高速模式的旧版I2C设备,则I3C尽量不用7’h04, 7’h05, 7’h06, 7’h07。
  5. 总线中如果有支持I2C设备ID模式的旧版I2C设备,则I3C尽量不用7’h7C or 7’h7D。
  6. 总线中如果有旧版I2C设备支持I2C扩展地址模式,或者被扩展地址机制影响,则I3C尽量不用7’h78, 7’h79, 7’h7A, 7’h7B。

猜你喜欢

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