注意事项
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不会被置位,主机必须通过清除命令置位或写入。
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、内部寄存器
-
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错误