



























型号:JL3111A2-NA
Phy address: 0x03
uboot$ mii write 0x03 0x0d 0x0001 uboot$ mii write 0x03 0x0e 0x0002 uboot$ mii write 0x03 0x0d 0x4001 uboot$ mii read 0x03 0x0e 937C
查看datasheet,可以发现上面读出来的数值和datasheet一致,至少说明mdio接口是好的。

uboot$ mii write 0x03 0x0d 0x0001 //设置为slave uboot$ mii write 0x03 0x0e 0x0834 uboot$ mii write 0x03 0x0d 0x4001 uboot$ mii write 0x03 0x0e 0x8000
mii write 0x03 0x0e 0xc000 (设置为master)
mii write 0x03 0x0e 0x8000 (设置为slave)

景略提供的sample code代码体现如下
// Master or Slave [1.0x834] #define REG_BASE_T1_PMAPMD_CONTROL 0x0834 #define PMA_MASTER_SLAVE BIT(14) #define CFG_FORCE_MASTER 0x1 #define CFG_FORCE_SLAVE 0x0
uboot$ mii write 0x03 0x0d 0x0001 //上电默认,读出来千兆 uboot$ mii write 0x03 0x0e 0x0000 uboot$ mii write 0x03 0x0d 0x4001 uboot$ mii read 0x03 0x0e 0040
mii write 0x03 0x0e 0x2000(设置为百兆)

景略提供的sample code代码体现如下
// Speed [1.0x0] #define REG_PMAPMD_CONTROL1 0x0000 #define PMA_SOFT_RESET BIT(15) #define PMA_SPEED_MASK (BIT(13) | BIT(6)) #define PMA_SPEED_1000 BIT(6) #define PMA_SPEED_100 BIT(13) #define CFG_FORCE_SPEED_1000 0x1 #define CFG_FORCE_SPEED_100 0x0
uboot$ mii write 0x03 0x0d 0x0003 //上电默认,rgmii uboot$ mii write 0x03 0x0e 0x8000 uboot$ mii write 0x03 0x0d 0x4003 uboot$ mii read 0x03 0x0e 0240 //已经是默认rgmii
景略提供的sample code代码体现如下
// PHY Mode [3.0x8000] #define REG_COMMON_USER_CONFIG0 0x8000 #define USER_SYSTEM_MODE_MASK (BIT(3) | BIT(2) | BIT(1) | BIT(0)) #define ENABLE_TSEN BIT(5) #define ENABLE_LED_0 BIT(6) #define ENABLE_LED_1 BIT(7) #define RGMII_COPPER 0x0 #define SGMII_COPPER BIT(0) #define MII_COPPER BIT(1) #define RvMII_COPPER (BIT(1) | BIT(0)) #define RGMII_SGMII_PHY BIT(2) #define RGMII_SGMII_MAC (BIT(2) | BIT(0)) #define RMII_COPPER (BIT(2) | BIT(1))
uboot$ mii write 0x03 0x0d 0x0001 //soft reset uboot$ mii write 0x03 0x0e 0x0000 uboot$ mii write 0x03 0x0d 0x4001 uboot$ mii write 0x03 0x0e 0x8040
由于是通过softreset bit位 self clean,自动清除来告知我们soft reset生效,所以可以查看一下是否已经self clean
uboot$ mii write 0x03 0x0d 0x0001 //check soft reset self clean uboot$ mii write 0x03 0x0e 0x0000 uboot$ mii write 0x03 0x0d 0x4001 uboot$ mii read 0x03 0x0e 0040
景略提供的sample code代码体现如下
// soft reset [1.0x0] #define REG_PMAPMD_CONTROL1 0x0000 #define PMA_SOFT_RESET BIT(15) #define PMA_SPEED_MASK (BIT(13) | BIT(6)) #define PMA_SPEED_1000 BIT(6) #define PMA_SPEED_100 BIT(13) #define CFG_FORCE_SPEED_1000 0x1 #define CFG_FORCE_SPEED_100 0x0
uboot$ mii write 0x03 0x0d 0x0001 //check link status uboot$ mii write 0x03 0x0e 0x0001 uboot$ mii write 0x03 0x0d 0x4001 uboot$ mii read 0x03 0x0e 0000
注意这里显示失败了,确实显示失败了,为什么?
link状态是低锁存,第一次读把低(0)的状态清除,第二次读到的是正确状态。
所以我们需要再读一次才能看到现在的link状态。
这一种设计并不是景略独有的,各大phy都通过这种精妙的设计来反映 曾经发生过link down,这样才能捕获是否以前快速发生过link down
uboot$ mii write 0x03 0x0d 0x0001 //check link status uboot$ mii write 0x03 0x0e 0x0001 uboot$ mii write 0x03 0x0d 0x4001 uboot$ mii read 0x03 0x0e 0004

景略提供的sample code代码体现如下
// Link Status [1.0x1] #define REG_PMAPMD_STATUS1 0x0001 #define PMA_LINK_STATUS BIT(2)
整个过程截图如下

下面是试验截图,这里就不再赘述了,唯一想要强调的就是 任何设置的生效,都要进行soft reset

// RGMII Delay, XMII Loopback [3.0x8800] #define REG_XMII_UCFG0 0x8800 #define RMII_CLOCK_IN BIT(1) #define ENABLE_XMII_LOOPBACK BIT(2) #define ENABLE_XMII_SSC BIT(7) #define ENABLE_RGMII_RX_DELAY BIT(14) #define ENABLE_RGMII_TX_DELAY BIT(15) m57$ mii write 0x03 0x0d 0x0003 m57$ mii write 0x03 0x0e 0x8800 m57$ mii write 0x03 0x0d 0x4003 m57$ mii read 0x03 0x0e C830 /tx,rx delay均已打开
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。