ext_reg: 由于 mii_reg 只有 0~0x1f,即 32 个。不能满足产品对寄存器数目的要求,就通过访问两个 mii_reg 0x1e, 0x1f 来扩展了更多的寄存器。访问方式为:
将要访问的 ext_reg 地址,写入 mii_reg 0x1e.
读 mii_reg 0x1f 得到值,即为 ext_reg 内的值. 写值到 mii_reg 0x1f,即将 ext_reg 寄存器内容改为写入的值.
例如:读取 ext_reg0x1000 的值:write mii_reg0x1e 0x1000;
read mii_reg0x1f;
写 ext_reg0x1000 的值为 0x3456:
write mii_reg0x1e 0x1000;
write mii_reg0x1f 0x3456;
mmd_reg: 为了扩展更多的寄存器,以适应更高速率的以太网。MMD 寄存器被创造出来。遵从 802.3 clause
45 的标准定义方式进行访问。MMD 寄存器有两种访问方式:间接访问和直接访问。
直接访问:其协议与 MII 访问不同,它是通过两条指令实现 MMD 寄存器的读或写,即先发 address 指令,
再发 Write 或 Read 指令实现,具体协议如下:
间接访问:即通过 MII 寄存器(mii_reg 0xd, mii_reg 0xe,其具体含义见下表)来访问 MMD 寄存器。比如:
读 MMD 3 的 0x5 寄存器,其指令为:
write mii_reg 0xd 0x3; write mii_reg 0xe 0x5; write mii_reg 0xd 0x4003; read mii_reg 0xe
写 MMD 7 的 0x3c 寄存器值为 0x6,其指令为:
write mii_reg 0xd 0x7; write mii_reg 0xe 0x3c; write mii_reg 0xd 0x4007; write mii_reg 0xe 0x6
以上文档从官方手册中摘取
接下来要实现对PHY配置 主要验证phy Template(电口指标)配置
初始化:
Write_comm_ext_reg0xa000: 0x0 #选择 UTP 地址空间
write_utp_ext_reg0x41 to 0x4
write_utp_ext_reg0x42 to 0x8
write_utp_ext_reg0x43 to 0xc
write_utp_ext_reg0x44 to 0x10
write_utp_ext_reg0x45 to 0x10
write_utp_ext_reg0x46 to 0x10
write_utp_ext_reg0x47 to 0x10
write_utp_ext_reg0x4a to 0x1180
1000BT:
Write_comm_ext_reg0xa000: 0x0 #选择 UTP 地址空间
write_utp_ext_reg0x27: 0x2026
write_utp_mii_reg0x10: 0x2
write_utp_mii_ reg0x0: 0x8140
Test Mode 1,Transmit waveform test
write_utp_mii_reg0x9: 0x2200
write_utp_mii_reg0x0: 0x8140
Test Mode 2,Transmit Jitter test (master mode)
write_utp_mii_reg0x9: 0x5a00
write_utp_mii_reg0x0: 0x8140
Test Mode 3,Transmit Jitter test (slave mode)
write_utp_mii_reg0x9: 0x7200
write_utp_mii_ reg0x0: 0x8140
Test Mode 4,Transmit distortion test
write_utp_mii_reg0x9: 0x8200
write_utp_mii_ reg0x0: 0x8140
将访问方式通过间接访问操作 ext寄存器。
写了一个脚本
#!/bin/bash
#参考此处进行配置 举例配置了PHY 0x41 值为2 并再次把值都出来。
echo 初始化
./mdio enaphyt4i0 0x1e 0xa000
./mdio enaphyt4i0 0x1f 0x0
./mdio enaphyt4i0 0x1e 0x41
./mdio enaphyt4i0 0x1f 0x4
./mdio enaphyt4i0 0x1e 0x42
./mdio enaphyt4i0 0x1f 0x8
./mdio enaphyt4i0 0x1e 0x43
./mdio enaphyt4i0 0x1f 0xc
./mdio enaphyt4i0 0x1e 0x44
./mdio enaphyt4i0 0x1f 0x10
./mdio enaphyt4i0 0x1e 0x45
./mdio enaphyt4i0 0x1f 0x10
./mdio enaphyt4i0 0x1e 0x46
./mdio enaphyt4i0 0x1f 0x10
./mdio enaphyt4i0 0x1e 0x47
./mdio enaphyt4i0 0x1f 0x10
./mdio enaphyt4i0 0x1e 0x4a
./mdio enaphyt4i0 0x1f 0x1180
echo 1000bt
#1000BT
./mdio enaphyt4i0 0x1e 0x27
./mdio enaphyt4i0 0x1f 0x2026
echo test mode1
#test mode1
./mdio enaphyt4i0 0x10 0x2
./mdio enaphyt4i0 0x0 0x8140
./mdio enaphyt4i0 0x9 0x2200
./mdio enaphyt4i0 0x0 0x8140
echo test end