Linux网络子系统之---- PHY 配置
来源:互联网 发布:澳大利亚签证 知乎 编辑:程序博客网 时间:2024/06/03 20:03
Linux网络子系统之---- PHY 配置
它包括一个数据接口,以及一个MAC和PHY之间的管理接口(图1)。
数据接口包括分别用于发送器和接收器的两条独立信道。每条信道都有自己的数据、时钟和控制信号。MII数据接口总共需16个信号。
管理接口是个双信号接口:一个是时钟信号,另一个是数据信号。通过管理接口,上层能监视和控制PHY。
RMII口是用两根线来传输数据的,
MII口是用4根线来传输数据的,
GMII是用8根线来传输数据的。
GMII (Gigabit MII)
GMII是8bit并行同步收发接口,采用8位接口数据,工作时钟125MHz,因此传输速率可达1000Mbps。同时兼容MII所规定的10/100 Mbps工作方式。
GMII接口数据结构符合IEEE以太网标准。该接口定义见IEEE802.3-2000。
发送器:
◇ GTXCLK——吉比特TX..信号的时钟信号(125MHz)
◇ TXCLK——10/100M信号时钟
◇ TXD[7..0]——被发送数据
◇ TXEN——发送器使能信号
◇ TXER——发送器错误(用于破坏一个数据包)
注:在千兆速率下,向PHY提供GTXCLK信号,TXD、TXEN、TXER信号与此时钟信号同步。否则,在10/100M速率下,PHY提供 TXCLK时钟信号,其它信号与此信号同步。其工作频率为25MHz(100M网络)或2.5MHz(10M网络)。
接收器:
◇ RXCLK——接收时钟信号(从收到的数据中提取,因此与GTXCLK无关联)
◇ RXD[7..0]——接收数据
◇ RXDV——接收数据有效指示
◇ RXER——接收数据出错指示
◇ COL——冲突检测(仅用于半双工状态)
管理配置
◇ MDC——配置接口时钟
◇ MDIO——配置接口I/O
管理配置接口控制PHY的特性。该接口有32个寄存器地址,每个地址16位。其中前16个已经在“IEEE 802.3,2000-22.2.4Management Functions”中规定了用途,其余的则由各器件自己指定。
MII/RMII只是一种接口,对于10M线速,MII的速率是2.5M,RMII则是5M;对于100M线速,MII的速率是25M,RMII则是50M。
SGMII--Serial Gigabit Media IndependentInterface
SGMII是PHY与MAC之间的接口,类似与GMII和RGMII,只不过GMII和RGMII都是并行的,而且需要随路时钟,PCB布线相对麻烦,而且不适应背板应用。
而SGMII是串行的,不需要提供另外的时钟,MAC和PHY都需要CDR去恢复时钟。另外SGMII是有8B/10b编码的,速率是1.25G
在 linux 配置PHY
drivers/net/phy
配置的参数
phydev-> autonet, speed, duplex.
2. PowerPC对MDIO的支持
PowerPC操作MDIO时,涉及以下寄存器:
MIIMCFG
MIIMCOM
MIIMADD
MIIMCON
MIIMSTAT 状态寄存器
MIIMIND
以MPC8560举例,这些寄存器在CCSR中的位置如下:
2.1 MIIMCFG:配置寄存器
ResetMgmt:
MgmtClockSet:时钟设置,是CCB的 2的n次方之一
2.2 MIIMCOM
ReadCycle: 0->1 触发MDIO读时序
2.3 MIIMADD
PHYaddr:PHY地址,共5bit,系统最多联31个PHY(地址0为保留)
REGaddr:寄存器地址,共5bit,一个PHY上最多32个寄存器地址(可以使用shadow value技术,访问更多的寄存器)
2.4 MIIMCON
PHYcontrol:在写流程时,这里存放要写入寄存器的值
2.5 MIIMSTAT 状态寄存器
PHYstatus:读流程时,PHY reg的内容会放到此
2.6 MIIMIND
NotVal:若置1,表示读流程结束,可以去读MIIMSTAT
Scan:
Busy:
3. linux中MDIO的实现
读写PHY寄存器时通过2个函数
phy_read()和phy_write(),
最终调用
int gfar_local_mdio_read(struct gfar_mii *regs, int mii_id, int regnum)
int gfar_local_mdio_write(struct gfar_mii *regs, int mii_id, int regnum, u16 value)
参数regs就是MDIO相关寄存器:
- struct
gfar_mii { -
u32 miimcfg; -
u32 miimcom; -
u32 miimadd; -
u32 miimcon; -
u32 miimstat; -
u32 miimind; - };
参数regnum,就是寄存器地址
上代码,简单不解释
- int
gfar_local_mdio_read(struct gfar_mii *regs, int mii_id, int regnum) - {
-
u16 value; -
-
gfar_write(®s->miimadd, (mii_id <</span><</span> 8) | regnum); -
-
gfar_write(®s->miimcom, 0); -
gfar_write(®s->miimcom, MII_READ_COMMAND); -
-
while (gfar_read(®s->miimind) & (MIIMIND_NOTVALID | MIIMIND_BUSY)) -
cpu_relax(); -
-
value = gfar_read(®s->miimstat); -
return value; - }
- int
gfar_local_mdio_write(struct gfar_mii *regs, int mii_id, -
int regnum, u16 value) - {
-
-
gfar_write(®s->miimadd, (mii_id <</span><</span> 8) | regnum); -
-
gfar_write(®s->miimcon, value); -
-
while (gfar_read(®s->miimind) & MIIMIND_BUSY) -
cpu_relax(); -
return 0; - }
内核启动时的准备工作
4.1 初始化网络相关的全局数据结构,并挂载处理网络相关软中断的钩子函数
start_kernel()
__init
{
}
NOTE:这里的网络设备是指MAC层的网络设备,即TSEC和PCI网卡(bcm5461是phy)
在网络设备驱动中创建net_device数据结构,并初始化其钩子函数 open(),close() 等
挂载TSEC的驱动的入口函数是
// 平台设备 TSEC 的数据结构
static struct platform_driver gfar_driver = {
};
int
{
#ifdef CONFIG_GFAR_NAPI
#endif
#ifdef CONFIG_NET_POLL_CONTROLLER
#endif
}
五、启用网络设备
5.1 用户调用ifconfig等程序,然后通过ioctl系统调用进入内核
socket的ioctl()系统调用
对于TSEC来说,挂的钩子函数是
5.2 在网络设备的open钩子函数里,分配接收bd,挂中断ISR(包括rx、tx、err),对于TSEC来说
gfar_enet_open
最终,TSEC相关的Bd等数据结构应该是下面这个样子的
六、中断里接收以太网包
接收到一个完整的以太网数据包后,TSEC会根据event mask触发一个 Rx 外部中断。
cpu保存现场,根据中断向量,开始执行外部中断处理函数do_IRQ()
do_IRQ 伪代码
{
}
6.1 TSEC的接收中断处理函数
gfar_receive
{
#ifdef CONFIG_GFAR_NAPI
#else
#endif
}
- Linux网络子系统之---- PHY 配置
- Linux网络子系统之---- PHY 配置
- Linux内核驱动之网络驱动(3)PHY寄存器分析
- Linux内核驱动之网络驱动(4)PHY芯片分析
- linux之phy
- linux之PHY
- linux 网络子系统之----TCP基础协议
- phy子系统分析
- Linux子系统系列-网络
- LINUX网络子系统
- Linux网络子系统
- linux 网络子系统
- Linux网络子系统
- linux网络子系统分析
- linux内核网络子系统
- linux网络子系统
- Linux之网络配置
- 网络配置之Linux
- 树莓派3b, 远程桌面使用opencv不能显示(Window system doesn't support OpenGL)
- 【ARM】制作Linux 文件系统
- 写Javascript必须尊重的两项基本原则
- 多线程
- 构造、拷贝(复制)构造、赋值构造以及析构
- Linux网络子系统之---- PHY 配置
- VS2015自带的LocalDB数据库的用法
- java多线程学习-java.util.concurrent详解(三)ScheduledThreadPoolExecutor
- 解决:Page index must not be less than zero!
- 最大正方形
- 归并排序
- 详解CSS的相对定位和绝对定位
- linux 里 /etc/passwd 、/etc/shadow和/etc/group 文件内容解释
- SSH免秘钥登录方法解决