一、RGMII
TC3xx支持MII/RMII/RGMII三种以太网数据通信接口。其中RGMII经常用于MAC和MAC之间,或MAC与PHY之间的通信,RGMII的带宽可以是10Mbps、100Mbps、1000Mbps。
当RGMII设置为10Mbps带宽是,TXC和RXC的时钟为2.5MHz。
当RGMII设置为100Mbps带宽是,TXC和RXC的时钟为25MHz。
当RGMII设置为1000Mbps带宽是,TXC和RXC的时钟为125MHz。
备注:TC3XX中使用模式RGMII的GREFCLK并不是标准RGMII的标准接口,但是在TC3XX中使用RGMII,就必须要用到GREFCLK这个引脚,并且需要外部输入125MHz时钟。外部时钟可以来源PHY或Switch的时钟输出,也可以是独立晶振的时钟。(GREFCLK的125MHz时钟输入异常,将导致DMA软件不能软件服务,GETH初始化失败)
二、SMI接口
SMI接口由MDC/MDIO两线构成,主要用于对PHY的管理,通过该接口可以实现对PHY内部寄存器的读写和控制。
MDC:时钟信号线,最大可设置为2.5MHz
MDIO:双向的数据信号线
Clause22 和 Clause45是两种不同格式是的 SMI数据协议,其中Clause22是在IEEE802.3里面定义的,随着以太网的发展,为了满足10G以太网的需求扩展,在802.3ae规范标准中提出了Clause45。
备注:TC3xx支持Clause22 和 Clause45两种格式,但是在MCAL接口中不支持Clause45,因为该部分没有在AUTOSAR标准中定义。
TC3xx的读写接口如下:
Eth_17_GEthMac_WriteMii
Eth_17_GEthMac_ReadMii
三、TC3xx MCAL
3.1 MCU
以太网驱动程序依赖于MCU驱动程序来生成时钟fSRI、fSPB和fGETH。fGETH为千兆以太网内核定义了应用程序时钟频率。fGETH独立于fSPB,并允许千兆以太网以恒定的波特率(频率)运行。要配置fSRI、fSPB和fGETH,请参考MCU驱动程序配置中的McuSRI频率、McuSPB频率和McuGEETH频率参数。在Tresos中配置MCU驱动程序时,必须考虑以下事项:
在以太网控制器中,由于需要同时从FIFO存储器进行读写传输,应用时钟频率(fGETH)应使存储器的数据传输带宽(fSRI)的带宽必须至少是应用时钟频率(fGETH)的两倍。即,fSRI必须大于或等于2* fGETH。
3.2 Port
PORT驱动程序配置整个微控制器的端口引脚。用户必须通过port配置配置以太网驱动程序使用的端口引脚:
配置在MII/RMII/ RGMII和MDIO接口的以太网驱动程序中使用的所有PORT引脚。也就是说,诸如端口方向(输入或输出)、端口初始模式(输入脚为GPIO或输出脚对应的ALT选项)等参数。
以太网驱动器用于MII/RMII/RGMII接口的所有输出和输入引脚,参数PortPinOutputPadDriveStrength值配置为PORT_PIN_RGMII_DRIVER。
对于以太网驱动程序使用的所有输出引脚,应选择端口控制选择为ENABLE.。
3.3 DMA
以太网控制器在硬件上有它自己的DMA,并且以太网驱动程序实现了执行此DMA的必要代码。因此,以太网驱动程序不使用TC3xx设备中可用的任何MCAL DMA服务。
3.4 中断配置
如使用中断模式,需要给ETH配置一个接收中断与发送中断,如下配置相应中断响应优先级。
3.5 ETH
(1)以太网速度模式设置
(2)管脚选择
(3)硬件和校验配置,保持默认即可
(4)MAC信息配置
3.6 集成
/* MCU Initialization */
Mcu_Init(&Mcu_Config);
Mcu_InitClock(0U);
while(Mcu_GetPllStatus() == MCU_PLL_LOCKED);
Mcu_DistributePllClock();
/* Port Initialization */
Port_Init(&Port_Config);
/* Ethernet controller Initialization */
Eth_17_GEthMac_Init(&Eth_Config);
/*中断初始化与使能*/
IrqEthernet_Init();
SRC_GETH_GETH0_SR2.B.SRE = 1;
SRC_GETH_GETH0_SR6.B.SRE = 1;
/*PHY初始化*/
Phy_Init();
/*控制器模式初始化*/
/*如果使用RGMII模式需要外部提供GETHCLK 125Mhz,在MAC模式设置前配置好时钟输入*/
RetValue_ETH = Eth_17_GEthMac_SetControllerMode(0u, ETH_MODE_ACTIVE);
/*数据发送*/
Eth_17_GEthMac_ProvideTxBuffer(0, BufIdxPtr, BufPtr, LenBytePtr);
Eth_17_GEthMac_Transmit(0, BufIdx,FrameType, TxConfirmation, LenByte, PhysAddrPtr);
/*如使用轮询模式需要调用一下函数*/
Eth_17_GEthMac_TxConfirmation(0);
Eth_17_GEthMac_Receive(0, RxStatusPtr);
/*根据MCAL配置调用主函数*/
Eth_17_GEthMac_MainFunction();
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_42357877/article/details/134958373
|