这里写自定义目录标题
如何使用FPGA驱动PHY芯片
前言
笔者因为工作的原因接触到使用FPGA驱动PHY芯片进行通信,期间接触到了德州仪器的dp83849,博通公司的B50610,裕太车通等芯片。下面以博通公司的B为例来讲解如何使用和驱动PHY芯片。
必要的硬件知识
对于嵌入式软件开发来说,不讲硬件就讲软件构架的行为都是耍流氓。
如何确定PHY芯片的物理地址?
首先读者要明确一点,PHY芯片的物理地址是什么?这个东西有什么意义? 假如在你使用的电路板子上存在多个PHY芯片,为了区分每个不同的PHY芯片,给定PHY芯片一个独有的地址,从而确定我发送的的控制信号是给哪个PHY芯片的,而这个地址就是PHY芯片的物理地址。根据MDIO的协议,PHY的物理地址是5Bit数据,则理论上来说一根总线最多可以驱动2的5次方,即32个PHY芯片。但是实际上一般不会这么使用,首先在一般的工程中用不到这么多芯片,其次就是FPGA的引脚往往有很多,也不会如此的节省引脚。
那么如何给定PHY芯片的物理地址呢?一般来说,PHY芯片的物理地址都是通过PHY芯片管脚连接的电阻的上拉下拉决定的。即当你板子焊接好后,PHY的物理地址就确定了,除了改变硬件连接之外,没有其它办法改变PHY芯片的物理地址。
PHY芯片有一个POS(英语原文叫PowerOnStrapping ,笔者也不知道对应的中文名词是什么)的过程,即PHY芯片在上电的过程中,通过硬件的连接确定PHY芯片的物理地址,工作模式等等。
如何确定PHY芯片的工作模式?
以博通芯片为例,此芯片支持两种接口:MII和RGMII。在上文提到的POS过程中,根据控制引脚的电阻上拉下拉决定。
如何驱动PHY芯片?
以MII为例
读者可以把PHY芯片的接口简单的理解为两部分,其一为控制接口,包括MDC, MDIO两个管脚;其二为通讯管脚,包括TXCLK, TXD, TXEN, RXCLK, RXD, RXDV等信号。
控制管脚用于了解和控制PHY芯片的工作状态,通过读取和写入寄存器数据的方式了解当前PHY芯片的工作状态。MDIO是一种串行通讯方式,每次读取或者写入16位数据,至于每一位数据代表什么,就请各位读者去看对应芯片的器件手册了。其中MDC起到的是同步时钟的作用,其每个周期应该发送和接收MDIO一个bit数据。以笔者使用的,裕太车通的YT8512的MII规定为例:根据工作模式的不同,如果工作在100M工作模式下,MDC应该为25MHz的时钟,如果工作在10M工作模式下,MDC应该是2。5MHz的时钟。
通讯管脚就更好理解了,就是发送和接收数据的管脚。当发送信号的时候TXEN作为发送信号的使能位,将其置为高电平后只需按照TXCLK时钟把要发送的数据赋给TXD端口就行了;同理,当接收信号的时候当RXDV置为高电平意味着发送的信息已经开始到达PHY芯片,只需按照RXCLK时钟把RXD信号存储起来就好。
MDIO的通讯协议是什么?
图为博通芯片的MII接口
PHY芯片怎么收发数据?
//TODO
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228672.html原文链接:https://javaforall.net
