Part Number:DRA821U
问:需要在 enet-lld 和 EthFW 中进行哪些更改来进行面向 CPSW 5G/9G 的电路板特定修改?
Cherry Zhou:
答:
面向 RTOS 上以太网的电路板特定修改指南
通用引脚多路复用:这由 pdk/packages/ti/board 中的电路板库来处理。通过 PinMux 工具生成文件 c 和 J7200_pinmux.h(面向 J7200 的示例),并替换到 pdk/packages/ti/board/src/j7200_evm 中
特定于以太网的引脚多路复用:修改 enet/examples/utils/V1/enet_board_pinmux_j7200_data.c 以进行特定于以太网的引脚多路复用更改,如 RGMII/SGMII。结构 gEthFwPinmuxData 包含所有引脚多路复用数据,这继而由 enet/examples/utils/V1/enet_board_pinmux.c 中的函数 EnetBoard_configEthFwPinmux() 进行调用
无需 SGMII 引脚多路复用。当 SGMII 连接到 SERDES 时,SERDES 在 SoC 上有专用引脚,在 SERDES 中,使用多路复用器寄存器来选择 USB、SGMII 和 PCIe。ENET-LLD 中的电路板配置:对于 enet_loopback 等示例,可以使用 EnetBoard_setEnetControl() API 直接配置开关。
有 PHY 时的配置:例如,如果您使用了 SGMII/RGMII PHY,那么您还可以使用 examples/utils/V1/enet_appboardutils_j721e_evm.c 中的辅助函数 EnetBoard_setPhyConfigSgmii() 和 EnetBoard_setPhyConfigRgmii()。
无 PHY 时的配置:如果您没有使用 PHY,那么请分别查看 enet/examples/utils/enet_apputils.c 中的辅助函数 EnetAppUtils_setNoPhyCfgRgmii() 和 EnetAppUtils_setNoPhyCfgSgmii()。该文件还包含用于其他配置(如 RMII 等)的辅助函数。
EthFw 中的电路板配置(如果仅运行示例,则可以跳过):EthFw 内部的配置是通过一个定义明确的结构 EthFw_Config(在 ethfw/ethfw.h 中定义)实现的。然后使用用于配置端口号和端口数量的数组 gEthAppPorts[] 初始化该结构。该数组在初始化例程 EthApp_initEthFw() 中用于配置 enet-lld。VLAN、ALE、MTU 大小等各种其他配置是使用 ethfw/src/ethfw.c 中定义的函数 EthFw_initConfigParams() 来实现的。该函数继而使用函数 EthFw_initAleCfg() 来初始化 ALE。
ENET-LLD 集成:对于 ENET 配置,用户/应用需要执行以下步骤
初始化序列:在使用任何 Enet LLD API 之前进行一次性初始化。
外设打开序列:打开一个以太网外设,需要针对应用要使用的每个外设(例如 CPSW)调用该序列。
端口打开序列:打开一个 MAC 端口。对于提供多个 MAC 端口的外设(即具有 8 个 MAC 端口的 CPSW9G),必须针对每个 MAC 端口执行该序列。该部分还包含 MAC-PHY 和 MAC-MAC 链路。
数据包发送/接收序列:DMA TX 和 RX 通道打开序列以及用于向驱动程序提交数据包队列/从驱动程序中检索数据包队列的函数。用户应用通常不修改该序列,该序列应保持不变。数据包时间戳添加序列:用于启用时间戳添加和检索机制的 TX 和 RX 数据包时间戳添加序列。
端口关闭序列:关闭一个 MAC 端口。当不再需要在步骤 3 中打开的 MAC 端口时,应用必须将其全部关闭。
外设关闭序列:当应用不再需要某个以太网外设时,关闭该以太网外设。对于在步骤 2 中打开的每个外设,必须执行该序列。取消初始化序列: 使用 ENET-LLD 完成应用后,一次性取消初始化。
该指南对最后一点进行了深入介绍。尤其要注意端口打开序列,该序列介绍了 MAC-PHY 和 MAC-MAC 配置。
下面提供了一个片段: