GMII、RGMII MAC 配置流程
对于上图所示的示例,使用以下推荐的初始化序列。
- 使用 MDIO 进行外部 PHY 初始化
// 假设外部 PHY 地址为 0x0A
mdio_addr0 = 0x0A
// 外部 PHY 寄存器将映射到 MDIO 空间 0
读/写 MDIO 空间 0 (dword 偏移量 0x80 - 0x9F) = 读/写 PHY 寄存器 0 ~ 31 - MAC 配置寄存器初始化
a. 禁用 MAC 发送和接收数据路径
在执行任何配置更改之前禁用 MAC 发送和接收数据路径。
// 在命令配置寄存器中设置 TX_ENA 和 RX_ENA 位为 0
Command_config Register = 0x00802220
// 读取 TX_ENA 和 RX_ENA 位设置为 0,确保 TX 和 RX 路径被禁用
等待 Command_config Register = 0x00802220
b. MAC FIFO 配置
Tx_section_empty = 最大 FIFO 大小 - 16
Tx_almost_full = 3
Tx_almost_empty = 8
Rx_section_empty = 最大 FIFO 大小 - 16
Rx_almost_full = 8
Rx_almost_empty = 8
// 直通模式,设置该阈值为 0,启用存储转发模式
Tx_section_full = 16
// 直通模式,设置该阈值为 0,启用存储转发模式
Rx_section_full = 16
c. MAC 地址配置
// MAC 地址为 00-1C-23-17-4A-CB
mac_0 = 0x17231C00
mac_1 = 0x0000CB4A
d. MAC 功能配置
// 最大帧长为 1518 字节
Frm_length = 1518
// 最小包间距为 12 字节
Tx_ipg_length = 12
// 流量控制的最大暂停量值
Pause_quant = 0xFFFF
// 使用以下选项设置 MAC:
// 100Mbps,用户可以从 PHY 状态 / PCS 状态获取此信息
// 全双工,用户可以从 PHY 状态 / PCS 状态获取该信息
// 在接收时移除填充
// CRC 删除
// 发送报文的 MAC 地址插入
// 选择 mac_0 和 mac_1 作为源 MAC 地址
Command_config Register = 0x00800220
e. 重置 MAC
英特尔建议您在软件中发生更改时执行软件重置
MAC 速度或双工。MAC 软件复位位自清除
完成软件复位。
// 设置 SW_RESET 位为 1
Command_config Register = 0x00802220
等待 Command_config Register = 0x00800220
f. 启用 “MAC 发送和接收数据路径”
// 在命令配置寄存器中设置 TX_ENA 和 RX_ENA 为 1
Command_config Register = 0x00800223
// 读取 TX_ENA 和 RX_ENA 位置 1,确保 TX 和 RX 路径为启用
等待 Command_config Register = 0x00800223
SGMII MAC 配置流程
对于上图所示的示例,使用以下推荐的初始化序列。
- 使用 MDIO 进行外部 PHY 初始化
参考 GMII、RGMII MAC 配置流程第一步 - PCS 配置寄存器初始化。
a. Set Auto Negotiation Link Timer
// 设置 SGMII 的 Link timer 为 1.6ms
link_timer(地址偏移量 0x12) = 0x0D40
Link_timer(地址偏移量 0x13) = 0x03
b. 配置 SGMII
// 启用 SGMII 接口和启用 SGMII 自动协商
// SGMII_ENA = 1, USE_SGMII_AN = 1
if_mode = 0x0003
c. Enable Auto Negotiation
// 使能 Auto Negotiation
// Auto_Negotiation_ENA = 1,Bit 6,8,13 可以忽略
PCS Control Register = 0x1140
d. PCS Reset
// 配置改变时建议软件复位
// Reset = 1
PCS 控制寄存器 = 0x9140
等待 PCS 控制寄存器复位位清除 - MAC 配置寄存器初始化
参考 GMII、RGMII MAC 配置流程第二步
参考资料
https://www.intel.com/content/www/us/en/docs/programmable/683402/15-0/introduction.html