linux网络驱动(以太网)

前言

        由于最近要做一个MCU的以太网通信,学习一下以太网。由于过来实习没带MCU,只能继续做一下SOC,所以这期还是imx6ull的以太网(以下简称网络)驱动。

理论(imx6ull内置MAC外设)

         其实整个SOC网络单方通信的过程就划分为三部分:SOC---->MAC外设----->PHY芯片

        都是些什么?

        SOC其实就是我们的带操作系统的单片机(学名叫片上系统),MAC就是我们经常用的硬件IIC、SPI外设控制器,PHY就是专门用来与外部通信的芯片(这个不太了解)

        现在我们知道了,MAC作为硬件外设,一般会集成到我们的SOC芯片上,所以归根到底,就是控制MAC外设实现与PHY芯片的数据交互?        

        内部的 MAC 外设会通过 MII 或者 RMII 接口来连接外部的 PHY 芯片, MII/RMII 接口用来
传输网络数据。另外主控需要配置或读取 PHY 芯片,也就是读写 PHY 的内部寄存器,所以还
需要一个控制接口,叫做 MIDO, MDIO 很类似 IIC,也是两根线,一根数据线叫做 MDIO,一
根时钟线叫做 MDC。

        总是是这么一个过程

MII接口

        MII接口用于以太网MAC连接PHY芯片,如下图:

RMII接口

        就是 MII 接口的精简版本。 RMII 接口只需要 7 根数据线,相比 MII 直接减少了 9 根,极大的
方便了板子布线,如下图:

MDIO接口

        MDIO 全称是 Management Data Input/Output,直译过来就是管理数据输入输出接口,是一
个简单的两线串行接口,一根 MDIO 数据线,一根 MDC 时钟线。驱动程序可以通过 MDIO 和
MDC 这两根线访问 PHY 芯片的任意一个寄存器。 MDIO 接口支持多达 32 个 PHY。同一时刻
内只能对一个 PHY 进行操作,那么如何区分这 32 个 PHY 芯片呢?和 IIC 一样,使用器件地址
即可。同一 MDIO 接口下的所有 PHY 芯片,其器件地址不能冲突,必须保证唯一,具体器件
地址值要查阅相应的 PHY 数据手册。

拓展

总的硬件连线是下面这样子

PHY芯片

我们用到的PHY收发器是SR8201F

SR8201F 中断管理(此处没用到)

SR8201F 检测到媒介端的状态改变,就会写入对应中断状态的寄存器(第 0 页寄存器 14),
并且在中断管脚使能时,中断管脚会被置低表示发生一个中断事件。当 MAC 检测到中断事件
时,可以通过 MDC/MDIO 端口访问到第 0 页寄存器 14 获取相应的中断状态。
 

PHY 地址设置

SR8021F 内部寄存器

我们看寄存器,主要就是看配置寄存器和状态寄存器,如下

配置寄存器BCR,地址为0

状态寄存器BSR,地址为1

ID寄存器

SR8201F 的 PHY ID 寄存器 1 和 ID 寄存器 2,地址为 2 和 3,后面就称为寄
存器 2 和寄存器 3。这两个寄存器都是 PHY 的 ID 寄存器。 IEEE 规定寄存器 2 和寄存器 3 为
PHY 的 ID 寄存器,这两个寄存器组成一个 32 位的唯一 ID 值。

linux网络驱动框架

        Linux 内核使用 net_device 结构体表示一个具体的网络设备, net_device 是整个网络驱动的
灵魂。网络驱动的核心就是初始化 net_device 结构体中的各个成员变量,然后将初始化完成以
后的 net_device 注册到 Linux 内核中。
        net_device是一个很庞大的结构体,定义在 include/linux/netdevice.h 中,这里不在描述。

1、申请 net_device

编写网络驱动的时候首先要申请 net_device,使用 alloc_netdev 函数来申请 net_device

看到这里,感觉和前面SPI如出一辙。

待续。。。。

  • 12
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值