IP101A芯片默认物理地址(PHY Adress)确定

根据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)

(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=0;i<32;i++){  // PHY Address范围是0~31

              //MAC_MADR寄存器8~12位为PHY_ADR

               MAC_MADR = (i<<8) | 0x02;  //高8位是地址,低五位是寄存器号'02'

               MAC_MCMD = MCMD_READ;

              // Wait until operation completed
              for (tout = 0; tout < MII_RD_TOUT; tout++) {
                 if ((MAC_MIND & MIND_BUSY) == 0)

                       break;
               }
               MAC_MCMD = 0;
               if(MAC_MRDD == 0x0243) //matches

                  return i;

    }

}

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值