linux PHY 驱动
firefly-3399
linux内核版本:4.4
MAC(Media Access Control)
1.网络硬件部分
2.驱动部分
参考博客
http://www.jianshu.com/p/77bb0ba1768c
http://www.360doc.com/content/13/0717/16/2768962_300623597.shtml
http://www.latelee.org/programming-under-linux/linux-phy-driver.html
https://www.cnblogs.com/jason-lu/articles/3195473.html
http://blog.csdn.net/heli200482128/article/details/54091677
1.MAC和PHY硬件及接口协议
1.1网络硬件组成
网络有PHY,MAC和CPU组成。针对不同的组合形式可以有下面几种类型
方案一: CPU集成了MAC和PHY
方案二: CPU集成MAC,PHY采用独立芯片(3399是这种)
方案三: CPU不集成MAC与PHY,MAC与PHY采用集成芯片
由于在 RK 系列的 SoC 中内置了以太网 MAC 控制器,所以只需要搭配一颗以太网 PHY 芯片,
即可实现以太网卡功能。按照规范,即使是不同厂家的 PHY,仍然有一部分寄存器的定义是通用的,
只要配置了这些通用的寄存器,基本上 PHY 就可以正常工作。
1.2如何进行数据传输
在软件上网络的操作分为下面几步:
- 为数据收发分配内存
- 初始化MAC寄存器
- 初始化PHY寄存器
- 启动收发
1.3 MAC与PHY
收发数据这种耗时的事情,使用DMA是最合适的。CPU只需要告诉DMA起始地址和长度剩下的事情就可以自动完成,一般在MAC中有一组寄存器专门记录数据地址,cpu按照MAC的要求把数据放好后,启动MAC的数据发送就可以了
左边的连接在处理器上,右边的连接PHY芯片,MII DATA 与MIIM是与PHY进行数据传输和控制的
PHY芯片上的寄存器CPU不可以直接访问,只能通过MAC上的MIIM寄存器实现间接访问;右边就是我们的网口
1.4PHY与MAC之间的接口
RK3399使用的是RGMII,RGMII即Reduced GMII,是RGMII的简化版本,将接口信号线数量从24根减少到14根(COL/CRS端口状态指示信号,这里没有画出),时钟频率仍旧为125MHz,TX/RX数据宽度从8为变为4位,为了保持1000Mbps的传输速率不变,RGMII接口在时钟的上升沿和下降沿都采样数据。在参考时钟的上升沿发送GMII接口中的TXD[3:0]/RXD[3:0],在参考时钟的下降沿发送GMII接口中的TXD[7:4]/RXD[7:4]。RGMI同时也兼容100Mbps和10Mbps两种速率,此时参考时钟速率分别为25MHz和2.5MHz。另外,MDC和MDIO是MIIM(MII Management)用来配置PHY寄存器的
RGMII接口
2.驱动
PHY驱动
phy_init //.\kernel\drivers\net\phy\phy_device.c
mdio_bus_init
class_register 在/sys/class/下创建mdio_bus
bus_register 创建总线mdio_bus
phy_drivers_register
phy_driver_register 注册phy_driver
new_driver->driver.name = new_driver->name; //可以搜索设备树中的这个名字
new_driver->driver.bus = &mdio_bus_type;
new_driver->driver.probe = phy_probe;