IP101A芯片默认物理地址(PHY Adress)确定
2015-06-16 09:35
507 查看
IP101A芯片默认物理地址(PHY Adress)确定
分类:【嵌入式开发】2011-11-11 21:382826人阅读评论(3)收藏举报
command平台
根据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;
}
}
相关文章推荐
- ActiveRecord多数据库配置
- 批量发工资或发邮件
- $.ajax()方法详解
- Mybatis 高级结果映射 ResultMap Association Collection
- Python本地与全局命名空间用法实例
- 通信协议与序列化方案的纠结: Protocol Buffer, thrift or hessian?
- ZH奶酪:Ubuntu客户端通过SSH方式远程登录Ubuntu服务器
- mysql主从复制的一些东西的整理
- gearman服务连接php java
- Python IDE: PyCharm程序输出乱码问题(含中文乱码)
- 帮助初学者区分doget和dopost
- Spring Web Flow 入门demo(一)简单页面跳转 附源码
- Android设备唯一标识ID的获取
- nginx自启动脚本
- js中二维数组篇
- Linux中IIC总线驱动分析
- Windbg 手工玩转句柄表
- MVC大型商贸系统(库存管理)技术解释(七) 商品转库
- SqlDataReader读取空值字段,会抛异常的问题
- MySql中操作事务