SPI4.2总线应用和调试

2013-12-04 14:27:26来源: 互联网

SPI4.2总线(System Packet Interface,系统间数据包接口)是一种速度高达10 Gb/s的芯片间互连总线,主要应用于ATM信元传输、POS(Packet Over SONET/SDH,基于SONET/SDH的包传输)和10 Gb/s以太网等高端场合。特别在通信领域,很多高端处理器和网络处理器,如Intel公司的IXP2800、Cavium公司的多内核处理器CN58xx系列、NetLogic公司的XLR732、Broadcom的BCM1480,几乎都集成了SPI4.2接口,以提高芯片的吞吐能力,适应通信产业朝着LTE(长期演进)发展的需求。还有众多的物理层芯片,例如Cortina公司的CS1331,可以将SPI4.2总线转换成8个千兆以太网接口。SPI4.2总线之所以被众多的高端芯片所采用,与其高速、灵活、可靠的特性是密不可分的。

  1 SPI4.2总线基本原理

  SPI4.2总线是一种芯片间的互连总线,连接芯片的链路层和物理层模块。其工作时钟是源同步双边沿触发时钟,至少为311 MHz。图1是使用SPI4.2总线连接两个芯片的示意图。可见,SPI4.2总线的信号在发送和接收方向完全对称而又互相独立,数据链路和状态链路分开,并且其时钟也是完全分开的。因此,该总线不仅适合于双向通道,而且适合于只收不发或者只发不收的单向通道。

  

SPI4.2连接示意图

 

  图1 SPI4.2连接示意图

  SPI4.2总线具有以下特点:

  ① 点对点互连,收发数据链路宽度为16位。

  ② 发送和接收模块的信号各分为两组,即数据信号和状态信号,分别对应数据链路和状态链路,每个链路具有自己的时钟。数据链路发送和接收数据,状态链路传输相应链路的状态信息。

  ③ 数据链路包含DCLK、DAT[15:0]和CTL三种LVDS(低压差分传输)信号。前面加“T”表示信号属于发送模块,加“R”表示信号属于接收模块。以发送模块为例,TDCLK是双边沿触发时钟,TCTL是控制信号,TDAT[15:0]承载了数据和控制信息。当TCTL为高电平时,TDAT[15:0]传送的是数据包;当TCTL为低电平时,TDAT[15:0]传送的是控制包。数据采用DIP4校验交织码。

  ④ 状态链路包括SCLK时钟信号和STAT[1:0]状态信号,信号类型是LVTTL或LVDS。SPI4.2 发送时序如图2所示。如果选择LVTTL,则SCLK时钟频率是数据链路时钟速率的1/4。如果选择LVDS,则SCLK时钟频率和数据链路时钟频率相同。下文中均以LVDS为例进行阐述。状态链路主要用于流控。

  ⑤ 接收和发送模块都含有一个FIFO队列,用于缓存数据,队列长度由芯片设计而定。队列的状态信息通过状态链路周期性地发送,接收模块和发送模块的状态信息是独立的。状态信息附加了DIP2交织校验码,以提高传输可靠性。

  

SPI4.2 发送时序

 

  图2 SPI4.2 发送时序

  除了数据包中最后一段不满16字节的数据(EOP)之外,SPI4.2总线的数据实行突发传输,以16字节为单位(称为一个数据块),每次传输多个数据块。因为数据宽度是16位,所以一次突发传输至少需要4个时钟周期。数据的高地址位字节先发送(MSB),低地址位字节后发送,数据块传输过程中不会被中断。每次突发传输的间隔期间传送控制包或者训练序列。图2中,TDAT表示数据块,TCTRL表示控制块。控制包长度为16位,包含了前次传输和下次传输的状态信息:包开始标志、包结束标志、逻辑端口地址和DIP4交织校验码等。数据链路遵循有限状态机进行工作,状态包括5种:控制包传输、数据包传输、空闲包传输、训练序列传输以及训练序列控制[1]。

  因为状态链路的宽度是2位,所以每次突发传输至少传输16位数据(4个时钟周期)。反映FIFO队列的状态信息有3种:饱(SaTIsfied)、饿(Hungry)、极饿(Starving),分别对应二进制数字10、01和00。11表示链路处于失步状态,正在同步过程中。当状态是“饱”时,说明队列几乎满了,只接收当前正在传送的数据包,其他数据包只有等状态更新后才能接收。当状态是“饿”时,可以接收最大MaxBurst2个数据块。当状态是“极饿”时,说明队列几乎空了,可以接收最大MaxBurst1个数据块。MaxBurst1和MaxBurst2是SPI4.2总线初始化时设定的参数,MaxBurst1不得小于MaxBurst2。

2 SPI4.2总线的初始化和同步

  SPI4.2总线初始化时必须设定一些基本参数,如表1所列。

  SPI4.2总线协议定义了一个叫“日历”的数据结构CALENDAR[i](i=1,…,CALENDAR_LEN)。CALENDAR_LEN(日历长度)参数规定了逻辑端口(或称为虚拟通道)的数目,该数值不能小于实际的逻辑端口数目。例如,如果SPI4.2总线用于10 Gb/s以太网口,那么日历长度是1(即CALENDAR_LEN = 1);如果SPI4.2总线用于10个1 Gb/s以太网口,那么日历长度是10(CALENDAR_LEN = 10),CALENDAR[i] = 1,2,…,10,代表了10个以太网端口。CALENDAR[i]中承载的数据被周而复始地依次传输,重复次数是CALENDAR_M次。图3为日历长度和重复次数都是4的数据传输示意图。SPI4.2总线被初始化时,必须确保接口两端的CALENDAR_LEN和CALENDAR_M分别相等。从这个角度看,SPI4.2是一种时分复用的总线:总带宽是固定的,“日历”数据结构决定了带宽和逻辑端口的分配。

  当SPI4.2正常工作时,数据和状态链路会不定期地发送训练序列。在数据链路,训练序列至少应该在DATA_MAX_T个时钟周期内发送一次。在状态链路,训练序列至少应该在FIFO_MAX_T个时钟周期内发送一次。设置DATA_MAX_T或FIFO_MAX_T为0将取消各自链路的训练序列,一般情况下不推荐这种设置。

  图4以XLR732为参照描述了SPI4.2总线的收发同步过程。启动之后,在发送方向,发送模块(TX)通过数据链路发送连续的训练序列,对端的接收模块成功收到训练序列后,会设置本端的接收同步标志;然后通过状态链路发送训练序列给对端,一旦发送模块成功接收到训练序列后,就设置本端的发送同步标志。

  在接收方,接收模块(RX)在数据链路成功接收到对端发送的训练序列后,会设置本端的接收同步标志;然后通过状态链路发送训练序列,一旦发送模块成功接收到训练序列后,就设置本端的发送同步标志。在同步过程中,训练序列由指定的连续的DIP4码字组成。发送模块必须连续发送训练序列,直到本端的状态链路收到有效信息。同时,接收模块忽视所有接收到的数据,直到观察到训练序列,获得数据同步。一旦数据链路同步之后, FIFO队列状态信息就开始传送。

  如果发送方接收到有效的状态信息,它就可以开始进行数据突发传输。如果在工作过程中,由于某些原因(例如一端器件掉电或重启)导致总线失步,那么为了再次获得同步,双方需要按照上述过程发送连续的训练序列,直到建立同步为止。

  表1 SPI4.2初始化基本参数

  

SPI4.2初始化基本参数

 

  

日历长度和重复次数都为4的数据传输示意图

 

  图3 日历长度和重复次数都为4的数据传输示意图

  

 收发同步过程示意图

 

  图4 收发同步过程示意图

3 SPI4.2总线接口的调试

  SPI4.2总线接口的调试包括两个重要步骤:链路的同步和数据的正常收发。

  在调试链路同步时,首先必须查看总线两端的初始化参数配置。因为SPI4.2 总线协议是一个对等端数据传输协议,所以大部分参数需要双方的匹配和协商,特别是接收方和发送方的CALENDAR_LEN和CALENDAR_M参数。

  如何查看同步呢?芯片通常会提供一个状态寄存器来反映总线的同步。“接收同步标志”只能说明在数据链路上成功接收到对端的训练序列,但不能保证接收的状态链路是正常的,如果需要确认可查看对端的“发送同步标志”。在收发双向通道应用中,只有两端的“接收同步标志”和“发送同步标志”都置位了,总线才算同步。此时,可以确认总线两端的物理连接是正确的,握手成功。

  如果不能同步,就必须检查两端的“接收同步标志”和“发送同步标志”,判断是哪一端出了问题。检查是否有DIP4和DIP2错误,如果有此类错误,说明链路上信号质量可能不佳,可以用示波器测量信号波形。如果信号质量确实不好,可以通过提高信号驱动能力或者调整硬件匹配阻抗来优化。

  如果两端的接收和发送都没有同步,就必须测量芯片的电压、工作频率、重启等信号。如果两端的“接收同步标志”和“发送同步标志”都已经置位,说明双方的接收和发送都同步,可以正常收发数据了。在大流量数据传输过程中,最相关的是FIFO队列的参数配置,配置不当会导致错包或丢包。以NetLogic公司的XLR732网络处理器为例[2],SPI4.2总线的发送模块的所有逻辑端口共享一个FIFO队列,宽度为16字节,长度为128;接收模块的所有逻辑端口共享一个FIFO队列,宽度为16字节,长度为512。每个逻辑端口所占用的队列地址和大小都可以通过寄存器配置。

假如某个端口接收端队列的长度是48,MaxBurst1是12,MaxBurst2是8。那么当该模块接收数据时,如果由于某些原因(例如软件来不及处理),接收队列只剩下12个空位,也就是接收队列已经有48-12=36个空位被占用时,它将通过状态链路向对端发送“饿”的状态信号(反压信号)。对端收到该信号后实施流控策略,根据本端发送端的MaxBurst1设置值发送数据,该值表示接收到“饿”状态信号后最多还可以发送的数据块数目。所以接收端的MaxBurst1 的值一定要大于对端发送端的MaxBurst1,并且要留出一定的

[1] [2]

关键字:SPI4.2  总线应用  调试

编辑:神话 引用地址:http://www.eeworld.com.cn/mndz/2013/1204/article_21565.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
SPI4.2
总线应用
调试

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved