Chinaunix首页 | 论坛 | 博客
  • 博客访问: 305224
  • 博文数量: 66
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 509
  • 用 户 组: 普通用户
  • 注册时间: 2015-04-29 13:56
文章分类
文章存档

2018年(2)

2017年(6)

2016年(34)

2015年(24)

我的朋友

分类: 嵌入式

2016-04-25 13:50:11


前言:
以太网拥有自协商能力,但是经常出现这样的问题:当一端打开自协商,另一端关闭自协商的情况下,协商结果和我们期望的不同。
例如:连接好的A、B两个端口。当A端口打开自协商,B端口关闭自协商且配置为100M全双工时,在A口得到的协商结果是100M半双工。而我们一般希望A口也协商成B端口的最大能力,即100M全双工。
所以配置的时候要不两端把自动协商都打开,或者把自动协商都关闭


另外,PHY的芯片的基本的寄存器都是标准的,见过的所有PHY芯片的寄存器都差不多。
控制寄存器里面有几个位比较重要,一个是设置duplex和speed的三位,这三个bit是当自动协商禁止时
配置速度和双工模式的。另外两个bit是自动协商使能和强制自动协商重启,这两个bit是让PHY去做自动协商,
如果这两个比特设置了,那么前面说的三个bit配了也没用。
对于1000-BaseT,自动协商是必须的。那么如果允许自动协商和duplex&speed都要配怎么办,也就是说如果配置1000M FULL的时候,自动协商还是得配置,但是自动协商配置完了以后,比如对端是100M FULL,那么这个时候本机就会变成100M Half,而不是link down,这样是有问题的,配置速率不同link居然还没down。那么怎么办呢?这时候应该限制100M 10M的advertise和做自动协商,只做1000M的advertisement。


为什么会这样,要从自协商的工作机理说起。

自协商
自协商是通过一种叫做快速连接脉冲(Fast Link Pulse)的信号实现的,简称FLP。自协商的双方通过FLP来交换数据。

在具备自协商能力的端口没有Link的情况下,端口一直发送FLP,在FLP中包含着自己的连接能力信息,包括支持的速率能力、双工能力、流控能力等。这个连接能力是从自协商能力寄存器中得到的(Auto-Negotiation Advertisement Register ,PHY标准寄存器地址4 )。FLP中的编码方式如图。依靠脉冲位置编码携带数据。一个FLP突发包含33个脉冲位置。17个奇数位置脉冲为时钟脉冲,时钟脉冲总是存在的;16个偶数位置脉冲用来表示数据:此位置有脉冲表示1,此位置没有脉冲表示0。这样1个FP的突发就可以传输16bit的数据。自协商交互数据就这样通过物理线路被传输。

如果两端都支持自协商,则都会接收到对方的FLP,并且把FLP中的信息解码出来。得到对方的连接能力。并且把对端的自协商能力值记录在自协商对端能力寄存器中(Auto-Negotiation Link Partner Ability Register , PHY标准寄存器地址5 )。同时把状态寄存器(PHY标准寄存器地址1)的自协商完成bit(bit5)置成1。在自协商未完成的情况下,这个bit一直为0。
然后各自根据自己和对方的最大连接能力,选择最好的连接方式Link。比如,如果双方都即支持10M也支持100M,则速率按照100M连接;双方都即支持全双工也支持半双工,则按照全双工连接。
一定连接建立后,FLP就停止发送。直到链路中断,或者得到自协商Restart命令时,才会再次发送FLP。
并行检测
为了保证在对端不能支持自协商的情况下也能连接,引入了被称为并行检测(Parallel Detection)的机制。在一端打开自协商,另一端关闭自协商的情况下,连接的建立就依靠并行检测功能实现。
并行检测机制是这样的:在具有自协商能力的设备端口上,如果接收不到FLP,则检测是否有10M链路的特征信号或100M链路的特征信号。
如果设备是10M设备,不支持自协商,则在链路上发送普通连接脉冲(Normal Link Pulse)简称NLP。NLP仅仅表示设备在位,不包含其它的额外信息。NLP脉冲如图:(图3)

如果是100M设备,不支持自协商,则在没有数据的情况下,在链路上一直发送4B/5B编码的Idle符号。
并行检测机制如果检测到NLP,则知道对方支持10M速率;如果检测到4B/5B编码的Idle符号,则知道对方支持100M速率。但是对方是否支持全双工、是否支持流控帧这些信息是无法得到的。因此在这种情况下,认为对方只支持半双工,不支持全双工,且不支持流控帧。
基于以上原理,在对端不打开自协商时,打开自协商的一方只能协商成半双工模式。
802.3协议规定,通过并行检测建立连接后,PHY的状态寄存器(PHY标准寄存器地址1)的自协商完成bit(bit5)依然要置位成1,尽管链路上并非使用了真正的自协商操作。同时规定在自协商完成bit为1的情况下,本地自协商能力寄存器(PHY标准寄存器地址4)和对端自协商能力寄存器(PHY标准寄存器地址5)是有意义的。所以,要把寄存器5中的数据更新。如果建立的连接为10M,则寄存器5的10M能力bit(bit5)置1,其它bit置0,表示对端只能支持10M半双工;如果建立的连接为100M,则寄存器5的100M能力bit(bit7)置1,其它bit置0,表示对端只能支持100M半双工。
阅读(6762) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~