zoukankan      html  css  js  c++  java
  • MII接口及应用

    MII,media independent interface,媒体独立接口。它的一头是二层芯片,另一头是一层芯片。也就是一头是是数据源或者说是控制器,另一头是与介质相关的Tranceiver。

    MII有很多简化版本和Extent版本,如GMII,RGMII,RMII,SMII,SSMII,TBI,RTBI等。

     

    1、信号线定义

    MII一共有16根线:

    Tx_CLK/Rx_CLK分别是Tx和Rx的时钟信号。他们都是由PHY驱动的。

    TxD[0...3]/RxD[0...3]:分别是Tx和Rx的数据传输线。TxD是控制器驱动,RxD是PHY驱动。

    Tx_EN/RX_DV:分别是Tx和Rx的开关。这两根线都是PHY驱动。(事实上,虽然很多文档都讲Tx_EN是PHY驱动的;但在实现时,Tx_EN是由控制器来设定的,也就是控制器驱动的)。只有在Tx_EN有效时,TxD才会被PHY接收;只有在Rx_DV有效时,RxD才会被控制器接收。
    Tx_ER/Rx_ER:分别是Tx和Rx的报错线。这两根线都是PHY驱动。即使是在Tx_EN或Rx_DV期间,只要此两根线有效,则出错的那个周期所传数据无效。10Mb以太网传输时,ER信号不影响正常传输,若不使用ER线,需将其接地。

    CRS/COL:监听介质是否空闲/监听是否有冲突发生。这两根线都是由PHY驱动,并且只在半双工模式下有效。

     

    另外需加上,MII接口的Management Interface:MDCMDIO。通过它,控制芯片可以访问PHY的寄存器(前面100M物理层芯片中介绍的寄存器组,但不仅限于100M物理层芯片,10M物理层芯片也可以拥有这些寄存器),并通过这些寄存器来对物理层芯片进行控制和管理。

    MDC:管理接口的时钟。它是由控制器驱动,与TX_CLK和RX_CLK无任何关系。

    MDIO:用来传送MAC层的控制信息和物理层的状态信息。它是一根双向的数据线。因MDIO在某个时钟周期内会空闲,呈高阻状态,故使用时须将其上拉。

     

    加上这两根线,一共有18根线。事实上,一个控制器,可以通过Management Interface来管理32个PHY。即,MDC和MDIO是可以复用的。

     

    2、详解MDC、MDIO(再次编辑是一年半之后了,汗一个。。。)

     

    之前一直困惑switch芯片是怎么挂到router上去的, 把MDC和MDIO可以接32个PHY这个事实给忽略了。正好这次调试PHY,所以找了个GPIO驱动MDC,MDIO的驱动来搞搞清楚它到底怎么工作的。

    介绍这个驱动的原文在这里: /Files/pied/一个用GPIO口模拟MDC_MDIO的驱动.pdf

    但是看过之后觉得不是自己想要的,又找来找去,最后找到802.3的协议书,还有lattice的应用文档《Accessing Control Registers through the MDIO bus》 ,ksz8021rnl的reference manul。综合一下,有下面收获:

    MAC主要是通过MDIO(以MDC为时钟)来读写PHY的寄存器,MDIO上数据帧的格式如下:

     

     数据开始前,会发32个1,然后数据开始时先发一个0,然后恢复到1;接下来两bit,10是读,01是写;紧接着的5位是PHY地址;下面5位是寄存器地址;接下来两位的话,我的理解是,如果是读,它用一个时钟的时间转到另一个方向(前面的命令式MAC->PHY,后面的data是PHY->MAC);接下来是16位的数据;空闲时线上为高阻。

    时序图就不贴了,根据器件不一样会有些差别。值得注意的是,当一个MAC挂多个PHY的时候,要留意因为fan-out,MDC和MDIO的输出被加到很大,802.3上写如果是32个PHY,MDC的负载电容会达到320pF,MDIO的会达到470pF。

    MDIO的帧格式介绍了,其实还没完,里面PHY add 和REG add不介绍下貌似过意不去。

    关于PHY Add, PHY不同,会有不同设置。AR8032是在RX[3...1]上的strapping,ksz8021rnl的地址取决于引脚PHYAD[1:0]上的strapping,int6400的工作在PHY模式下时地址为引脚MD_A[4:3] 上的strapping。

    而PHY register也有不同。下面是两个不同的PHY Register。

     

    这张来自802.3-2008_section2。

     

     ksz8021rnl的Register。

    linux下PHY的驱动在这里:“/drivers/net/phy/" ,里面有对不同厂商PHY的支持。

    内核文档PHY.txt里面这么描述:

    35     The MDIO bus 
    36     Most network devices are connected to a PHY by means of a management bus.
    37     Different devices use different busses (though some share common interfaces).
    38     In order to take advantage of the PAL, each bus interface needs to be
    39     registered as a distinct device.
    40    
    41     1) read and write functions must be implemented.  Their prototypes are:
    42    
    43         int write(struct mii_bus *bus, int mii_id, int regnum, u16 value);
    44         int read(struct mii_bus *bus, int mii_id, int regnum);
    45    
    46       mii_id is the address on the bus for the PHY, and regnum is the register
    47       number.  These functions are guaranteed not to be called from interrupt
    48       time, so it is safe for them to block, waiting for an interrupt to signal
    49       the operation is complete
    50     
    51     2) A reset function is necessary.  This is used to return the bus to an
    52       initialized state.
    53    
    54     3) A probe function is needed.  This function should set up anything the bus
    55       driver needs, setup the mii_bus structure, and register with the PAL using
    56       mdiobus_register.  Similarly, there's a remove function to undo all of
    57       that (use mdiobus_unregister).
    58     
    59     4) Like any driver, the device_driver structure must be configured, and init
    60       exit functions are used to register the driver.
    61    
    62     5) The bus must also be declared somewhere as a device, and registered.
    63    
    64     As an example for how one driver implemented an mdio bus driver, see
    65     drivers/net/ethernet/freescale/fsl_pq_mdio.c and an associated DTS file
    66     for one of the users. (e.g. "git grep fsl,.*-mdio arch/powerpc/boot/dts/")
    67    

    从/PHY目录下的kconfig和phy.txt文档来看,初步判断,里面没有罗列的PHY,内核是没有支持的;也有文档讲支持的,但是没有找到确切痕迹。

    ——————
    无论在哪里做什么,只要坚持服务、创新、创造价值,其他的东西自然都会来的。
  • 相关阅读:
    二进制文件分析工具-hexdump使用指南
    麦克风阵列技术-beaforming开源算法源码分析
    CMake的作用和价值--概念简介
    matlab load函数用法 实例
    SparkSQL(3.1.1)源码分析
    Spark SQL: Relational Data Processing in Spark (SIGMOD’15)
    论文解析 -- QuickSel: Quick Selectivity Learning with Mixture Models (SIGMOD’20)
    Is Query Optimization a “Solved” Problem? (2014, Guy Lohman)
    Adaptive Statistics in Oracle 12c(PVLDB 2017)
    论文解析 -- A Survey on Advancing the DBMS Query Optimizer: Cardinality Estimation, Cost Model, and Plan Enumeration (Data Science and Engineering 2021)
  • 原文地址:https://www.cnblogs.com/pied/p/1925566.html
Copyright © 2011-2022 走看看