tag 标签: rmii

相关博文
  • 热度 22
    2014-3-24 21:55
    9708 次阅读|
    2 个评论
    最近设计的一个板子,使用STM32F407ZG+DP83848,使用RMII接口,时钟由外部50M有源晶振提供。下载了官方的FreeRTOS+LWIP范例,遇到一个非常奇怪的问题: 1)一开始,我把Ethernet初始化代码里PA8(MCO1)配置的几行代码注释掉了,因为我不用PA8。发现网口初始化失败,死在 while(ETH_GetSoftwareResetStatus()==SET) 。网上搜了一下,很多人讨论这个问题,说是时钟的问题。于是我去测量50M时钟,发现在执行完PA7(RMII_CLK)的配置语句后,该引脚上的50M时钟电平幅度降了一半!!于是我怀疑晶振有问题,准备去换晶振! 2)无意间,我把PA8的配置代码加上了(在配置PA7之前),见下面几行代码,发现一切正常了!我仅仅是配置了PA8作为复用而已,甚至都没有输出时钟!后来反复尝试,发现就是这几行代码,不加上就不行!! /* Configure MCO (PA8) */   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;   GPIO_Init(GPIOA, GPIO_InitStructure); 这太奇怪了,PA8在我的板子上完全没有用,跟系统一点关系都没有。网上很多人遇到同样问题,解决方法还不一样,有的说在软件复位后再使能MAC的时钟就可以了,可我试了,不是这个问题,就是要配置PA8才行!!! ------------------------------------------- 找到原因了,犯了一个很stupid的错误,就是把上面几行注释后, GPIO_InitStructure结构体相应的成员都没有赋值,因为后面的初始化代码只改变GPIO_Pin而已!
  • 热度 23
    2012-10-18 14:50
    6550 次阅读|
    2 个评论
    项目名称:基于FPGA的以太网MII数据和RMII数据的协议转换  关键词:以太网 MII RMII 协议转换   项目信息:   应用领域:网络与通信 设计摘要: IEEE802.3 百兆以太网标准中,存在25MHz时钟的MII接口和50MHz时钟的RMII 接口, 它们各自有自己的传输协议。在网络设备硬件设计时,特别是在存在多个以太网接口或具 有交换路由功能的网络设备设计时,根据芯片管脚的多少和系统功耗的要求,有时需将两 种接口相互转换。本项目基于以太网传输协议,提出利用FPGA作为转接芯片,根据两个接 口的特点编写程序,实现他们之间的数据传输协议相互转换,并通过实际的硬件电路检验 其正确性。 系统原理和技术特点:       1. MII接口与RMII接口介绍       1). MII接口 MII(Medium Independent Interface)是IEEE802.3规定的连接以太网MAC子层和物理层的标准接口,是一种介质无关接口,实现MAC层和物理层的数据通信。它包括一个数据接口,以及一个MAC和PHY之间的管理接口。数据接口包括分别用于发送器和接收器的两条独立信道,每条信道都有自己的数据、时钟和控制信号;管理接口用于网络状态监测,包括载波监听(CRS)和冲突检测(COL)。MII数据接口总共需要16个信号。        2). RMII接口 RMII(Reduced Medium Independent Interface)即简化的MII接口。较MII的16管脚,RMII的管脚数量缩减为7个或者6个。减少了10个管脚之多,这样就大幅度降低了功耗。        2. 项目实施方案        MII 接口和RMII的数据传输都各自有自己的协议,当相互转换时,存在25MHz时钟和50MHz时钟的时序处理   问题,存在着数据4位并行和2位并行的转换的问题,存在着数据有效位的处理问题。利用FPGA芯片可有效实现上述逻辑和时序的处理问题。       1).   方案的基本功能框图和管脚描述                         Ø         MII接口管脚: TX_CLK:发送时钟,由PHY提供一个参考时钟。 TX_EN:发送使能信号。 TXD :发送数据线。 TX_ER:发送错误信号。 RX_CLK:接收时钟,由PHY提供一个参考时钟。 RX_CLK:接收使能信号。 RXD :接收数据线。 RX_ER:接收错误信号。 CRS:载波侦听。 COL:冲突检测。   Ø         RMII接口管脚: REF_CLK:发送和接收同步时钟信号,是由外部的时钟源提供。 TX_EN:发送使能信号。 TXD :发送数据线。 CRS_DV:载波侦听/接收数据有效信号。 RXD :接收数据线。 RX_ER:接收错误信号。   Ø         SRAM的接口管脚 WE:写使能信号。 OE:读使能信号。 AD:地址总线。 DA:数据总线。     项目的初期开发首先要实现数据的传输转换,可以在FPGA内部构建两个FIFO模块,分别实现从MII到RMII的转换和从RMII到MII的数据转换,此时的缓存数据很小,仅使用FPGA内部的RAM;针对其各自的时钟,写数据有效和读数据有效分别对应时钟的上升沿和下降沿;针对有效位的不同,特别是RMII有效位失效时的震荡,采用有效位震荡计数的方式实现。项目后期的功能拓展,可基于以太网协议,针对具体的网络应用,例如PON网络,实现以太网帧头检测、控制帧检测、校验纠错、路由选择等功能。缓存较大时,可采用外置SRAM存储数据,针对SRAM的读写操作,需要进一步的开发工作。          2).   需要的开发平台        本方案用于解决MII与RMII以太网数据传输协议之间的转换,基本功能并不复杂,但是要求硬件平台能对网络部分提供丰富的资源,因此我们选择 NETFPFA作为硬件平台,因为其上存在着四个网络接口,可以进行网络协议的进一步开发和拓展功能。  
  • 热度 31
    2012-8-8 15:09
    1927 次阅读|
    0 个评论
    MII是Medium Independent Interface的缩写,中文意思是“介质独立接口”,该接口一般应用于以太网硬件平台的MAC层和PHY层之间,MII接口的类型有很多,常用的有MII、RMII、SMII、SSMII、SSSMII、GMII、RGMII、SGMII、TBI、RTBI、XGMII、XAUI、XLAUI等。本文只介绍百兆以太网的MII、RMII、SMII、SSMII、SSSMII五种接口,其它千兆、万兆以太网接口另行介绍。 MII接口(下图):     TXD :数据发送信号,共4根信号线; RXD :数据接收信号,共4根信号线; TX_ER(Transmit Error): 发送数据错误提示信号,同步于TX_CLK,高电平有效,表示TX_ER有效期内传输的数据无效。对于10Mbps速率下,TX_ER不起作用; RX_ER(Receive Error): 接收数据错误提示信号,同步于RX_CLK,高电平有效,表示RX_ER有效期内传输的数据无效。对于10Mbps速率下,RX_ER不起作用; TX_EN(Transmit Enable): 发送使能信号,只有在TX_EN有效期内传的数据才有效; RX_DV(Reveive Data Valid): 接收数据有效信号,作用类型于发送通道的TX_EN; TX_CLK:发送参考时钟,100Mbps速率下,时钟频率为25MHz,10Mbps速率下,时钟频率为2.5MHz。注意,TX_CLK时钟的方向是从PHY侧指向MAC侧的,因为此时钟是由PHY提供的。 RX_CLK:接收数据参考时钟,100Mbps速率下,时钟频率为25MHz,10Mbps速率下,时钟频率为2.5MHz。RX_CLK也是由PHY侧提供的。 CRS:Carrier Sense,载波侦测信号,不需要同步于参考时钟,只要有数据传输,CRS就有效,另外,CRS只在半双工模式下有效; COL:Collision Detectd,冲突检测信号,不需要同步于参考时钟,只在半双工模式下有效。 MII接口一共有16根线(TX_CLK, RX_CLK未记入)。 RMII接口(下图):     TXD :数据发送信号线,数据位宽为2,是MII接口的一半; RXD :数据接收信号线,数据位宽为2,是MII接口的一半; TX_EN(Transmit Enable):数据发送使能信号,与MII接口中的该信号线功能一样; RX_ER(Receive Error):数据接收错误提示信号,与MII接口中的该信号线功能一样; CLK_REF:是由外部时钟源提供的50MHz参考时钟,收发共用,与MII接口不同(MII接口中的接收时钟和发送时钟是分开的,而且都是由PHY芯片提供给MAC芯片的)。这里需要注意的是,由于数据接收时钟是由外部晶振提供而不是由载波信号提取,所以在PHY层芯片内的数据接收部分需要设计一个FIFO,用来协调两个不同的时钟。 CRS_DV:此信号是由MII接口中的RX_DV和CRS两个信号合并而成。当介质不空闲时,CRS_DV和RE_CLK相异步的方式给出。当CRS比RX_DV早结束时(即载波消失而队列中还有数据要传输时),就会出现CRS_DV在半位元组的边界25MHz/2.5MHz的频率在0、1之间的来回切换。因此,MAC能够从CRS_DV中精确的恢复出RX_DV和CRS。 在100Mbps速率时,TX/RX每个时钟周期采样一个数据;在10Mbps速率时,TX/RX每隔10个周期采样一个数据,因而TX/RX数据需要在数据线上保留10个周期,相当于一个数据发送10次。 当PHY层芯片收到有效的载波信号后,CRS_DV信号变为有效,此时如果FIFO中还没有数据,则它会发送出全0的数据给MAC,然后当FIFO中填入有效的数据帧,数据帧的开头是“101010---”交叉的前导码,当数据中出现“01”的比特时,代表正式数据传输开始,MAC芯片检测到这一变化,从而开始接收数据。 当外部载波信号消失后,CRS_DV会变为无效,但如果FIFO中还有数据要发送时,CRS_DV在下一周期又会变为有效,然后再无效再有效,知道FIFO中数据发送完为止。 SMII接口(下图):   SMII即Serial MII,串行MII的意思,跟RMII相比,信号线数据进一步减少到3根; TXD:发送数据信号,位宽为1; RXD:接收数据信号,位宽为1; SYNC:收发数据同步信号,每10个时钟周期置1次高电平,指示同步。 CLK_REF:所有端口共用的一个参考时钟,频率为125MHz,为什么100Mbps速率要用125MHz时钟?因为在每8位数据中会插入2位控制信号,请看下面介绍。 TXD/RXD以10比特为一组,以SYNC为高电平来指示一组数据的开始,在SYNC变高后的10个时钟周期内,TXD上依次输出的数据是:TXD 、TX_EN、TX_ER,控制信号的含义与MII接口中的相同;RXD上依次输出的数据是:RXD 、RX_DV、CRS,RXD 的含义与RX_DV有关,当RX_DV为有效时(高电平),RXD 上传输的是物理层接收的数据。   当速率为10Mbps时,每一组数据要重复10次,MAC/PHY芯片每10个周期采样一次。MAC/PHY芯片在接收到数据后会进行串/并转换。 SSMII接口(见下图):   SSMII即Serial Sync MII,叫串行同步接口,跟SMII接口很类似,只是收发使用独立的参考时钟和同步时钟,不再像SMII那样收发共用参考时钟和同步时钟,传输距离比SMII更远。 SSSMII接口(见下图):   SSSMII即Source Sync Serial MII,叫源同步串行MII接口,SSSMII与SSMII的区别在于参考时钟和同步时钟的方向,SSMII的TX/RX参考时钟和同步时钟都是由PHY芯片提供的,而SSSMII的TX参考时钟和同步时钟是由MAC芯片提供的,RX参考时钟和同步时钟是由PHY芯片提供的,所以顾名思义叫源同步串行。
相关资源
  • 所需E币: 2
    时间: 2023-3-13 14:12
    大小: 115.98KB
    上传者: 张红川
    RMII。。。。。。。。。。。。。。
  • 所需E币: 3
    时间: 2019-12-24 23:14
    大小: 256.09KB
    上传者: 2iot
    此代码示例演示如何通过对LPC1700系列软件模拟一个以太网MII管理(MDIO)。AN10859LPC1700EthernetMIIManagement(MDIO)viasoftwareRev.01―6August2009ApplicationnoteDocumentinformationInfoContentKeywordsLPC1700,Ethernet,MII,RMII,MIIM,MDIOAbstractThiscodeexampledemonstrateshowtoemulateanEthernetMIIManagement(MDIO)viasoftwareontheLPC1700.NXPSemiconductorsAN10859LPC1700EthernetMIIManagement(MDIO)viasoftwareRevisionhistoryRevDateDescription0120090806Initialversion.ContactinformationForadditionalinformation,ple……