生活资讯
mdio 、mdio手表是什么牌的
2023-04-10 01:55  浏览:33

DSP的网络MDIO接口怎么用?

现在你会用了吗,想请教你呢,能不能把你对这个东东用的感受写出来呢? 查看原帖

MDIO接口

1. MDIO接口

SMI:串行管理接口(Serial Management Interface),也被称作MII管理接口(MII Management Interface),包括MDC和MDIO两条信号线。MDIO是一个PHY的管理接口,用来读/写PHY的寄存器,以控制PHY的行为或获取PHY的状态,MDC为MDIO提供时钟。

MDIO原本是为MII总线接口定义的,MII用于连接MAC和PHY,包含两种信号接口:

1. 一个数据接口用于MAC和PHY之间接收和发送以太网帧数据。

2. 一个PHY管理接口,即MDIO,用于读写每个PHY的控制寄存器和状态寄存器,以达到控制PHY行为和监控PHY状态的目的。

MDIO是双向的,只支持 一个 MAC连接 最多32个 PHY的连接方式,且MAC作为master,PHY作为slave。在写PHY寄存器的时候,由MAC驱动MDIO向PHY写入数据;在读PHY寄存器时,前半段由MAC驱动发送寄存器地址,后半段由PHY驱动回复寄存器的值。

MDC要求由MAC输出,是非周期性的,即不要求提供固定频率的时钟,对于PHY芯片则作为输入,以在 上升沿 触发MDIO的读写。MDC的时钟频率可以是DC-2.5MHz,即最小的时钟周期为400ns。

2. MDIO数据传输协议

MDIO数据格式定义在IEEE 802.3以太网标准中,如下图所示(数据传输顺序为从左至右):

 Preamble

(32bits)

Start

(2bits)

OP Code

(2bits)

PHYAD

(5bits)

REGAD

(5bits)

Turn Around

(2bits)

Data

(16bits)

Idle

Read1.......10110A4A3A2A1A0R4R3R2R1R0Z0D15.......D0Z*

Write1.......10101A4A3A2A1A0R4R3R2R1R010D15.......D0Z*

上图中*表示高阻态,这时MDIO的状态由一个外部的1.5KΩ电阻决定。

Preamble+Start :32bits的前导码以及2bit的开始位。

OP Code :2bits的操作码,10表示读,01表示写。

PHYAD :5bits的PHY地址,一般PHY地址从0开始顺序编号,例如6口switch中PHY地址为0-5。

REGAD :5bits的寄存器地址,即要读或写的寄存器。

Turn Around :2bits的TA,在读命令中,MDIO在此时由MAC驱动改为PHY驱动,并等待一个时钟周期准备发送数据。在写命令中,不需要MDIO方向发生变化,则只是等待两个时钟周期准备写入数据。

Data :16bits数据,在读命令中,PHY芯片将读到的对应PHYAD的REGAD寄存器的数据写到Data中,在写命令中,MAC将要写入对应PHYAD的REGAD寄存器的值写入Data中。

Idle :空闲状态,此时MDIO无源驱动,处高阻状态,但一般用上拉电阻使其处在高电平。

需要注意的是,为了保证PHY能准确采样,当MAC向MDIO写数据的时候,需要在MDC的上升沿之前就把数据写到MDIO上,要求等待10ns以上再发出一个MDC的上升沿。而为了保证MAC能准确采样,当PHY向MDIO写数据时,这个clock-to-data的del***时间范围可以是0-300ns(小于上面提到的400ns)。这个规定使接口的实现变得简单,但一定程度上限制了总线带宽。

IEEE 802.3还定义了扩展的SMI数据格式,包括read,write以及set address和readincrement,不过我们在此不做讨论。

PHY和MAC芯片通常都内置MDIO读写的实现,我们只需要按照硬件手册布线,按照软件手册来操作MDIO的读写即可,一般不需要自己实现MDIO的读写操作。

下面以获取和设置某个PHY的速率和双工模式为例,我们来看一下实际MDIO的波形。Register 0是PHYControl寄存器,可以设置PHY的速率和双工模式。

MDC的波形如下:

我在抓波形的时候没有将MDC和MDIO一起抓,所以看不出两者的关系,抱歉~

1. 读取PHY6的register 0:

上面中MDIO上的数据为:

T表示Turn Around,可以看到在读数据的时候发生了两次TA:一次在MAC发送完REGAD后开始接收PHY的data之前,MDIO由MAC驱动改为PHY驱动;一次在PHY发送完data后,MDIO重新改为MAC驱动的时候。

2. 将PHY5设置为强制10M全双工,设置PHY5的register 0为0x0100:

上图中MDIO上的数据为:

写的时候一直都是MAC驱动MDIO,因此不存在MDIO源的改变。

3. 尝试用GPIO模拟MDC/MDIO

在某些芯片上可能没有提供MDC/MDIO接口,可以通过GPIO(General Purpose Input/Output)来模拟,GPIO可实现串行输入输出,且一般CPU上会提供很多GPIO接口供用户自定义使用。

每组SMI需要两个GPIO口分别来模拟MDC和MDIO,首先需要保证这两个GPIO口不作其他用途,且相应的复用模式设置为GPIO模式。

模拟MDC很简单,就是将相应GPIO设置为输出模式(由MAC提供时钟),在MDIO上发送和读取数据时提供时钟即可,对时钟频率没有太严格的要求,在前面已做了说明。具体来说,向GPIO写0即为低电平,向GPIO写1即为高电平,电平持续时间可通过usleep等待或执行数条空指令来实现。

模拟MDIO就是实现一套read/write时序,也通过向GPIO写0或写1实现,实现TA则为改变GPIO的输入/输出模式,而read的后半段即为从GPIO上读数据。

需要用到的GPIO寄存器为GPIO_DIR,GPIO_DATA和GPIO_IE:

GPIO_DIR :用于配置GPIO的方向为输入或输出,当GPIO为输入时,MAC可读取GPIO上的数据,当GPIO为输出时,MAC可向GPIO上写数据。

GPIO_DATA :当GPIO为输入时,GPIO_DATA即为GPIO上的数据,当GPIO为输出时,向GPIO_DATA写数据即写到了GPIO上。

GPIO_IE :GPIO作为输入时可作为中断源,在用GPIO模拟SMI时,要关闭相应GPIO线的中断。

这三个寄存器的详细用法要参考相应芯片的datasheet。

对于GPIO模拟SMI的具体软件实现,这里不再介绍,有了上述基础知识,应该很容易实现。 对于Linux系统,内核中提供了一个mdio-bitbang.c,里面实现了一套软件实现的MDIO/MDC接口时序可供参考。

车载以太网(上)

车载以太网的出现背景楼主就不多做赘述了,其实主要是因汽车E/E架构和功能的复杂度提升而带来的对车辆数据传输带宽提高和通讯方式改变(基于服务的通讯-SOA)的需求。

就目前汽车总线的应用情况,成本低、可靠性高、应用普遍的有Lin、CAN通讯,CAN FD也是最近几年才逐渐得到应用,而FlexR***、车载Ethernet等基于成本因素,目前主要在高端车型中使用。

其中楼主之前介绍的FlexR***后续得到普遍应用的可能性楼主认为不是很大,首先成本方面与车载以太网差不多而通讯速率又远低于它,而伴随着未来智能化、网联化的趋势,车载Ethernet在未来得到推广的可能性要比FlexR***高很多。需要注意的是CAN FD在市场推广实施还没有几年,第三代CAN总线-CAN XL也即将登场,CAN XL传输速率将达到10Mbit/s,可填补CAN FD和百兆车载以太网(100base-T1)之间的鸿沟,从这点也可以看出车载通讯的快速发展及对通讯带宽的越来越高的要求,同时也可从另一方面说明FlexR***的尴尬。当然所有总线的应用都是分所在的域和场景的,例如对于安全要求很高的场合,采用了基于时间触发机制的FlexR***因实时性和确定性更高则更合适。

在车载网络方面,玩家是很多的,也推出了各自的标准,如下:

其中OPEN Alliance和电气与电子工程师协会(IEEE)制定的标准是车载以太网领域比重***和应用最广泛的,例如我们熟知的100base-T1和1000base-T1。

自1980年以来,IEEE一直负责以太网的维护、开发和标准化。尽管各个公司都可提供专有的以太网解决方案,但大多数时候公司都会交给IEEE进行标准化以确保更广泛的应用。802工作组则专门负责以太网,因此,所有与以太网相关的标准都以802开头(例如,IEEE 802.1,IEEE 802.2,IEEE 802.3等)。

OPEN Alliance SIG是由汽车制造商和供应商组成的联盟,目的是促进以太网在汽车工业中的进一步发展。OPEN Alliance SIG与IEEE合作,将汽车以太网转换为通用标准。就目前的车载以太网标准方面,主流标准的是如下几个,目前主要是第二个100base-T1:用单对双绞线实现100Mbit/s的数据传输,走的靠前的OEM则使用更快的千兆以太网。

OSI七层网络模型(OSI=Open Systems Interconnection)是互联网发展过程中一个很重要的模型。OSI是一个开放性的通信系统互连参考模型,其含义就是建议所有公司使用这个规范来控制网络。只有统一通信规范时,才能实现真正的互联化。OSI 七层模型及通信互联的传输过程,如下图所示:

OSI 七层网络模型是一个理想的网络参考模型, TCP/IP模型 是已经被实际广泛应用于因特网的网络分层模型。 TCP/IP 模型没有对 OSI 的 5~7 层做严格区分,统称为应用层 。

车载以太网是基于 TCP/IP 的网络分层模型 ,并由 OPEN 和 AUTOSAR 等联盟对以太网相关协议进行了规范和补充。

以太网的网络拓扑结构有点对点形式、类似于CAN或LIN的总线形式、链式和星型等形式:

也有由上面几种形式的组合形式:

当然现在多个节点的车载以太网的互联互通需要交换机Switch, Switch的作用 如下:

从硬件的角度看,以太网接口电路主要由 MAC(Media Access Control)控制器和物理层接口PHY(Physical L***er,PHY) 两大部分构成,如下图所示:

MAC及PHY工作在OSI七层模型的数据链路层和物理层, 如下

PHY和MAC之间是如何传送数据和相互沟通的呢?MAC与PHY之间通过两个接口连接,分别为SMI接口和MII接口。

MII(Media Independent Interface)即媒体独立接口,MII接口是MAC与PHY连接的标准接口,以太网MAC通过该接口发出数据帧经过PHY后传输到其他网络节点上,同时其他网络节点的数据先经过PHY后再由MAC接收。MII是IEEE-802.3定义的以太网行业标准,MII接口提供了MAC与PHY之间、PHY与STA(Station Management)之间的互联技术,该接口支持10Mb/s与100Mb/s的数据传输速率,数据传输的位宽为4位。 "媒体独立"表明在不对MAC硬件重新设计或替换的情况下,任何类型的PHY设备都可以正常工作 。802.3协议最多支持32个PHY,但有一定的限制:要符合协议要求的connector特性。

SMI叫串行管理接口,以太网MAC通过该接口可以访问PHY的寄存器,通过对这些寄存器操作可对PHY进行控制和管理。SMI接口包括MDIO(控制和管理PHY以获取PHY的状态)和MDC(为MDIO提供时钟)。MDC由MAC提供,MDIO是一根双向的数据线。用来传送MAC层的控制信息和物理层的状态信息。MDIO数据与MDC时钟同步,在MDC上升沿有效。

由此可见,MAC 和PHY,一个是数据链路层,一个是物理层;两者通过MII传送数据。 因此 Ethernet的接口实质是MAC通过MII总线控制PHY的过程 。

MII接口后续又衍生了很多其他版本,如RMII、GMII、SGMII、RGMII等。这里简要介绍其中的MII和RMII,如下图所示。 MII共使用了16根线。其中CRS与COL只在半双工模式有效,而车载以太网固定工作在全双工模式下,故应用在汽车环境需要14根线 。

RMII是精简版的MII,数据发送接收均为两根,相比MII减少了4根,另外它整合或减去了一些线,最终RMII只有8根线RMII的接口如下:

在实际的设计中,以上三部分并不一定独立分开的。由于,PHY整合了大量模拟硬件,而MAC是典型的全数字器件。考虑到芯片面积及模拟/数字混合架构的原因,通常, 将MAC集成进微控制器而将PHY留在片外 。更灵活、密度更高的芯片技术已经可以实现MAC和PHY的单芯片整合,可分为下列几种类型:

CPU集成MAC与PHY,目前来说并不多见:

CPU集成MAC,PHY采用独立芯片,这种在车载以太网上是主流方式,因嵌入式芯片厂商一般都将MAC集成在MCU内部,而PHY芯片则由OEM或控制器供应商自己选择:

CPU不集成MAC与PHY,MAC与PHY采用集成芯片。这种在消费用以太网上比较比较常见,如电脑的网卡有这种方式的。

在以太网连接线束上,车载以太网与消费用以太网也是不同的,首先消费用以太网的标准主要采用10base-2、10/100base-TX和1000base-T,其中 1000base-T是使用RJ45接口,需要四对双绞线共8根线 进行数据传输,而 10/100base-TX则是只使用四对双绞线其中的两对共4根线 进行数据传输,如下是100base-TX的示意图(使用了两对双绞线)。

在很早之前的10base-2则是同轴电缆进行数据传输,因此消费类以太网采用线束总结如下:

而 车载以太网一般都基本采用带T1的标准 ,如IEEE 100base-T1(以前称为OABR)、IEEE 1000base-T1,这些都使用 一对双绞线共两根线 进行数据传输:

其次在编码方式上, 1000base-T主要采用PAM5 的编码方式:

而 车载以太网100base-T1和1000base-T1主要采用PAM3 的编码方式。

从上面可知,车载以太网主要采用基于一对双绞线进行数据传输的100base-T1或1000base-T1标准,而我们电脑则使用RJ45接口采用基于4对双绞线进行数据传输的1000base-TX标准,因此当我们用电脑测量控制器以太网时,有时需要转换器,如下:

参考文献:

1、Ethernet introduction(BOSCH、Tektronix、Vector、CSDN等资料)

如何通过MDIO接口访问外部的PHY?

最后修改: 2012 年9 月11 日产品类别: IP产品领域: 通讯,接口及外设产品子领域: IP 规格及协议软件: Quartus II PC器件系列: ARRIA II GX标题说明嵌入式外设用户手册(Embedded Peripheral IP User Guide)13-5页13-3表中,对MDIO核的寄存器描述有一个错误。该表指出MDIO_DEVAD,MDIO_PRTAD和MDIO_REGAD的地址偏移量为0x20,而 MDIO_ACCESS的地址偏移量为0x21。实际上,这两个地址偏移量值应该正好相反,前者为0x21,后者为0x20。注意:寄存器地址偏移量0x20和0x21等指的是字(word)地址,相应的字节(byte)地址应分别为0x80和0x84。写操作通过MDIO接口写外部PHY的过程如下:1. 执行一个Avalon�0�3-MM 主设备到MDIO核的写操作,地址偏移量为0x21,指定要访问的外部PHY设备地址(MDIO_DEVAD),端口地址(MDIO_PRTAD)和寄存器地址(MDIO_REGAD)。.一旦数据被写进MDIO_ACCESS寄存器,MDIO核开始生成MDIO写操作帧(MDIO WRITE frame),该帧包含MDIO偏移量0x20和0x21处的寄存器内容。该帧随即被发送给目标PHY,发送地址在MDIO_REGAD 中指定(即MDIO偏移量为0x20的寄存器内容的[31:16]比特位). 读操作通过MDIO接口读外部PHY的过程如下:1. 执行一个Avalon�0�3-MM 主设备到MDIO核的写操作,地址偏移量为0x21,指定要访问的外部PHY设备地址(MDIO_DEVAD),端口地址(MDIO_PRTAD)和寄存器地址(MDIO_REGAD)。.当发起一个对MDIO_ACCESS寄存器的读操作时,MDIO核开始生成MDIO读操作帧(MDIO READ frame),该帧包含MDIO偏移量0x21处的寄存器内容。作为应答,外部PHY将被读的寄存器值送回MDIO核,该值被MDIO核写入偏移量0x20的MDIO_ACCESS寄存器。上面的描述对MegaWizard�0�3流程和SOPC Builder流程都是适用的。

mdio的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于mdio手表是什么牌的、mdio的信息别忘了在本站进行查找喔。

发表评论
0评