Note:基于DWC_ether_qos控制器 + RTL8211F PHY
1.硬件复位PHY(可选)

讯享网
通过GPIO接口,将复位信号(持续至少10ms的低电平脉冲)发送到PHY。
2.初始化控制器
3.配置控制器
3.1配置DMA
a.配置DMA系统总线工作模式
使能地址对齐节拍,gmac.DMA_SysBus_Mode.AAL置1。
失能固定突发长度,gmac.DMA_SysBus_Mode.FB置0。
e.使能中断(按需选择,建议全开)
设置gmac.DMA_CH0_Interrupt_Enable.NIE为0或1。
设置gmac.DMA_CH0_Interrupt_Enable.AIE为0或1。
设置gmac.DMA_CH0_Interrupt_Enable.CDEE为0或1。
设置gmac.DMA_CH0_Interrupt_Enable.FBEE为0或1。
设置gmac.DMA_CH0_Interrupt_Enable.ERIE为0或1。
设置gmac.DMA_CH0_Interrupt_Enable.ETIE为0或1。
设置gmac.DMA_CH0_Interrupt_Enable.RWTE为0或1。
设置gmac.DMA_CH0_Interrupt_Enable.RSE为0或1。
设置gmac.DMA_CH0_Interrupt_Enable.RBUE为0或1。
设置gmac.DMA_CH0_Interrupt_Enable.RIE为0或1。
设置gmac.DMA_CH0_Interrupt_Enable.TBUE为0或1。
设置gmac.DMA_CH0_Interrupt_Enable.TXSE为0或1。
设置gmac.DMA_CH0_Interrupt_Enable.TIE为0或1。
3.2配置MTL
a.配置MTL操作模式
设置Tx调度算法,gmac.MTL_Operation_Mode.WRR置0或1。(建议关闭)
设置Rx仲裁算法,gmac.MTL_Operation_Mode.SR置0或1。(建议关闭)
b.接收队列映射路由到Q0
gmac.MTL_RxQ_DMA_MapO.Q0MDMACH置0。
gmac.MTL_RxQ_DMA_MapO.Q0DDMACH置0。
c.配置MTL TxQ0操作模式为存储转发模式
使能存储转发模式,gmac.MTL_TxQ0_Operation_Mode.TSF置1。
失能阈值控制模式,gmac.MTL_TxQ0_Operation_Mode.TTC置0。
使能传输队列,gmac.MTL_TxQ0_Operation_Mode.TSQEN设置为0x2。
设置传输队列大小为4096 byte,gmac.MTL_TxQ0_Operation_Mode.TQS设置为0x4。
TQS 大小(byte)
0x0 256
0x1 512
0x2 1024
0x3 2048
0x4 4096
d.配置MTL RxQ0操作模式为存储转发模式
使能存储转发模式,gmac.MTL_RxQ0_Operation_Mode.RSF置1。
失能阈值控制模式,gmac.MTL_TxQ0_Operation_Mode.RTC置0。
设置活动流控的阈值,gmac.MTL_RxQ0_Operation_Mode.RFA置0。
设置未活动流控的阈值,gmac.MTL_RxQ0_Operation_Mode.RFD置0。
使能转发错误包,gmac.MTL_RxQ0_Operation_Mode.FEP置1。
使能转发小型好包,gmac.MTL_RxQ0_Operation_Mode.FUP置1。
设置传输队列大小为4096 byte,gmac.MTL_RxQ0_Operation_Mode.RQS设置为0x4。
RQS 大小(byte)
0x0 256
0x1 512
0x2 1024
0x3 2048
0x4 4096
3.3配置MAC
a.设置控制器MAC地址
设置MAC_Address[31:0],gmac.MAC_Address0_Low.ADDRLO设置为期望值。
设置MAC_Address[47:32],gmac.MAC_Address0_High.ADDRHI设置为期望值。
b.配置包过滤
使能接收所有包,gmac.MAC_Packet_Filter.RA置1。
使能混合模式,gmac.MAC_Packet_Filter.PR置1。
d.MAC中断使能
设置MDIO接口中断,gmac.MAC_Interrupt_Enable.MDIOIE设置为0或1。
设置帧优先级中断,gmac.MAC_Interrupt_Enable.FPEIE设置为0或1。
设置接收状态中断,gmac.MAC_Interrupt_Enable.RXSTSIE设置为0或1。
设置传输状态中断,gmac.MAC_Interrupt_Enable.TXSTSIE设置为0或1。
设置时间戳中断,gmac.MAC_Interrupt_Enable.TSIE设置为0或1。
设置LPI(Low Power Idle)中断,gmac.MAC_Interrupt_Enable.LPIIE设置为0或1。
设置PMT(Power Management Module)中断,gmac.MAC_Interrupt_Enable.PMTIE设置为0或1。
设置PHY中断,gmac.MAC_Interrupt_Enable.PHYIE设置为0或1。
设置PCS AN(Physical Coding Sub-Layer Auto-negotiation)完成中断,gmac.MAC_Interrupt_Enable.PCSANCIE设置为0或1。
设置PCS连接状态中断,gmac.MAC_Interrupt_Enable.PCSLCHGIE设置为0或1。
设置RGMII/SMII中断,gmac.MAC_Interrupt_Enable.RGSMIIIE设置为0或1。
e.配置工作速率
gmac.MAC_Configuration.PS设置为0或1。
gmac.MAC_Configuration.FES设置为0或1。

f.配置双工模式
gmac.MAC_Configuration.DM设置为0或1。

4.I/O配置
略
5.配置PHY(举例:RTL8211F)
2.切换Page
gmac.MAC_MDIO_Address.GB = 0//设置MDIO为Busy
gmac.MAC_MDIO_Address.RDA = 0x1F//PHY的page切换寄存器地址
gmac.MAC_MDIO_Data.GD = n//切换page n
gmac.MAC_MDIO_Address.GOC_1 = 0//设置为写操作
gmac.MAC_MDIO_Address.GOC_0 = 1//设置为写操作
gmac.MAC_MDIO_Address.GB = 1//开始MDIO处理操作
3.读操作
…//切换Page
delay 1ms
gmac.MAC_MDIO_Address.GB = 0//设置MDIO为Busy
gmac.MAC_MDIO_Address.RA = n//设置读寄存器地址n
gmac.MAC_MDIO_Address.GOC_1 = 1//设置为读操作
gmac.MAC_MDIO_Address.GOC_0 = 1//设置为读操作
gmac.MAC_MDIO_Address.GB = 1//开始MDIO处理操作
delay 1ms
data = gmac.MAC_MDIO_Data.GD //获取读数据
4.写操作
…//切换Page
delay 1ms
gmac.MAC_MDIO_Address.GB = 0//设置MDIO为Busy
gmac.MAC_MDIO_Address.RDA = n//写寄存器地址
gmac.MAC_MDIO_Data.GD = data//写数据data
gmac.MAC_MDIO_Address.GOC_1 = 0//设置为写操作
gmac.MAC_MDIO_Address.GOC_0 = 1//设置为写操作
gmac.MAC_MDIO_Address.GB = 1//开始MDIO处理操作

5.PHY初始化
a.检测PHY地址
读取范围从1到32的所有PHY地址的PHY寄存器2和3中的PHY标识符字段。注册器内容对有效的PHY地址有效。
b.检测相关的速度/双工设置
这些位可以被设置为适合该系统。有关更多信息,请参考PHY供应商数据表。
c.根据适用的情况配置PHY
这可能包括设置PHY模式的选项、PHY中的定时选项或其他适用于系统的选项。有关更多信息,请参考PHY供应商数据表。
d.等待自动协商的完成
请阅读PHY状态寄存器。有关更多信息,请参考PHY供应商数据表。
e.更新控制器与自动协商的速度和双工设置
读取相关的PHY寄存器,以确定协商的速度和双工制。
6.配置dma描述符环
6.1Rx dma描述符环
b.在系统内存中创建一个数量为N的环描述符实体。


每个DMA描述符占用16 Byte。
6.2Tx dma描述符
b.在系统内存中创建一个数量为N的环描述符实体。


每个DMA描述符的长度为16 Byte。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/22042.html