I3C协议Single Data Rate(SDR)模式研读(四):总线初始化和动态地址分配模式Bus Initialization and Dynamic Address Assigned Mode

主机负责执行动态地址分配过程,以便为连接到I3C总线的每个设备提供唯一的动态地址。

主机应向设备提供动态地址:

1.对I3C总线进行任何初始化后,以及

2.当设备连接到已配置的I3C总线时。

设备收到动态地址后,该动态地址将在I3C总线上的该设备的所有后续事务中使用,直到且除非主机更改了该设备的动态地址。主站更改设备动态地址的唯一方法是使用RSTDA CCC命令或SETNEWDA CCC命令。由于重新设置优先级,主机可能会选择更改设备的动态地址。

主机控制动态地址分配过程,包括类似于I2C的地址仲裁程序。不同之处在使用了48位临时ID以及设备的I3C合并特性寄存器(BCR和DCR)。I3C总线上具有最低串联值的设备依次赢得每个仲裁回合,而主控主机会为每个获胜的设备分配一个唯一的动态地址。

一、动态地址分配的设备要求

为了支持动态地址分配程序,在开始程序之前,连接到I3C总线上的每个I3C设备都应以两种方式之一来唯一标识:

设备可能有一个静态地址,主机可以使用此静态地址(假设主机已知该地址),例如和I2C规范中规定的地址;

在任何情况下,设备均应具有48位的临时ID。 除非设备具有静态地址且主机使用静态地址,否则主机应使用此48位临时ID。

48位临时ID由三部分组成:

[47:33]位:MIPI制造商ID [MIPI01](15位)注意:MIPI制造商ID的最高有效位被丢弃,即仅使用15个最低有效位。

[32]位:临时ID类型选择器(一位,1’b1:随机值,1’b0:供应商固定值)

[31:0]位:32位包含供应商固定值或随机值,具体取决于位[32]的值:

如果位[32]的值为1’b0:供应商固定值:

•位[31:16]:部件ID:此16位字段的含义留给设备供应商来定义。

•位[15:12]:实例ID:此4位字段中的值应使用系统设计者选择的方法来标识单个设备。 例如:皮带,保险丝,非易失性存储器或其他合适的方法。

•位[11:0]:此12位字段的含义留有定义,并具有其他含义。 例如:更深的设备特征,可以选择包括设备特征寄存器值。 如果[32]位的值为1’b1:随机值:

•位[31:0]:设备随机生成的32位值。 可以使用命令代码进入测试模式(ENTTM)通过常规测试模式查询该值。

在供应商测试模式下,设备可以提供完全随机或伪随机的48位临时ID。

二、 带动态地址分配的总线初始化顺序

总线初始化和动态地址分配应按照以下顺序执行。 另请参见图59(动态地址分配FSM)。

动态地址分配过程应在漏极开路模式下执行,但重复的START和7’h7E / R可以是漏极开路或推挽模式。对于漏极开路,主控主机应使用时钟驱动SCL线路,以适合I3C总线上存在的设备的漏极开路速度。对于重复启动,主机可以选择主动将SDA线驱动为高电平,但仅在从机已安全释放SDA线之后。

1. 主控主机应以适当配置的状态开始,并且应在其自己的非易失性存储器中或由于从应用程序主机接收到它而具有以下数据:

a. 需要接收动态地址的I3C兼容设备的数量,

b. I3C总线上驻留的任何具有静态地址的I3C设备的数据,以及

c. I3C总线上驻留的任何旧版I2C设备的数据。

2. 主控机应使用从静态地址(SETDASA)设置命令代码动态地址,或通过向所有I3C设备分配其已知的I2C静态地址,向具有已知静态地址的任何I3C设备分配动态地址。使用命令代码的地址将所有地址设置为静态地址(SETAASA)。

在这些前提条件下,可以在I3C总线上混合支持SETAASA CCC的从机和仅支持SETDASA CCC的从机。通过SETDASA,主机将为每个不支持SETAASA的从机单独分配一个动态地址。

在混合了支持I2C的设备和不支持I2C的设备的系统中,为了将动态地址分配给仅I3C从站,主设备应在发送ENTDAA CCC之前先发送SETAASA CCC。此外,任何具有受限地址的从站(参见表9)均不支持SETAASA。

3. 主控主机应发送广播命令代码输入动态地址分配(ENTDAA)。 没有与此命令代码关联的数据。

4. 主控主机应发送一个重复的START,并发送InC广播地址7’h7E,且RnW位为高(即读)。 I3C总线上尚未分配动态地址且不是热连接设备的每个I3C设备都应确认I3C广播地址。(即,尚未分配动态地址的热连接设备在此步骤中不应确认I3C广播地址。)

在此步骤中,I3C总线上的至少一个I3C设备将确认I3C广播地址。

RnW位为高(即读)的I3C广播地址(7’h7E)的这种用法特定于动态地址分配模式。 根据I2C规范也可以接受。

5. 主机只能驱动SCL线。 主控主机应将SDA线释放到High-Z状态,以允许SDA通过总线上拉电阻变为高电平。

6. 每个响应步骤4中发送的I3C广播地址的I3C设备都应使用其自己的48位临时ID(使用Big Endian位顺序)来驱动SDA线路,直到丢失动态地址仲裁为止。

  1. 从最高有效位(位[47])开始,必须连续传输48位临时ID,且不带分隔符或ACK / NACK脉冲。
  2. 热连接设备只有在使用7'b0000_010的保留从地址和RnW位为低(即写)的带内中断请求动态地址分配过程之后,才能参与。

7. 主控主机应继续以相同的时钟驱动SCL线,同时仍释放SDA线。 然后,尚未丢失仲裁的I3C设备应传送其总线特性寄存器(BCR)和设备特性寄存器(DCR),直到最终丢失动态地址仲裁为止。

8. 由于仲裁的性质,串联临时ID,BCR和DCR的值最低的设备将赢得仲裁回合。

9. 主控主机应在开漏模式下为获胜的设备传输一个7位宽的动态地址。该动态地址应包含主控主机分配给设备的优先级。仲裁胜出设备应确认分配的动态地址。此动态地址传输过程应包含以下步骤:

  1. 主机应驱动7位动态地址,然后驱动奇偶校验位(PAR),该奇偶校验位被计算为奇校验。 奇数奇偶校验是7位XOR的倒数。 因此,〜XOR(dynamic_address [7:1])置于位置0。
  2. 如果奇偶校验有效,则从机应在下一个SCL时钟上确认收到动态地址。 如果奇偶校验无效,则从机应在下一个SCL上被动NACK。

10. 主控主机应重复此过程,跳回到步骤4,直到I3C总线上没有来自任何设备的ACK。

11. 该动态地址分配程序应由主机发出STOP来结束。关于此动态地址分配过程,请注意:

  1. 即使某些预先建立的I3C设备尚未收到其动态地址,主机也可以随时结束动态地址分配过程。
  2. 每当I3C总线处于总线可用状态时,都可以使用命令代码输入动态地址分配(ENTDAA)重新启动动态地址分配过程。
  3. 如果给定的从机不确认其分配的动态地址,则该过程要求主控主机从第4步继续进行。然后,从机将使用相同的48位临时ID参与地址仲裁。赢得仲裁回合。如果从机没有第二次确认动态地址,则主控主机应退出动态地址分配程序,并执行I3C总线设计人员提供的错误管理程序。
  4. 任何希望接收分配给I3C总线上所有设备的动态地址的辅助主设备都可以执行以下一项或两项操作:遵循动态地址分配过程。遵循相同步骤的辅助主设备将收到所有相同的数据。或使用命令代码定义从站列表(DEFSLVS)可以(最终有选择地)从主站获取I3C总线上所有设备的地址和特性。

       动态地址分配过程完成后,主要主机知道I3C总线上的哪个设备是次要主机。 然后,主控主机使用命令代码定义从机列表(DEFSLVS)对辅助主控机进行寻址,并在I3C总线上传输任何和所有旧式I2C设备的数据。 为了使I3C总线处于受控状态,所有这些操作都可以在同一事务中完成(即,主控主机通过每次发出一个重复的START来继续通信,而没有中间的STOP)。

三、 临时ID冲突检测和更正

        在动态地址分配过程中,如果多个I3C兼容设备向主机提供相同的48位临时ID和相同的设备特征寄存器值,则它们将获得相同的动态地址。尽管这种巧合的可能性很小,但确实存在这种可能性,并且I3C总线在这种情况下将无法正常运行。结果,主控主机必须测试该冲突情况,并在必要时解决该问题,然后才能安全地一起使用I3C总线上的I3C设备。

        I3C主控主机知道需要动态地址分配的I3C总线上驻留的设备的数量,这可以检测冲突错误。在完成动态地址分配过程后,主控主机应将此预期数量与实际分配的静态地址和动态地址的最终计数进行比较。如果分配的动态地址少于预期的数量,则多个设备必须已收到相同的动态地址,即发生冲突。

猜你喜欢

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