当前位置:   article > 正文

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

ar8035

特性

  • 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模式
  • 多种判断回环模式

内部功能框架图

在这里插入图片描述

芯片模式和地址解析

在这里插入图片描述
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);        // 写入该寄存器
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

数字回环测试

数字环回提供了使用AR8035设备中的数字电路将传输的数据环回到接收器的能力。图2是一个数字环回的框图。
在这里插入图片描述

  • 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.
    在这里插入图片描述
    注:速度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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

硬件上电时序

在这里插入图片描述
注:XTLO、XTLI外接晶振25M,内部产生25M时钟输出(CLK_25M)


实战应用

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/967074
推荐阅读
相关标签
  

闽ICP备14008679号