SPD5 集线器协议内容解析

注意事项

0、内容较多,注意看侧边栏目录

1、SPD5 Hub设备中主机侧和本地侧的IO电平是独立的,可以不同,主机侧支持1.03.3V的电平,本地侧支持1.01.2V的IO电平,MR14[5]必须配置为0

2、器件地址由 4位LID(设备ID)和3位HID(识别码)组成七位地址。SPD5 Hub的LID为1010

3、默认情况下SPD5 Hub会重置HID,使得匹配的HID最后必为111

4、在I3C模式下,如果主机发送Sr信号收到了NACK,如果NACK是由于PEC或奇偶校验引起的,那么在不断Sr的过程中,SPD5 Hub始终回复NACK,如果是其他原因,那么终会回复ACK。

5、NACK的响应不在PEC计算当中。

6、I3C的SDA总线支持开漏和推挽,在传输过程中这两个状态可能是相互转换,也可能一直推挽。

7、I2C的线与是通过弱上拉和强下拉实现的,I3C是如何实现线与的

8、可通过DEVCTRL CCC或MR18[6]=1禁用ODD奇偶校验,此时T位被忽略。

9、可通过DEVCTRL CCC或MR18[7]=1启用PEC

10、IBI载荷包含MDB以及MR51、MR52的内容

仅作个人学习使用,难免错漏,欢迎评论区指出

交互内容:

1、SPD5 Hub上电

2、根据HAS引脚确定HID值(根据HAS引脚上的不同电压) **

3、默认为I2C模式,功能如下:

在这里插入图片描述

​ I2C模式下支持的CCCs:DEVCTRL、SETHID、SETAASA(按照顺序发,不需要的不发)

​ DEVCTRL:启用PEC校验/禁用奇偶校验

​ SETHID:禁止转换HID

​ SETAASA:进入I3C模式。

4、工作在I2C模式,直到主机发送SETAASA 命令,SPD5 Hub进入I3C模式,功能如下:

在这里插入图片描述

5、通过设置MR11[2:0]选择页面指针,进行单字节寻址,或通过设置MR11[3]=1,进行双字节寻址。

6、写命令数据包1(SPD5 Hub单字节寻址)

在这里插入图片描述

​ 上图中先MemReg=0,即选择内部寄存器区,MemReg=1,即选择NVM区域。其中BlkAddr可视为Address[6]。Address[6]可选择128个地址,加上MR11[2:0]共有8种选择,因此128*8=1024涵盖NVM区域。

7、I2C写命令数据包2(SPD5 Hub双字节寻址)

在这里插入图片描述

​ BlkAddr和Address共同组成了Address[10:0],由于只有1024Byte,因此Address[10]可忽略。

8、忙检查

主机应在对NVM区读写前,检查MR48[3]寄存器的状态。如果违反,SPD5 Hub还是会ACK地址字节(因为还不确定MemReg的状态,此时是允许读写内部寄存器区的),SPD5 Hub会拒绝MemReg=1的读写操作,并设置MR52[7]=1,如果IBI功能可用,那么SPD5将会请求下一个中断

9、I2C读命令数据包1(SPD5 Hub单字节寻址)

在这里插入图片描述

​ 发完写命令后,再发Sr重复启动读命令,此时SPD5 Hub可能会回复NACK,主机可不断重复发Sr,直至ACK。

10、I2C读命令数据包2(SPD5 Hub双字节寻址)

在这里插入图片描述

无需多言。

11、I2C读命令数据包3(SPD5 Hub默认读地址模式)

在这里插入图片描述

​ 仅使用于读内部寄存器,通过MR18[4]启用,通过MR18[3:2]选择起始的默认地址,每次读取,指针都+1,直至STOP信号,指针复位到默认地址。

12、I2C写命令数据包(主机对本地侧)

在这里插入图片描述

​ LID不为1010,HID为该SPD5 Hub的HID,经过SPD5的转换后,本地侧的HID为111(如果匹配成功)。Address表示目标器件的寄存器地址。

​ 以上是以TS(内部温度传感器)为例,和PMIC差不多。不同之处是LID。以下是写入RCD设备的示例在这里插入图片描述

13、I2C读命令数据包(主机对本地侧)

在这里插入图片描述

​ 以上是以TS(内部温度传感器)为例,和PMIC差不多。不同之处是LID。Address表示目标器件的寄存器地址。当主机对RCD设备进行读请求时

在这里插入图片描述

​ 也可以使用优化格式,此时PEC失能。

在这里插入图片描述

14、I3C写命令数据包(主机对SPD5 Hub)

在这里插入图片描述

​ CMD字段参见下方第33条。T是奇偶校验位,如果上一个数据T位错误,这个字节及其之后,STOP或Sr之前都将被忽略。

15、I3C写命令数据包+IBI标头(主机对SPD5 Hub)

​ 主机可以选择性允许SPD5 Hub发起中断请求,主机在起始信号后发送(0x7E << 1) | W=0,即IBI标头。

在这里插入图片描述

​ 如果SPD5 Hub有待处理的IBI中断,则接下来控制HSDA总线,发送7位设备选择码和R=1。如果没有,则不会行动。

16、I3C读命令数据包1(主机对SPD5 Hub)

在这里插入图片描述

​ 当连续读到最后一个存储区字节时,T=0。

17、I3C读命令数据包2(主机对SPD5 Hub)默认读地址

在这里插入图片描述

​ 默认地址的配置与前文的描述完全相同,当连续读到最后一个存储区字节时,T=0。

18、I3C写命令数据包(主机对本地侧)

​ 本地侧的设备也支持IBI标头,以下不再列出。
在这里插入图片描述

​ 上图以TS为例,与PMIC类似,不同之处为LID。

在这里插入图片描述

​ 上图以RCD设备为例子,I3C与I2C的不同之处为第九位。

19、I3C读命令数据包(主机对本地侧)

​ 本地侧的设备也支持IBI标头,以下不再列出。

在这里插入图片描述

上图以TS为例,与PMIC类似,不同之处为LID。

在这里插入图片描述

上图以RCD设备为例子

20、IBI中断源

​ 默认情况下,所有中断源均被禁用。

​ 错误中断使能:

​ 若MR27[4]=1,如果MR52[7:5,1:0]=1,SPD5 Hub将在下一个可用时机发送IBI,并将MR48[7]置1,同时将GETSTATUS CCC的待处理中断位[3:0]更新为0001。

​ 若MR27[4]=0,无论MR52如何都不发IBI,但还会将MR48[7]和GETSTATUS CCC置为1和0001。

​ 温度传感器中断:

​ 若MR27[4]=1且MR27[3:0]=1,如果MR51[3:0]=1时,发送IBI,并且MR48[7]置1,将GETSTATUS CCC的待处理中断位[3:0]更新为0001。

​ 若MR27[4]=0或MR27[3:0]=0时,无论MR51[3:0]如何,都不会发送中断。

​ 若MR27[4]=0且MR27[3:0]=1时,如果MR51[3:0]=1,并且MR48[7]置1,将GETSTATUS CCC的待处理中断位[3:0]更新为0001。

21、SPD5 Hub发起IBI的具体操作和主机响应

  • SPD5 Hub可以在Start 之后发起IBI,此时SPD5 Hub会发送器件地址+R=1位,主机可以ACK、也可以NACK。
  • SPD5 Hub检测到总线空闲时,主动拉低HSDA,并等待主机拉低HSCL,相当于手动创建Start条件,之后跟上一条一样。
  • HSCL由主机提供

在这里插入图片描述

​ 主机可以用ACK响应,也可以用NACK进行非应答。

​ 若使用NACK,后面跟STOP命令,在这种情况下,SPD5 Hub不会继续传输载荷,而是等待下一次请求的机会,并且会保留MR48[7]和挂起中断位[3:0]。.

​ 若使用ACK,主机将接受IBI有效载荷,主机也可以在第九位(T处)中断IBI载荷,若中断了载荷,SPD5 Hub的行为与NACK一致,若SPD5 Hub传输了完整了IBI载荷,将清除MR48[7]和挂起中断标志位[3:0],并且除非发生其他不同的事件,否则不会再次请求。

​ MR51和MR52不会被置位,主机必须通过清除命令置位或写入。

IBI有效负载

22、本地侧设备发起IBI的具体操作和主机响应

  • 本地侧设备可以在Start 之后发起IBI,此时本地侧设备会发送器件地址+R=1位,主机可以ACK、也可以NACK。
  • 本地侧设备检测到总线空闲时,主动拉低LSDA,并等待SPD5 Hub拉低LSCL,相当于手动创建Start条件,之后跟上一条一样。
  • SPD5 Hub会将LSDA传播到HSDA,将HSCL传播到LSCL
  • 如果没有禁用HID转换,SPD5 Hub会将本地侧设备发送的HID代码替换为SPD5 Hub自身的代码;如果禁用了HID转换,SPD5 Hub不做改变。

​ 主机可以ACK和NACK,也可以中断传输,行为参照第20条。

在这里插入图片描述

23、中断仲裁-SPD5 Hub之间

​ I3C Basic总线上有多个SPD5 Hub设备,若多个设备同时发送数据,则需要通过裁决决定发送权,裁决方式为线与,即0优先,由于LID都是1010,因此通过HID决胜。

24、中断仲裁-SPD5 Hub之后的本地侧设备之间

​ 一个SPD5 Hub后面最多有13个本地设备,并且它们的HID码均为111,因此裁决始终通过LID决胜。

25、中断总裁-SPD5 Hub和它的本地侧设备之间

​ 通过LID决胜。

26、中断仲裁-所有设备之间(包括主机)

​ 若不同SPD5 Hub后面的本地侧设备同时发送请求,则是22和23、24的混合过程,先通过LID裁决,再通过HID裁决,这里的LID是本地设备的,若LID一致,则看HID,由于SPD5 Hub的本地侧设备HID均为111,因此实际上是比较SPD5 Hub的HID,这个过程在前文提到,SPD5 Hub会转换HID。

​ 总结:其实就是一个线与的过程,任何设备只要将SDA拉高,然后检测SDA若不是高电平,则说明仲裁失利,要主动放弃SDA控制权。

​ 任何时候、SCL均由主机提供。

罕见情况:

  • 目标正在请求中断时,主机恰好准备对目标进行操作,此时LID和HID一致,通过W/R位决胜,主机一定是W=0,中断请求一定是R=1,因此主机一定获胜。

  • 目标正在请求中断时,主机使用默认读地址模式进行读操作,LID、HID、W/R位均一致,且对方相互等待ACK,因此主机必须超时并发送Sr,正如上文提到的中断请求条件,仅S信号可作为开头,Sr不行,因此发送Sr后,目标将不会再发送中断。

27、SPD5 Hub奇偶校验行为-写入命令

不使能PEC:

​ SPD5 Hub忽略地址不匹配的数据,若出现一帧数据校验错误,则丢弃该帧数据和后续字节操作,直至STOP信号,前面的无误数据可以执行或不执行,将MR52[0]、MR48[7]、GETSTATUS CCC中的P_Err置1,挂起中断位更新为0001。

使能PEC:

​ 先检查奇偶校验,若奇偶校验通过,则检查PEC,若不通过,可能检查PEC。

按照类似的逻辑检查,如果PEC错误,会将MR52[1]、MR48[7]置位,并将GETSTUATUS CCC中的PEC_Err更新为0001。

28、SPD5 Hub奇偶校验行为-读入命令

不使能PEC:

​ SPD5 Hub忽略地址不匹配的数据,若出现一帧数据校验错误,则丢弃该帧数据和后续字节操作,直至STOP或Sr信号

在这里插入图片描述

​ 出现Sr信号时,说明主机将尝试读数据,此时SPD5 Hub将一直发送NACK,直到STOP。并将MR52[0]、MR48[7]、GETSTATUS CCC中的P_Err置1,挂起中断位更新为0001。

使能PEC:

​ 参考27、26。

29:CCC命令

​ SPD5 Hub并不支持I3C Basic规范的所有CCC,会NACK不受支持的CCC。如果CCC命令之后衔接读写操作,那必须用STOP重新开始,不能是Sr。

在这里插入图片描述

  • ENEC 使能事件中断 MR27[4]=1

    • 在这里插入图片描述
  • DISEC 失能事件中断 MR27[4]=0

    • ENEC命令与DISEC命令的格式类似,不同之处是广播地址和直接地址。
  • RSTDAA 切换为I2C模式 MR18[5]=0,禁用IBI和PEC;MR27[4]=0 MR18[7:6]=0

    • 在这里插入图片描述
  • SETAASA 切换为I3C模式 MR18[5]=1

    • 在这里插入图片描述
  • GETSTATUS 获取设备状态

    • 在这里插入图片描述

    • PEC_Err为1:PEC校验错误

    • P_Err:奇偶校验错误或协议错误

    • Pending Interrupt:0001为挂起了中断

  • DEVCAP 获取设备能力

    • 在这里插入图片描述

    • 返回一个MSB,MSB[2]说明是否支持定时器复位

    • 返回一个LSB,值为0x00

  • SETHID 禁用HID转换-仅在I2C下支持

    • 在这里插入图片描述
  • DEVCTRL 控制所有设备

    • 在这里插入图片描述

    • AddrMask 地址掩码[2:0]

      • 000:单播,如果DevID[6:0]与Hub的LID和HID匹配,则Hub响应

      • 011:多播,如果DevID[6:3]与Hub的LID匹配,则Hub或其他可能的设备响应

      • 111:广播,所有设备均响应

    • StartOffset 起始偏移[1:0]

      • 仅使用于RegMod=0
      • 表示DEVCTRL CCC的起始字节
      • 00:字节0
      • xx:字节y
    • PCE BL[1:0]

      • 仅使用于RegMod=0且PEC功能启用,设备使用此字段中的设置来了解数据字节之后预期PEC字节的时间。
      • 设置脉冲串长度
      • xx:字节y
    • RegMod

      • 0:访问字节0至直接3的通用寄存器
      • 1:设备特定偏移地址
    • DevID

      • 7位设备地址
    • 在这里插入图片描述

      • 如图所示,数据载荷包含PEC、PAR等使能位、清除IBI挂起

30、IO操作

​ 在I3C模式下,主机对于所有DDR5 DIMM环境,可能始终使用推挽驱动HSCL。

​ 对于HSDA和LSDA,主机将在以下环境改变IO。

在这里插入图片描述

​ 观察上表,很容易发现,发动第一个字节时都是开漏,应答时都是开漏。

31、总线清理

​ 仅支持I2C模式下。因某些情况,SDA可能会卡在低位,主机可以通过发送18个SCL信号让从机释放SDA。

32、总线复位

  • 清除挂起的命令或事务
  • 所有内部寄存器的值被保留,除了特别说明
  • MR18[7:5]=000,MR27[4]=0;MR52[1:0]=00
  • HSA引脚不会重新采样
  • 设备悬空HSDA以便外部上拉
  • 将复位视为STOP信号

33、命令真值表

仅使用于启动了PEC的I3C

在这里插入图片描述

34、HSA引脚采样值

在这里插入图片描述

35、读写访问

  • 在第一次读写内部寄存器之前,对NVM的读写必须在STOP之后
  • 在第一次读写NVM之前,对内部寄存器的读写必须在STOP之后

说的这么抽象,其实应该是访问不同区域时,不能用Sr进行更改。

  • 主机读到最后一个字节时NACK或T=0,使主机强制STOP。

  • 主机读地址越界后,设备不会返回任何数据,主机必须STOP。

​ 在HSA通过电阻值接地的情况下(正常运行模式),SPD5 Hub的NVM具有写保护功能,MR12[7:0]和MR13[7:0]表示了NVM每个64字节块的写保护状态。它们可以随时写入1,被设置为1时,对应的NVM块的进一步写入将被忽略,并且MR52[6]将被置1。一旦写入1后,在正常模式下MR12和MR13不允许被清除,一旦有操作试图清除,操作将被忽略,并且MR52[5]将被置1。

​ 在HSA直接接地(离线测试运行模式)下,SPD5 Hub允许清除MR12、MR13。

36、时序

遵循I2C和I3CBasic的时序要求。

由于总线上可能存在反射,因此出现上升沿非单调的情况,必须容忍斜率反转的情况。

在这里插入图片描述

tSLPR最大值为2.6ns,SLPR_PK2PK最大值为150mV。

此外,SPD5 Hub将HSCL传播到LSCL时也存在时延tPDHL。

37、一些参数要求

绝对最大额定值

存储温度TSTG = [-65,150]℃

本地侧电压 VDDIO = [-0.5,2.1]V

主机侧电压 VDDSPD = [-0.5,2.1]V

HSA引脚电压 VHSA = [-0.5,2.1]V

通讯总线电压 [-0.5,3.6]V

38、内部寄存器

img

  • MR0:设备类型 高位

  • MR1:设备类型 低位

  • MR3:供应商ID 字节0

  • MR4:供应商ID 字节1

  • MR5:设备能力,查询是否支持温度、Hub功能

  • MR6:设备写恢复时间能力

  • MR11:控制I2C地址模式,单双字节模式,页选择

  • MR12:NVM块[7:0]写保护控制

  • MR13:NVM块[15:8]写保护控制

  • MR14:控制设备IO接口,内外部上拉接口

  • MR18:设备配置,PEC、奇偶效验使能、协议模式、默认地址使能、默认地址、PEC计算突发长度

    • 在这里插入图片描述
  • MR19:清除温度传感器的状态

  • MR20:清除各种错误,例如校验失败、写保护错误、SPD忙错误

    • 在这里插入图片描述
  • MR26:温度传感器使能

  • MR27:清除事务中断状态、IBI错误中断使能等错误使能

    • 在这里插入图片描述
  • MR28~MR29:温度传感器温度高限制

  • MR30~MR31:温度传感器温度低限制

  • MR32~MR33:温度传感器临界温度高限制(必须高于温度高限制)

  • MR34~MR35:温度传感器临界温度低限制(必须低于温度低限制)

  • MR48:IBI状态、SPD5Hub内部读写状态、写保护状态

    • 在这里插入图片描述
  • MR49~MR50:温度传感器温度

  • MR51:温度传感器状态

    • 在这里插入图片描述
  • MR52:读写错误状态、写NVM错误状态、PEC、PAR错误

    • 在这里插入图片描述

参考

SPD5详解
JESD300-5

  • 18
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值