SPI4.2总线应用和调试

最新更新时间:2013-12-04来源: 互联网关键字:SPI4.2  总线应用  调试 手机看文章 扫描二维码
随时随地手机看文章

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,并且要留出一定的余量,因为数据在链路上的传输也是需要时间的。同理,接收端的MaxBurst2要大于对端发送端的MaxBurst2。值得注意的是,流控是基于逻辑端口的,而不是整条链路。

  为保证不发生接收端FIFO队列溢出等问题,尽量将接收端的MaxBurst1和MaxBurst2设置大一些, 只要小于FIFO入口总数就可以,而发送端MaxBurst1和MaxBurst2的 设置不要超过本端接收能力。

  如果出现EOP(结束包)和SOP(起始包)错误或缺失,或者其他错包(例如包长变短、帧校验错误等),但没有DIP4 错误,该怎么办?这类问题一般出现在FIFO队列设置上,尤其是接收端的FIFO队列可能溢出,从而丢失了某些数据块,可以通过以下3种方法来检测和解决:

  ① 通过查看接收端FIFO溢出标志来判断FIFO队列是否溢出;

  ② 通过调整接收端的MaxBurst1和MaxBurst2来防止FIFO队列溢出;

  ③ 如果方法②的调整足够大,还有此问题,可以查看对端是否收到反压信号,以及对端的状态等。

  为了方便,通常将发送端的MaxBurst1和MaxBurst2设置为相同数值,将接收端的MaxBurst1和MaxBurst2也设置成相同数值。

  结语

  随着处理器的速度越来越快,处理器集成的内核越来越多,处理器与外围器件之间,处理器之间,以及外围器件之间的连接速度逐渐成为制约平台性能的瓶颈。许多芯片同时集成了多个总线接口,例如XLR732同时拥有SPI4.2、HT、以太网3种总线接口。SPI4.2总线在与其他总线的竞争中体现出了强大的生命力,希望本文所介绍的经验对正在应用或计划应用SPI4.2总线的同行有所帮助。

关键字:SPI4.2  总线应用  调试 编辑:神话 引用地址:SPI4.2总线应用和调试

上一篇:TS61158现场总线介绍
下一篇:LED屏幕驱动IC的封装发展现状与展望

推荐阅读最新更新时间:2023-10-12 20:54

图形化界面拖拽编程,0基础带你玩转机器人调试开发!
提到编程,你会想到什么? 机器人 ?游戏?还是程序员写代码?其实编程并不高深莫测,智能手机、手机小程序、自动取款机、数码机、摄像机......随处可见的智能物品,背后都来源于编程。编程技术的迭代发展顺应了更多人对编程零基础、易操作的需求。 ESTUN Editor 2.0 不断在软件设计、图形界面、应用场景等多方面寻找更好的操作方式,致力于让编程“人人享受”。 Editor 1.0 到 2.0 从示教器到Editor 1.0 再到Editor 2.0,编程软件的设计逐步图形化,视觉上更简洁,设计上更易操作、更便捷,让你在办公室就能完成初步的代码编写和调试! Editor 2.0 是什么? ESTUN
[机器人]
AT91SAM9263 CAN驱动调试
之前调试CAN设备,一般用的是一个从淘宝上买的USB转CAN的调试工具,100K -- 800K波特率基本没有什么问题,我们也就没有过多的去考虑一些细节的问题。忽一日,某客户说我们的CAN驱动有问题,跟他们的CAN调试设备通信不上,疑虑ing.遂带工具前往之,试之,果然.... 遂借其CAN调试工具回来捯饬,久未果 查其为ZLG公司的产品,遂前往之。遇到周立功公司一个大牛,CAN专家,号称没有他解决不了的CAN问题,事实证明,却是有料,周立功公司的CAN 分析仪就是他们一帮人弄的,现在不做研发,转做服务了。拿Can分析仪查之,发现我们的CPU发出的CAN波形 波特率对不上,虽然设置为500K,可是由于CPU时钟频率非常规频率,分
[单片机]
STM32F4(SRAM调试)
1,目的 由于STM32的FLASH擦写的次数是有限的,所以为了保护我们的FLASH,延长MCU的使用时间,我们可以在SRAM上进行调试,SRAM是暂存器,掉电后里面的内容会丢失的,它跟我们PC上的内存条有同样的功能。如果STM32的FLASH被设置成了读保护,以至于不能烧写程序,可以通过从SRAM中启动程序,把FLASH读保护解除。 2,开发环境 1,适用芯片:STM32F4全部芯片 2,固件库:STM32F4xx_DSP_StdPeriph_Lib_V1.8.0 3,IDE:MDK517 3,设置Qptions for Target 根究自己的芯片和程序所需的空间进行设置。 添
[单片机]
基于AT91RM9200系统电源的设计与调试
随着计算机技术、半导体技术以及电子技术的发展,嵌入式系统以其体积小、可靠性高、功耗低、软硬件集成度高等特点广泛应用于工业制造、过程控制、通信、仪器、仪表、汽车、船舶、航空、航天、军事装备、消费类产品等众多领域。嵌入式系统硬件设计与调试是嵌入式系统设计成功的基础,而硬件电路中电源电路的设计与调试则是系统硬件调试成功的关键。本文从实际应用出发,结合在焊接机控制系统中嵌入式系统电源的设计与调试过程中碰到的一些问题,分析讨论嵌入式系统电源的设计与调试方法。 1 系统硬件结构 在基于嵌入式系统的焊接机控制系统设计中,以AT91RM9200作为系统核心微处理器,依据控制系统要求外扩了SDRAM、SRAM、 Flash,键盘、液晶显示电路可
[电源管理]
基于AT91RM9200系统电源的设计与<font color='red'>调试</font>
C8051F410在线调试接口说明
遇到问题:IDE软件按之前文章说明进行了设置,在其他PCB板上测试通过。但在新的PCB上却出现连接失败和烧写一半失败的情况。 解决方法:在网上搜索了几天,得到可能出现问题的一下几种原因:A、RST(C2CK)需接2K~10K的上拉电阻。B、电源范围要求2.5V~3V。C、C2CK和C2D引脚需串100欧电阻。几种方法都试过了,但无济于事。 几经周折,总算是找到了问题的根源,欢喜不得,特此分享。 1、C8051F410的Vregin和VDD引脚应分别对地加4.7uF和0.1uF的电容滤波。不加此滤波时出现烧写一半失败的情况。 2、C2CK和C2D串接100欧姆电阻 3、RST(C2CK)应加1K上拉
[单片机]
C8051F410在线<font color='red'>调试</font>接口说明
倍福总线端子在干冰膨胀烟丝线上的应用
  引言:一些卷烟厂原使用的干冰膨胀烟丝(DIET——Dry Ice Expanded Tobacco)生产线的控制系统采用GEM 80系列可编程控制器。由于原生产线电控系统配置陈旧、关键件(主要指PLC,输入、输出模块等)老化,同时软件系统设计灵活性较差,监控界面不直观、友好等因素,致使控制系统无法适应生产线顺畅运行。因此控制系统需要更新,以提高生产效率及工艺参数控制精度。    一、系统总体设计思想及设计方案    根据原生产线使用的具体情况,必须为新系统量身定做先进可行的电控系统,因为一条生产线电控系统的设计是为机械设备及工艺服务的,但是控制系统的可靠与否将直接影响着工艺参数的控制精度。    如何在构建新型控制
[嵌入式]
现场总线在高级广告布生产线的应用
一. 引言   PROFIBUS现场总线是一种国际化、开放式异步通讯标准,于1996年被批准为国际标准。PROFIBUS已经广泛应用于制造业自动化、流程工业自动化等。它由三个部分:PROFIBUS-DP、PROFIBUS-FMS、PROFIBUS-PA。PROFIBUS-DP是一种高速低成本通讯,主要应用于现场设备级传输介质为屏蔽双绞线(EIA RS485),波特率从9600bps到12Mbps。艾默生公司的TDS-PA01总线适配器是PROFIBUS的兼容产品。TD3000系列变频器是高性能矢量型变频器,通过TDS-PA01总线适配器可方便地连接到PROFIBUS总线上①,组成PROFIBUS工业现场总线控制系统。      二.
[嵌入式]
恩智浦与ARM签署重量级授权协议
  恩智浦半导体与ARM共同宣布双方已签署一份新的授权协议,内容涉及ARM® Cortex™-M3处理器及其他ARM技术。恩智浦将从2008年开始推出基于ARM Cortex-M3处理器的全新微控制器系列。   作为此项协议的一部分,恩智浦有权在未来开发超低功耗解决方案的过程中,使用所有ARM Cortex系列处理器(包括新近推出的Cortex-A9 MPCore™多核处理器)、ARM Mali™系列图形处理器 (GPU)、CoreSight™片上调试及跟踪技术以及全套ARM物理 IP。   恩智浦半导体高级副总裁兼首席技术官René Penning de Vries表示:“恩智浦与ARM之间的战略协议彰显了双方对32
[单片机]
小广播
最新模拟电子文章
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved