【S044】1000BASE-X的AN自协商--C码/I码 和SGMII
之前对自协商没有了解,在代码中判定端口up只考虑了link信号,为考虑AN信号,导致插入光转电模块点灯异常。#mermaid-svg-fyXJp3KUV6mEX8KJ .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#merma
1 概述
浅谈Clause 73自协商中描述了三种自协商。
- Clause 28规范了使用双绞线作为传输介质的10/100/1000BASE-T(电)以太网的自协商功能。
- Clause 37规范了1000BASE-X (光)以太网的自协商。
- Clause 73规范了Backplane Ethernet以及40GBASE-CR4,100BASE-CR10以太网的自协商。
1000BASE-X 速率已经固定为1000M,不用协商。其中双工模式可协商。
曾遇到问题:在代码中判定端口up只考虑了link信号,没考虑AN信号,导致插入光转电模块点灯异常。
强制模式和自协商模式
本端配置为强制:本端发送I码,本端可识别C 码
本端配置为自协商:本端发送C码,本端可识别C 码,可识别连续3个C码后发送ACK给对端
下面介绍Clause 37 1000BASE-X相关内容:
2 编解码
什么是code-group?
单个的8B/10B编码之后的10bit数据。
有序集(ordered_set),C码是什么样?
ordered_set是:若干code-group数据组成的有序集。
C码就是0xBC 0xB5或者0xBC + 0x42
1/2/4个连续code-groups,没有3个的。
什么是comma+?
comma+:0011111
comma-:1100000
在/I/和/C/的传输期间,协议规定,来保证comma+的发送频率>=comma-的发送频率。
对于28.5来说,就是要初始极性是负的,然后会发送含comma+的28.5。
这样做是为了确保与通用组件的兼容性。
只有3个code-group包含comma,分别是/K28.1/(0x3C)、/K28.5/(0xBC)和 /K28.7/(0xFC)。
在没有传错的情况下,comma不可以出现在其他的code-group中。
comma不可以由两个相邻的code-group的首尾一部分组成,也就是只能在一个code-group内,不能跨边界组合成comma。
有一些例外:
/K28.7/用于诊断的目的。+ 110000 0111
/K28.x/, /D3.x/, /D11.x/,/D12.x/, /D19.x/, /D20.x/, or /D28.x/
/K28.7/ [7:0]+ /D3.1/ [7:0]=110000 0111 + 110001 + 1001 +
可以看出comma+出现在[4:0]+[7:6],出现了跨越单个code-group边界,并且组合成了comma的情况。
为什么有两种/C1/和/C2/?
保证在配置期间发送的所有k28.5都含有comma+。
/C1/ BC B5
+110000 - 0101 - 101010 - 1010 -
-001111 + 1010 + 101010 + 1010 +
/C2/ BC 42
+110000 - 0101 - 101101 + 0101 +
-001111 + 1010 + 010010 - 0101 -
从上面的10B编码极性推导结果可以得出结论:
a)发完/C1/:0xBC + 0xB5之后极性会翻转。
b)发完/C2/:0xBC + 0x42之后极性不会变。
对于不变的Config_Reg值,发完/C1/ + /C2/后的极性与开始时的极性相反。
为什么不受Config_Reg内容的影响?
因为Config_Reg的值发2次之后要么2次都反,要么两次都不变,最终都是不变,故线路的极性取决于/C1/ + /C2/。
这样保证在配置期间发送的所有k28.5都含有comma+,也就是发完之后的极性是负的。
/C1/和/C2/会一直交替发送?还是只要极性调整为负的就不发/C1/?
暂不知晓
可能是依据Config_Reg的值来计算的极性。
为什么有/I1/和/I2/两种?和应用场景
/I1/:发完极性翻转
/I2/:发完极性不变
协议规定:
一个包、/C1/或者/C2/之后的首个/I/码,需要让线路极性回到负极性,故需要两种/I/码。
在数据流中添加或者减少一个/I2/并不会影响线路极性,这样就方便实现CTC功能。
/S/包头0xFB
0xFB+/I/单个包传输
0xFB+0xF7连续发包
/T/包尾0xFD
有两种结尾的可能
a) /T/R/R/ = 0xFB+0xF7+0xF7
b) /T/R/K28.5/.= 0xFB+0xF7+k28.5
何时选用 /T/R/R/结尾?
协议规定:k28.5要放在偶数位置,通过是否新增一个/R/来调节。
/R/载波扩展0xF7
a)用于扩展载波事件,发完/T/R/后,才开始发送/R/,所以会延时2个字节时间。
b)用于报文与报文的分隔
c)END2:用于/T/的第1个/R/
d)END3:用于/T/的第2个/R/
/V/错误传播0xFE
/V/用来告诉对端,产生了传输错误。
3 自协商
自协商有基页(base page)和下一页(Next page),都是通过/C/传送的。本文不关注下一页的内容,只关注基页的内容。
Base Page是什么格式?
rsvd用0填充;
16‘b0000_0xxx_x000_xxxx完整
忽略RF和PS和NP
16‘b0000_0xx0_0000_00x0
就4种情况:
16’h04_00:全双工&no-ack
16’h02_00:半双工&no-ack
16’h04_02:全双工&ack
16’h02_02:半双工&ack
PAUSE(PS1\PS2)暂停是怎么用的?
{PS1,PS2} | 含义 |
---|---|
2’b00 | 无暂停 |
2’b01 | 向链路伙伴不对称暂停 |
2’b10 | 对称暂停 |
2’b11 | 向本地设备既不对称暂停又对称暂停 |
Annex 31B.细说对称暂停
Annex 31B.细说非对称暂停
远端错误RF1/RF2的含义
ACK的含义是什么?
1:本端已经成功接收连续3帧且匹配的rx_Config_RegD15:D0值(对端发来的base page或者next page)。
基页只有双工模式的协商,速率的协商呢?
1000BASE-X只协商双工模式,不用协商速率。
成功3次收到config_reg[15:0],后置高ack
NP=1,请求next page 信息被发送
Serial-GMII Specification
sgmii如何协商速率?
sgmii发送的基页和1000BASE-X不同,如下:
自协商过程
cause 28规范了使用双绞线作为传输介质的以太网的自协商功能 (中文翻译)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)