藏金阁(一)PHY AR8035芯片手册 解析

文章目录

    • 特性
    • 内部功能框架图
    • 芯片模式和地址解析
    • 寄存器解析
    • 数字回环测试
    • PHY芯片特殊配置
    • 硬件上电时序
    • 实战应用

特性

  • 10M、100M、1000M兼容IEEE 802.3协议
  • 支持RGMII接口到MAC设备,支持I/O口电压级别选项2.5V/1.8V/1.5V/3.3V
  • RGMII定时模式支持,RX内部延时和外部延时
  • 支持WOL(wake-on-lan)功能,通知属于系统休眠的唤醒
  • 符合IEEE 802.3自协商
  • 软件可编程LED模式
  • 多种判断回环模式

内部功能框架图

藏金阁(一)PHY AR8035芯片手册 解析_第1张图片

芯片模式和地址解析

藏金阁(一)PHY AR8035芯片手册 解析_第2张图片
CLK_25M默认输出25M ———— AR8035只有输出模式,没有输入模式
藏金阁(一)PHY AR8035芯片手册 解析_第3张图片
PHY地址、模式、I/O电压
地址和模式识别PHY芯片重要点,具体可看相关RK与NXP专栏中PHY驱动解析
藏金阁(一)PHY AR8035芯片手册 解析_第4张图片
省电模式:PLLOFF模式下CLK_25M输出会下降,时有时没有
PLLON 模式下CLK_25M持续输出时钟

寄存器解析

在这里插入图片描述
PHY ID —— 0x20 : 0x004D 0x03 : 0xD072
注:MAC通过MDIO总线发送寄存器地址获取PHY的ID号

藏金阁(一)PHY AR8035芯片手册 解析_第5张图片
控制读写AR8035 MDIO管理设备地址有两个(MMD3 MMD7) ,用上面两个寄存器去读写管理设备下的寄存器
藏金阁(一)PHY AR8035芯片手册 解析_第6张图片
设置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 AR8035芯片手册 解析_第7张图片

  • 1000M loopback: write register 0x0 = 0x4140 to enable 1000M digital loopback.
  • 100M loopback: write register 0x0 = 0x6100 to enable 100M digital loopback.
  • 10M loopback: write register 0x0 = 0x4100 to enable 10M digital loopback.
    藏金阁(一)PHY AR8035芯片手册 解析_第8张图片
    注:速度SPEED_SELECTION 低字节

PHY芯片特殊配置

// 驱动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;
}

硬件上电时序

藏金阁(一)PHY AR8035芯片手册 解析_第9张图片
注:XTLO、XTLI外接晶振25M,内部产生25M时钟输出(CLK_25M)


实战应用

[ IMX6ULL ] PHY驱动框架解析 —— MDIO总线

你可能感兴趣的:(藏经阁,linux,nxp,phy,c语言,嵌入式硬件)