转载:http://blog.csdn.net/ropai/article/details/6961157

根据IP101A的DataSheet,芯片的第9,10,12,13,15脚为PHYAD0~PHYAD4。(其实为PHYAD和LED共用管脚)。这个PHYAD是可配的,有两种方法可以确定PHY Address.

(1)通过硬件方法

利用芯片上电或复位后latch的电平高低来确定,比如9脚为高电平“1”,其余为低电平0,则PHYADR[4-0]=0x01 (bit:00001)

由RX0-RX3和CSR这几个脚组成PHYADDR0-4,芯片复位时,会锁存这5个脚的电平,作为芯片地址,以后就找这个作访问了。所以,如果你是悬空的话,认为是0,一定要接1才认为是1。

(2)通过软件方法

因为PHYAD共有5位,也就是说PHY Address的范围是 0~31。而IP101A的第二个寄存器值为PHYID的高位(固定为0x0243),通过遍历(x|2)寄存器的值,如果读到0x0243则x就为PHYAddress的值。参考代码如下:

/**

*  确定IP101A的PHYAddress

*/

//MII寄存器地址,MAC_BASE_ADDR由硬件平台决定,LPC23xx为0xFFE00000

#define MAC_MCMD            (*(volatile unsigned long *)(MAC_BASE_ADDR + 0x024)) /* MII Mgmt CoMmanD reg */
#define MAC_MADR (*(volatile unsigned long *)(MAC_BASE_ADDR + 0x028)) /* MII Mgmt ADdRess reg */
#define MAC_MRDD (*(volatile unsigned long *)(MAC_BASE_ADDR + 0x030)) /* MII Mgmt ReaD Data reg (RO) */ #define MII_RD_TOUT 0x00050000 // MII Read timeout count unsigned short getPhyAddress(){ unsigned char i; int tout; for(i=;i<;i++){ // PHY Address范围是0~31 //MAC_MADR寄存器8~12位为PHY_ADR MAC_MADR = (i<<) | 0x02; //高8位是地址,低五位是寄存器号'02' MAC_MCMD = MCMD_READ; // Wait until operation completed
for (tout = ; tout < MII_RD_TOUT; tout++) {
if ((MAC_MIND & MIND_BUSY) == ) break;
}
MAC_MCMD = ;
if(MAC_MRDD == 0x0243) //matches return i; } }

IP101A芯片默认物理地址(PHY Adress)确定的更多相关文章

  1. 网口扫盲三:以太网芯片MAC和PHY的关系

    转载:http://www.cnblogs.com/jason-lu/articles/3195473.html   问:如何实现单片以太网微控制器? 答:诀窍是将微控制器.以太网媒体接入控制器(MA ...

  2. 网口扫盲三:以太网芯片MAC和PHY的关系(转)

      问:如何实现单片以太网微控制器? 答:诀窍是将微控制器.以太网媒体接入控制器(MAC)和物理接口收发器(PHY)整合进同一芯片,这样能去掉许多外接元器件.这种方案可使MAC和PHY实现很好的匹配, ...

  3. BQ24296充电管理芯片使用过程中的注意事项

    BQ24296遇到的一点问题 概述:BQ24296是TI出品的具有窄范围VDC控制.基于I2C通讯的最大支持3A充电电流的开关式电源路径管理芯片.可以轻松实现2A以上的大电流充电,能量转换效率达到90 ...

  4. mac与phy怎样实现网络自适应

    这两天改动网卡驱动以实现10/100/1000M自适应,因此研究了下phy芯片和emac驱动怎样兼容10/100/1000M网络环境,记录在此. 网络中设备端数据链路层由mac芯片和phy芯片组成.p ...

  5. 分享:Mac与Phy组成原理的简单分析

    原文链接:http://blog.chinaunix.net/uid-20528014-id-3050217.html 1.General 下图是网口结构简图.网口由CPU.MAC和PHY三部分组成. ...

  6. iTOP-4412嵌入式开发板ioremap控制GPIO寄存器

    转自迅为电子技术论坛:http://bbs.topeetboard.com GPIO 的寄存器通过 ioremap函数转换之后,可以通过直接控制虚拟地址来控制物理地址(寄存器的实际地址),这样就实现 ...

  7. Linux下编译内核配置选项简介

    Code maturity level options代码成熟度选项 Prompt for development and/or incomplete code/drivers 显示尚在开发中或尚未完 ...

  8. Linux: 介绍make menuconfig中的每个选项含义【转】

    转自:http://blog.csdn.net/gaoyuanlinkconcept/article/details/8810468 介绍make menuconfig中的每个选项含义 Linux 2 ...

  9. 【内核】linux2.6版本内核编译配置选项(二)

    目录 Linux2.6版本内核编译配置选项(一):http://infohacker.blog.51cto.com/6751239/1203633 Linux2.6版本内核编译配置选项(二):http ...

随机推荐

  1. MYSQL里的索引类型介绍

    首先要明白索引(index)是在存储引擎(storage engine)层面实现的,而不是在server层面.不是所有的存储引擎支持有的索引类型. 1.B-TREE 最常见的索引类型,他的思想是所有的 ...

  2. [HIve - LanguageManual] Join Optimization (不懂)

    Join Optimization Join Optimization Improvements to the Hive Optimizer Star Join Optimization Star S ...

  3. HiveContext VS SQLContext

    There are two ways to create context in Spark SQL: SqlContext:scala> import org.apache.spark.sql. ...

  4. SpringDataMongoDB介绍(二)-MongoOperations介绍

    MongoOperations是一个很强大的接口,有了这个接口,基本上什么都搞定了. 其介绍 Interface that specifies a basic set of MongoDB opera ...

  5. 单片机C语言下LCD多级菜单的一种实现方法

    摘要:     介绍了在C 语言环境下,在LCD 液晶显示屏上实现多级嵌套菜单的一种简便方法,提出了一个结构紧凑.实用的程序模型. 关键词: 液晶显示屏; 多级菜单; 单片机; C 语言; LCD 中 ...

  6. opencv 矩阵的相似性对比 (图片之间比较)

    测试图片:     code: #include <opencv\cv.h> #include <opencv\highgui.h> #include <opencv\c ...

  7. CSS实现子级窗口高度随低级窗口高度变化

    纯粹使用使用height:100%;或者height:auto;来定义内部容器自适应高度,都无法实现让内部容器高度随着外部父容器高度变化而变化,所以我们必需要使用position绝对定位属性来配合协助 ...

  8. HttpModule的认识与深入理解及MVC运行机制

    转自:http://kb.cnblogs.com/page/50130/ ASP.NET MVC架构与实战系列之二:理解MVC路由配置 http://www.cnblogs.com/jyan/arch ...

  9. ORACLE R12 MOAC

    MOAC简介 MOAC(Multi-Org Access Control)为多组织访问控制,是Oracle EBS R12的重要新功能.它可以实现在一个Responsibility下对多个OU(Ope ...

  10. sgu - 274 - Spam-filter

    题意:判断一个字符串是不是有效的邮件地址. 题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=274 ——>>照着题目做. ...