打印

LPC1700 开发板以太网 一段代码的疑惑

[复制链接]
3022|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
arm菜鸟人|  楼主 | 2013-1-7 11:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
周立功LPC1700开发板 以太网 MAC初始化部分代码:

1    /* 侦测PHY 地址 */
2     for (i = 0; i < 32; i++)
3    {
4         PHYID = Read_PHY(i, 2);
5         if (PHYID == 0x0181)
6            break;
7      }
8
9      if (i >= 32)
10          while (1);
11
12      PHYID = i;

问题:
1、 第4行 Read_PHY(i, 2) 应该是读 PHY 寄存器的数据, i 应该就是 PHY ADDR,  2 应该是PHY 芯片内部寄存器地址。
    那么, 为什么 PHY 芯片内部寄存器地址 是 2 呢? 与硬件有关?
2、 第5行 if (PHYID == 0x0181)   应该是指 MAC_MRDD == 0x0181,而 MAC_MRDD 是读取 PHY寄存器的内容。
    那么,这个 0x0181 是怎么来的?为什么是 0x0181?
3、 第9行 if (i >= 32)   while (1);  应该是在 0-31 PHY中 没寻到“目标” 停留于此。
    那么,程序如何跳出这重循环。初始化不成功?

自己对 PHY芯片了解比较少,对整个 Ethernet 也了解比较少,片段式的分析可能有些局限,期望了解的给解解惑,不胜感激。

相关帖子

沙发
jlass| | 2013-1-8 09:59 | 只看该作者
1、是的,2 应该是PHY 芯片内部寄存器地址存放ID号的位置
2、0x0181就是芯片的ID号,存放在寄存器地址0x2中
3、i >= 32,是因为芯片PHY ADDR有5位,理论最大值为32,从程序上来看,如果找不到PHY芯片就直接锁死。程序不能跳出这重循环,初始化不成功。

使用特权

评论回复
板凳
jlass| | 2013-1-8 10:01 | 只看该作者
PHY芯片可能用的是DM9161

使用特权

评论回复
地板
arm菜鸟人|  楼主 | 2013-1-8 17:18 | 只看该作者
jlass 发表于 2013-1-8 09:59
1、是的,2 应该是PHY 芯片内部寄存器地址存放ID号的位置
2、0x0181就是芯片的ID号,存放在寄存器地址0x2中 ...

谢谢您的回复。

使用特权

评论回复
5
yerendian| | 2014-3-24 13:00 | 只看该作者
可以參考現成的ethernet module, Thanks
w w w.yerendian.com/e100-uart-to-ethernet-module

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:感染属性。

34

主题

539

帖子

1

粉丝