MDIO/MDC(SMI)接口总结

来源:互联网 发布:父母皆祸害知乎 编辑:程序博客网 时间:2024/05/22 21:42
1. 简介

The MDIO interface is a simple, two-wire, serial interface to connect a management entity and a managed PHY for the purposes of controlling the PHY and gathering status from the PHY.
The two lines include the MDC line [Management Data Clock], and the MDIO line [Management Data Input/Output]. The clock is point-to-point, while the data line is a bi-directional multi-drop interface.
The data line is Tri-state able and can drive 32 devices.

MDIO接口,MAC与PHY间的管理接口(MII是数据接口),有2根线:时钟线MDC,数据线MDIO(双向)



MDIO工作流程:
* Preamle(PRE) 在没有传输数据的空闲状态时,数据线MDIO处于高阻态(一直为1)。
* Start of Frame(ST) MAC驱动MDIO线,出现一个2bit的开始标识码(01)。
* Operation Code(OP) MAC驱动MDIO线,出现一个2bit数据来标识是读操作(10)还是写操作(01)。
* PHY Address(PHYAD) MAC驱动MDIO线,出现一个5bit数据标识PHY的地址。
* Reg Address(REGAD) MAC驱动MDIO线,出现一个5bitPHY寄存器地址。
* Turnaround(TA) 写操作的话,MAC驱动MDIO线,出现10
读操作的话,MDIO pin of MAC must be put in high-impedance state
在第二个周期,PHY驱动MDIO线,出现0

* Data MDIO串行读出/写入16bit的寄存器数据。

* MDIO恢复成空闲状态,同时MDIO进入高阻状态。


下面是PHY芯片 BCM5461 的一个例子:


2. PowerPC对MDIO的支持

PowerPC操作MDIO时,涉及以下寄存器:
MIIMCFG 配置寄存器
MIIMCOM 命令寄存器
MIIMADD 地址寄存器
MIIMCON 控制寄存器
MIIMSTAT 状态寄存器
MIIMIND 指示寄存器

以MPC8560举例,这些寄存器在CCSR中的位置如下:






2.1 MIIMCFG:配置寄存器


ResetMgmt: 用于重置MDIO模块
MgmtClockSet:时钟设置,是CCB的 2的n次方之一



2.2 MIIMCOM 命令寄存器


ReadCycle: 0->1 触发MDIO读时序


2.3 MIIMADD 地址寄存器


PHYaddr:PHY地址,共5bit,系统最多联31个PHY(地址0为保留)
REGaddr:寄存器地址,共5bit,一个PHY上最多32个寄存器地址(可以使用shadow value技术,访问更多的寄存器)


2.4 MIIMCON 控制寄存器



PHYcontrol:在写流程时,这里存放要写入寄存器的值


2.5 MIIMSTAT 状态寄存器



PHYstatus:读流程时,PHY reg的内容会放到此

2.6 MIIMIND 指示寄存器


NotVal:若置1,表示读流程结束,可以去读MIIMSTAT
Scan: 若置1,表示扫描流程进行中
Busy: 只有置0时,才能进行新的读写流程



3. linux中MDIO的实现

读写PHY寄存器时通过2个函数

phy_read()和phy_write(),

最终调用
int gfar_local_mdio_read(struct gfar_mii *regs, int mii_id, int regnum)
int gfar_local_mdio_write(struct gfar_mii *regs, int mii_id, int regnum, u16 value)

参数regs就是MDIO相关寄存器:
  1. struct gfar_mii {
  2. u32 miimcfg; /* 0x.520 - MII Management Config Register */
  3. u32 miimcom; /* 0x.524 - MII Management Command Register */
  4. u32 miimadd; /* 0x.528 - MII Management Address Register */
  5. u32 miimcon; /* 0x.52c - MII Management Control Register */
  6. u32 miimstat; /* 0x.530 - MII Management Status Register */
  7. u32 miimind; /* 0x.534 - MII Management Indicator Register */
  8. };
参数mii_id,就是PHY的id
参数regnum,就是寄存器地址


上代码,简单不解释
  1. int gfar_local_mdio_read(struct gfar_mii*regs, int mii_id, int regnum)

  2. {
  3. u16 value;

  4. /* Set the PHY address and the register address we want to read */
  5. gfar_write(&regs->miimadd,(mii_id << 8)| regnum);

  6. /* Clear miimcom, and then initiate a read */
  7. gfar_write(&regs->miimcom, 0);
  8. gfar_write(&regs->miimcom, MII_READ_COMMAND);

  9. /* Wait for the transaction to finish */
  10. while (gfar_read(&regs->miimind)& (MIIMIND_NOTVALID| MIIMIND_BUSY))
  11. cpu_relax();

  12. /* Grab the value of the register from miimstat */
  13. value = gfar_read(&regs->miimstat);

  14. return value;
  15. }


  1. int gfar_local_mdio_write(struct gfar_mii*regs, int mii_id,
  2. int regnum, u16 value)
  3. {
  4. /* Set the PHY address and the register address we want to write */
  5. gfar_write(&regs->miimadd,(mii_id << 8)| regnum);

  6. /* Write out the value we want */
  7. gfar_write(&regs->miimcon, value);

  8. /* Wait for the transaction to finish */
  9. while (gfar_read(&regs->miimind)& MIIMIND_BUSY)
  10. cpu_relax();

  11. return 0;
  12. }

 

转自:点击打开链接

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 江苏联宝投资的钱怎么办 银行叫开了证券怎么办 中班心理健康我不开心了怎么办 大学生心理健康课总是抢不到怎么办 孩子成绩提不上去怎么办 孩子数学不开窍怎么办 二年级 初中孩子语文不开窍怎么办 分到的班级都是差生怎么办 初三了英语差怎么办呀 初三了英语差的很怎么办 五年级英语太差怎么办 听课效率没有自学效率高怎么办 小学生不好好写作业怎么办 带的家教成绩没有提高怎么办 学生出国学校成绩证明怎么办 学生成绩考差了班主任怎么办 高一的学生成绩跟不上怎么办 综合素质评价手册丢了怎么办 小学综合素质评价手册丢了怎么办 人体质不出汗差怎么办 儿子一年级语文成绩太差怎么办 小孩读一年级差几个月怎么办 小孩一年级下学期数学差怎么办 小学五年成绩差怎么办 生完孩子记忆力不好怎么办 生了孩子之后记忆力不好怎么办 孩子记忆力差学习不好怎么办 党课结业证丢了怎么办 对三年级不听话的学生应该怎么办 素质报告单丢了怎么办 社保小红本丢了怎么办 小红本丢了怎么办 孩子小红本丢了怎么办 小学素质报告册丢了怎么办 小学生素质报告册丢了怎么办 高中素质报告册丢了怎么办 小升初素质报告单丢了怎么办? 三供一业移交后社区管理职能怎么办 初中政治总考不好怎么办 孩子上初一学习越来越差怎么办 胸经过整容后变得胸闷怎么办?