admin 管理员组文章数量: 1184232
2024年4月27日发(作者:textarea语法)
最近发现论坛上好多SRIO的帖子,刚好应客户需求我总结了一些SRIO的东西,在这里也
分享出来,作为抛砖引玉吧。
首先坦白来说我不是太懂SRIO,至少SRIO协议我没完全看过,O(∩_∩)O~,为了给客户
写这些东西,我也查阅了很多资料和书籍,如果有不对的地方,欢迎大家讨论和指正。(论坛
上的SRIO大虾很多,比如Zhan,Allen等,嘿嘿……)
SRIO其实不是个通用的名字,真正能google到的叫Lp-serial,这个全称是什么暂且买个
关子,它是一种协议,就是规定了两个都遵照这种协议的设备可以通信。要注意的是这里规定
的是两个设备,不是三个也不是四个,这个理解是比较重要的。比如你一个switch连接了3
个DSP和2个FPGA,这5个都可以通过SRIO协议通信的。但是本质上,这3个DSP和
2个FPGA都是和Switch通信,再进一步来说这个协议是端到端的协议。之所以要说明这个
问题,就是很多客户反映的DSP到FPAG发包木有成功,如果中间有switch,那么你需要检
查DSP到switch的链路,switch到FPGA的链路。而不是笼统的去看DSP到FPGA,这
就是协议的本质。
再说协议,协议规定了SRIO在物理层传递是按照固定的报文的。如果你是做原始的SRIO
的IP,那么你需要手动的拼接这些报文;如果你用TI芯片,恭喜你,TI使用LSU帮你拼接,
你只需要配置LSU寄存器就可以了。所以有人问LSU怎么填,那么如果你懂了协议里面的包
格式,同时了解LSU如何对应到协议中去,那么你就不会有任何疑问了。(这当然是说的简
单啊……)
继而就说到SRIO的错误检测了,通常遇到SRIO错误,我们这里抛去硬件信号质量错误
(这种错误需要看眼图)。我们一般首先会看offset为0x158的SPn_ERR_STAT寄存器。
比特位域如下表所示,这个寄存器可以分为3个部分来看,一是port状态,二是输出和输出
的stop error,三是重传的stop error。我们下面分三部分重点说明各个状态是什么意义。
Bit Name Description
输入和输出端口未初始化,bit0和bit1是互斥的,在同一
时刻有且只有1个bit为1 (硬件自动设置和清除)
输入和输出端口已经被初始化完成,且双方互相发送
error-free控制符号(硬件自动设置和清除)
0 Port_Uninitialized
1 Port_Ok
2 Port_Error
输入或者输出端口遇到一个硬件无法恢复的错误,主要是
指link-response未收到或者收到错误response
端口要求发起一个port-write的维护操作告知对端错误状
4 Port_Write_Pnd
态。Port-write的接收方式是预先定义好的,当出现端口
错误的时候就会往该方发送port-write的维护报文
Input_Error_STP
输入端口检测到一个传输错误(硬件自动设置和清除)
输入端口曾经检测到一个传输错误,随着bit8的置位而置
位,写1可清除
8
9 Input_Error_ENC
10
16
Input_Retry_STP
输入端口进入重传停止状态
Output_Error_STP
输出端口检测到一个传输错误(硬件自动设置和清除)
输出端口曾经检测到一个传输错误,随着bit16的置位而
置位,写1可清除
17 Output_Error_ENC
18
19
Output_Retry_STP
输出端口进入重传停止状态(硬件自动设置和清除)
Output_Retried
输出端口重传标志,随着bit18设置而置位,写1可清除
20 Output_Retry_Enc
输出口曾经处于输出重传状态
24 Output_Degrd_Enc
输出端口的degraded错误数达到或者超过门限值
25
26
Output_Fail_Enc
输出端口的Failed错误数达到或者超过门限值
Output_Pkt_Drop
输出端口丢弃一个包(只对Switch设备)
Port uninitialized and Port Ok
端口未初始化和端口OK是一组状态,端口状态只能是未初始化或者OK。通常在刚开始的时
候端口状态时未初始化的,需要用户进行初始化配置才能变成端口OK状态。端口的初始化配
置主要是端口的接收时钟窗对齐以及端口宽度的确认过程;大部分情况端口宽度通常是固定配
置的,只有接收时钟窗需要调整。
接收时钟窗调整的过程是,两个连接的设备都互相向对方不停的发送training control
symbol和link-request control symbol。成功收到并检测出control symbol的端口会回
复一个idle control symbol,收到idle control symbol的端口会清除port uninitialized
状态转为port ok状态。
Input and Output Error Stop
输入和输出停止错误是成双成对存在的
错误发生场景:
设备A给设备B发送报文
设备B发现接收到的idle控制符号或者报文错误,那么设备B进入input error stop状态
(该bit置1,同时input error encounter也置位)。
设备B发送PNA(packet-not-accpet)控制符号给设备A
设备A收到PNA后停止发送任何消息,备份当前发送失败的消息并进入output error stop
状态(该bit置1,同时output error encounter也置位)。
错误恢复场景:
前提:设备A处于output error stop,设备B处于input error stop
设备A发送link-request给设备B
设备B回应link-response给设备A,并清除input error stop状态
设备A收到link-response,清除output error stop状态。
设备A继续发送上次未成功报文或者发送优先级更高的报文
Input and Output Retry Stop
输入和输出重传错误是成双成对存在的
错误发生场景:
设备A给设备B发送报文
设备B发现一些临时问题导致不能接收报文(比如没有空闲buffer可以接收),那么设备B
丢弃该报文,进入input retry stop状态(该bit置1,同时input retry encounter也置
位)。
设备B发送PR(packet-retry)控制符号给设备A
设备A收到PR后停止发送任何消息,备份当前发送失败的消息并进入output retry stop状
态(该bit置1,同时output retry encounter也置位)。
错误恢复场景:
前提:设备A处于output retry stop,设备B处于input retry stop
设备A发送restart-from-retry给设备B
设备B收到restart-from-retry后,清除input error stop状态并开始接收报文
设备A清除output retry stop状态,继续发送上次未成功报文或者发送优先级更高的报文
需要指出的是,这个寄存器是SRIO错误状态判断的最基本的寄存器,还有更高级的东东,可
惜我也是一知半解,下次学习了再分享吧!
版权声明:本文标题:srio调试过程和错误的基本判决 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1714229354a670743.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论