以太网学习–DAY3
1 以太网带宽
带宽概念:带宽指的是1s内处理的bit数量,强调的是最大能达到的速率。 单位是Mbit/s Gbit/s (Mbps/Gbps),比如百兆以太网的带宽是100Mbps。
公式为:带宽=速率帧长度=帧总数 * 帧长度=14881 * 672=10 000 032 b= 10M。
- 10M的速率的帧总数为:14881–>(10^7bps*672b)
- 以64B的帧长度为:672b -->*{(64B+20B(8前导符+12帧间隙))8}bit
- 附:Mbps和MB/s啥关系?
MB/s的含义是兆字节每秒,Mbit/s的含义是兆比特每秒即Mbps(b=bit,p=per),前者是指每秒传输的字节数量,后者是指每秒传输的比特位数- 其他换算
1、10M=10^7bps,
2、64Byte+20(8前导符+12帧间隙)=84Byte=672b,即一个64B的帧,加上帧间隙后为672b。(1byte =8bit);同理,128B+20B=148B=1184b,一个128Byte的帧,加上帧间隙后为1184b。
参考:https://blog.csdn.net/weixin_44081384/article/details/126712578?app_version=5.12.1&csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22126712578%22%2C%22source%22%3A%22weixin_39658172%22%7D&utm_source=app
2 iperf使用方法
先开启iperf3 -s -p 9527
然后在板子上输入:
iperf2 -c 172.20.0.39 -p 9527 -t 10 -i 1 -b950M
-c, --client run in client mode, connecting to
-p, --port # server port to listen on/connect to
-t, --time # time in seconds to transmit for (default 10 secs)
-i, --interval # seconds between periodic bandwidth reports
这里由于phy在配置文件里限制了force_100Mbps=1,限制为了百兆,须改成零,然后在在重新测速的过程中由于线连接经常断和以太网小盒子设置的不对(没有播到1000M)出现了丢包的现象使得测速一直不对,后来整好了,发现现在的速度限制在了330Mbps左右如下:
3 RGMII寄存器
3.1 RGMII应用框图
各信号功能介绍:
下面对于可能影响带宽的RGMII寄存器进行调查
3.1 RGMII输出阻抗控制寄存器
Device 31, Register 0x8000
BITS | FIELD | DESCRIPTION |
---|---|---|
3 | calibration ODR enable | 使用片上电阻进行校准,1为使能 |
2:0 | calibration ODR | 片上电阻值,78.8Ω、64.5Ω、54.6Ω、47.3Ω…30.9Ω |
片上电阻可以调整波形,使得眼图更好,从而可能影响带宽
修改验证:在初始化 phy 1000M时对此寄存器进行其他电阻配置验证带宽是否改变,datasheet有介绍phy自校准电路默认使用47.3Ω
emac_mdio_mmd_register_read_indirect(pdata, pdata->phy_addr, 31, 0x8000, ®_odr);
emac_mdio_mmd_register_write_indirect(pdata, pdata->phy_addr, 31, 0x8000, reg_odr & 0xFFF8);
除了自校准之外还有手动校准,手动校准可以调节NMOS和PMOS的输出强度,以达到完全匹配传输线阻抗并完全消除反射。
3.2 RGMII传输时序控制寄存器
Device 31, Register 0x8001
BITS | FIELD | DESCRIPTION |
---|---|---|
15 | RGMII Transmit Timing Control | RGMII发送时序控制,传输时钟内部延时控制,1为开启 |
14 | RGMII Receive Timing Control | RGMII接收时序控制,接收时钟内部延时控制,1为开启 |
RGMII接口的PHY一般支持两种传输模式,正常模式和延时模式,两种模式的区别在于时钟、控制信号和数据对齐方式不同,那为啥要进行延时?
正常情况下TXD/RXD信号线在时钟上升沿发送接收GMII接口中的TXD[3:0]/RXD[3:0],在时钟下降沿发送接收TXD[7:4]/RXD[7:4],并且信号TX_CTL反应了TX_EN和TX_ER状态,即在TXC上升沿发送TX_EN,下降沿发送TX_ER,同样的道理试用于RX_CTL,
理想情况时钟的上升沿或者下降沿对准数据电平的正中间, 但是因为各种原因, 信号线与时钟线之间会存在Delay例如:
- 发送端的TXD和TXC之间的Delay
- PCB走线引起的TXD和TXC的Delay
- 接收端的TXD和TXC之间的Delay
所以对于TXD和TXC, 有可能TXC的上升沿和下降沿不能对准TXD的正中间, 而是在TXD数据切换的时间, 这样就会导致读取的bit不准确, 但凡一个bit错误就会导致通信的不正常. 而用户需要做的, 就是控制TXD和TXC之间的时序, 使其满足到达接收端的时候, TXC的上升沿和下降沿对准TXD的数据正中间.
这也就是开启内部延时的作用
但是本地链接一致有问题断断续续还需研究
phy寄存器介绍参考:
https://blog.csdn.net/subfate/article/details/44958597
https://blog.csdn.net/u014470361/article/details/84727327