一、何为读、写分离?
读、写分离是指在对双向传输的信号线进行电气参数测试时,通过手段识别读信号和写信号,从而针对性的测试读、写两个条件下的电气参数。
二、为何读、写分离?
2.1芯片之间的通讯,可以划分为:发送端、链路、接收端。电气参数测试应在接收端抓取信号,从而判断其电平以及时序参数是否满足接收端芯片的要求。例如:芯片A、B之间通讯,从芯片A的视角出发,信号流向A->B即写信号,应是在靠近B端测试,而信号流向A<-B即读信号,应在靠近A端测试。所以读信号和写信号的测试点选择是不同的。尤其对于高带宽的通讯总线,对于测试点的要求非常严格。
当然有些时候在难以确定链路情况时,也会选择在发送端测试电气参数。例如:USB、HDMI输出接口等。当设备包含这类输出端口时,因为实际使用场景未知,所以只能以发送端的电气参数来要求设备输出的信号质量。因此对于一条通讯总线(尤其是高速串行接口),其完整的电气参数要求通常包括:发送端信号质量、链路S参数、接收端信号质量,以此来约束每个环节。
2.2对读、写操作的电气参数要求不同。从信号电平参数看,信号在经过走线或线缆后必然会产生衰减,当然为了改善这一问题,发送端和接收端的预加重和去加重是一个广泛使用的办法,但从信号本身来看发送端的电平幅值必然会更高,所以各个接口协议在对发送端和接收端的电平要求是不同的。
三、如何读、写分离?
既然读、写分离是针对双向传输信号线测试的先决条件,那么下面举几个常见通讯信号电气参数测试中的例子,大家可以体会一些基本的思路。
3.1 对于DDR系列
✦ DDR2
1、DQ和DQS信号的对齐方式不同,读数据时两者边沿对齐,写数据时两者中央对齐。如下图,Read data 部分DQ和DQS波形在时间轴上几乎重合的,而Write data 部分可以明显观察到两者波形存在时延,因为在写数据时是在DQS的上下边沿过零点采样,所以如果数据要有充分的建立/保持时间,就需要采取这种中间对齐的方式。
2、DQ和DQS的信号幅度不同,假定读、写发送端的信号幅度相同,那么在靠近内存颗粒端,写操作的信号幅度要小于读操作的信号幅度,而在靠近内存控制器端,前者大于后者,这是因为信号经过走线后必然产生衰减,如上图就是在内存颗粒端测试到的读、写信号波形,可以看出在幅值上有明显差异。
3、DQS信号的前导负脉冲宽度不同,读操作的一个负脉冲宽度参数tRPRE约为Tck,写操作的一个负脉冲参数tWPRE宽度大于0.35Tck,但通常从实测波形中观察tRPRE是明显大于tWPRE的,因此也可以作为一个辅助判据。
✦DDR3
对于DDR3,对齐方式和信号幅度的规律和DDR2相同,但是DQS前导波形有变化,如下图,对于写操作,前导是正脉冲和负脉冲的组合,对于读操作,前导是单一负脉冲。因此从DQS前导波形来对DDR3进行读、写分离是很简单明了的。
实测读、写操作时的DQS前导波形如下,其中通道M3是DQ,M4是DQS:
✦DDR4
对于DDR4,对齐方式和信号幅度的规律和DDR2、DDR3相同,但是DQS前导波形在读、写操作时不存在明显差别,所以不能作为读、写分离的判据。
实测读、写操作时的DQS前导波形如下:
综上所述在使用示波器测量各版本DDR的读、写参数时,首先要根据读、写时DQS的不同波形特征来设置触发条件,从而过滤出读或者写波形,再进行参数测试。
3.2 对于I2C
I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线,只需要两条信号线即可在连接于总线上的器件之间传送信息,使用非常广泛。I2C数据的传输格式如下:
在起始条件“S”后发送从机地址,该地址共有 7 位,紧接着的第8位是读写位“R/W—”,该位为0表示写操作,为1表示读操作;ACK是应答信号,为0表示写未应答,为1表示应答;之后跟着若干位DATA信号;末尾处由主机产生的停止位“P ”。当然针对I2C有一系列的电气参数要求,但针对主机和从机是完全不同的,例如:测试主、从两端的数据建立时间tsu:dat和保持时间thd:dat参数时,需要分别在读、写操作中抓取对应的DATA信号波形,如下以红色边框标注。
如果I2C总线上挂了多个从设备,需要根据各设备的地址来区分当前的通讯是从设备中的哪一个,目前很多智能示波器配备了“I2C触发”方式,以此进行读、写信号分离,再进行参数测试。如下图是SDS3000X操作,很便捷:
进入Setup界面后,设置SDA和SCL对应的通道,设置触发类型为Addr,设置地址信号格式:二进制或者十六进制,选择设置触发的地址是否包含“读/写”位,若在“Include R/W Bit”勾选框打“√”则不需要在下面的“Direction”下拉框里选择Write或Read,反之,需要设置。选择地址信号bit位数和触发地址,若在“Include R/W Bit”勾选框打“√”此处填写的Address地址应为8Bits,包含“读/写”位,反之,仅需设置7bits,设置信号格式是否包含Ack。
如下图是一段实测的I2C波形,从示波器中显示的解码信息可以明确得知,当前通讯的从设备地址以及读、写的数据具体是什么,一目了然。
3.3 对于SD-card
SD-card因为体积小、数据传输速度快、可热插拔等特性,广泛应用于各种便携式设备作为数据存储介质,例如:数码相机、多媒体播放器、智能手机等。SD-card的各引脚定义如下:
从引脚定义也可以看出,SD-card可以工作在两种模式:SD模式或者SPI模式,因为工作在SPI模式时数据线为单向传输,并不需要读、写分离,下面主要讲述SD模式时的分离方法。
数据传输格式如下图,分别是读、写操作时CMD和DATA信号线的状态,大体说是host向SD-card发送command命令字,然后SD-card发出response响应字,之后进行data block数据传输,数据传输完成后再进行一次command和response操作。图片
SD-card的读、写分离与I2C的操作有所不同,主要有两点:
目前市面上的示波器很多配备了“I2C触发”模式,但没有SD触发模式,因此针对SD-card的电气参数测试无法通过示波器现有的触发模式进行。
I2C是通过“R/W”标志位来区分读写,而SD-card需要通过command命令字来区分,更加复杂。基于以上两点,在此特别将SD模式下的操作方法做以描述。
因为读、写分离需要使用command命令字,所以先了解该字段的格式和内容。该字段共48bits,读、写分离主要用到command index中的内容,该段内容对应不同的操作命令。
如下是和读、写相关的4个命令,其中CMD17、CMD18是读操作,而CMD24、CMD25是写操作,在进行读、写分离操作时,就是根据该字段的不同来设置用于触发的二进制序列。
触发二进制序列以起始位“01”和command index组成,如下:
前面也已经说到示波器并没有SD触发模式,此处可以使用具有“SPI触发”模式的示波器,只需要进行相应的配置。如下图,选择“SPI”触发,C1通道为待测DATA信号,C2通道为CMD信号,C3为CLK信号,因为SPI信号中有个CS信号,但SD-card并没有该信号,所以将设置中的CS设置为低电平有效,通道为C4,实际上示波器的C4通道是悬空的,因此恒为低电平,也等效于设置为CS持续有效。CPHA=0,CPOL=0,之后在触发序列中输入相应的二进制。在此有一个需要注意的情况,虽然SD-card协议中说明command是以“01”起始,但实际上在“01”之前可能存在若干个高电平,因此在测试时还是需要观察实际波形,判断高电平的位数,并增加在触发序列中。如下图是以CMD25触发写操作,放大波形后发现前面有2bit“1”,因此将触发序列修改为“1101011001”,从而完成对于写操作的触发设置。之后即可开始对波形进行电气参数测试,如:数据信号的建立/保持时间。使用不同的触发序列抓取不同命令的读、写波形即可完整测试读、写两端的参数测试。
以上针对I2C和SD-card的测试需要用到示波器的 “I2C触发”和“SPI触发”方式,所以选择一款具备该功能的示波器是必要的,鼎阳科技的SDS3000X系列示波器配置了丰富的触发和解码功能,在相关测试中得心应手。
四、结语
针对某一通讯接口的读、写分离,往往是开始电气参数测试时的一个环节,因此掌握其方法尤为重要,可以这样说:“如果没有准确的进行读、写分离,测试结果本身是无效的。”本文主要讲述了DDR、I2C、SD-card电气参数测试中的读、写分离过程,选这几个接口是因为它们都很常用而且有一定的代表性,希望通过本文可以使大家认识到该环节的重要性以及进行读、写分离的大体思路。
该文章来源于“鼎阳硬件设计与测试智库”。