对于RTL8305NB,要从电口模式切换为光口模式,主要操作涉及到PHY page的切换和特定寄存器的配置。以下是详细的操作步骤:
- PHY Page切换:
- 首先,需要访问PHY地址8的寄存器31。这个寄存器用于Page的切换。
- 向PHY地址8的寄存器31写入值
0x8000
,这将使芯片切换到PHY page。
- 光口模式配置:
- 在切换到PHY page后,需要配置特定的寄存器以将端口设置为光口模式。
- 根据参考文章提供的信息,通常需要修改PHY page下的某个寄存器的某个位来配置光口模式。具体而言,是将寄存器28的bit5置高(设置为1)。
// 假设有一个函数用于向PHY寄存器写入值
void write_phy_register(uint8_t phy_address, uint8_t register_address, uint16_t value) { // 实现向PHY寄存器写入的逻辑 // ...
} // 切换到PHY Page
write_phy_register(8, 31, 0x8000); // 切换到PHY Page// 假设有一个函数用于读取PHY寄存器的值
uint16_t read_phy_register(uint8_t phy_address, uint8_t register_address) { // 实现从PHY寄存器读取值的逻辑 // ... return value;
} // 配置光口模式
uint16_t register28_value = read_phy_register(8, 28); // 读取寄存器28的当前值
register28_value |= (1 << 5); // 将bit5设置为1(光口模式)
write_phy_register(8, 28, register28_value); // 将修改后的值写回寄存器28void switch_fiber_port_init(void)
{unsigned short data = 0;write_phy_register(0x08, 0x1F, 0x8000); // 切换Page至PHY pagewrite_phy_register(PORT2_PHY_ADDR, 0x1F, 0x00); // 设置Port2为光口data = read_phy_register(PORT2_PHY_ADDR, 0x1C); // 读出寄存器28原始状态data |= (0x01 << 5);// 将bit5置高write_phy_register(PORT2_PHY_ADDR, 0x1C, data); // 将修改后的值写入寄存器write_phy_register(0x08, 0x1F, 0x0); // 切回MAC Page
}
总结:
- 访问PHY地址8的寄存器31,并写入
0x8000
以切换到PHY page。 - 在PHY page下,将寄存器28的bit5置高,从而配置端口为光口模式。