赞
踩
CLK_25M默认输出25M ———— AR8035只有输出模式,没有输入模式
PHY地址、模式、I/O电压
地址和模式识别PHY芯片重要点,具体可看相关RK与NXP专栏中PHY驱动解析
省电模式:PLLOFF模式下CLK_25M输出会下降,时有时没有
PLLON 模式下CLK_25M持续输出时钟
PHY ID —— 0x20 : 0x004D 0x03 : 0xD072
注:MAC通过MDIO总线发送寄存器地址获取PHY的ID号
控制读写AR8035 MDIO管理设备地址有两个(MMD3 MMD7) ,用上面两个寄存器去读写管理设备下的寄存器
设置CLK_25M的输出时钟125M
phy_write(phydev, 0xd, 0x7); // 往0xd寄存器里写入0x7 ,选择设备7控制器
phy_write(phydev, 0xe, 0x8016); // 往0xe寄存器里写0x8016,锁定要操作的寄存器
phy_write(phydev, 0xd, 0x4007); // 往0xd寄存器里写0x4007,操作设备7控制器设置里面数据为可读写
val = phy_read(phydev, 0xe); // 读出里面的数据
val &= 0xffe3; // 设置输出时钟为125M
val |= 0x18;
phy_write(phydev, 0xe, val); // 写入该寄存器
数字环回提供了使用AR8035设备中的数字电路将传输的数据环回到接收器的能力。图2是一个数字环回的框图。
// 驱动phy配置
static int ar8035_fix_up(struct phy_device *phydev)
{
unsigned short val;
printk("**************[stmmac_main.c]ar8035 fix up \n");
/* Ar8031 phy SmartEEE feature cause link status generates glitch,
* which cause ethernet link down/up issue, so disable SmartEEE
*/
phy_write(phydev, 0xd, 0x3);
phy_write(phydev, 0xe, 0x805d);
phy_write(phydev, 0xd, 0x4003);
val = phy_read(phydev, 0xe);
val &= ~(0x1 << 8);
phy_write(phydev, 0xe, val);
/* To enable AR8031 ouput a 125MHz clk from CLK_25M */
phy_write(phydev, 0xd, 0x7);
phy_write(phydev, 0xe, 0x8016);
phy_write(phydev, 0xd, 0x4007);
val = phy_read(phydev, 0xe);
val &= 0xffe3;
val |= 0x18;
phy_write(phydev, 0xe, val);
/* Introduce tx clock delay */
/*phy_write(phydev, 0x1d, 0x5);
val = phy_read(phydev, 0x1e);
val |= 0x0100;
phy_write(phydev, 0x1e, val);
*/
/*check phy power*/
val = phy_read(phydev, 0x0);
if (val & BMCR_PDOWN)
phy_write(phydev, 0x0, (val & ~BMCR_PDOWN));
return 0;
}
注:XTLO、XTLI外接晶振25M,内部产生25M时钟输出(CLK_25M)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。