Linux 网络驱动实验(有线)

article/2023/9/24 22:30:30

目录

  • 嵌入式网络简介
    • 嵌入式下的网络硬件接口
    • MII/RMII 接口
    • MDIO 接口
    • RJ45 接口

网络驱动是linux 里面驱动三巨头之一,linux 下的网络功能非常强大,嵌入式linux 中也常
常用到网络功能。前面我们已经讲过了字符设备驱动和块设备驱动,本章我们就来学习一下
linux 里面的网络设备驱动。

嵌入式网络简介

嵌入式下的网络硬件接口

本章节讨论的都是有线网络!
注意!正点原子I.MX6U-ALPHA开发板V2.4版本以前的底板使用的网络PHY 为LAN8720,
V2.4 及其以后的版本使用的网络PHY 为SR8201F,而且网络PHY 地址有改变,大家一定要
看准自己所使用的底板版本号!原理基本一致,本章就以LAN8720 为例进行讲解。
提起网络,我们一般想到的硬件就是“网卡”,“网卡”这个概念最早从电脑领域传出来,
顾名思义就是能上网的卡。在电脑领域的“原始社会”,网卡是独立的硬件,如果电脑要上网就
得买个网卡插上去,类似现在的显卡一样。但是大家现在观察自己的笔记本或者台式机主板会
发现并没有类似显卡一样的网卡设备,原因是随着技术的不断发展,现在只需要一个芯片就可
以实现有线网卡功能,因此网卡芯片都直接放到了主板上。所以大家在接触嵌入式的时候听到
“网卡”这两个字,不要急着在开发板上找“卡”一样的东西。
既然现在网卡已经是通过一个芯片来完成了,那么是什么样的芯片呢?这个就要先了解一
下嵌入式中的网络硬件方案。首先,嵌入式网络硬件分为两部分:MAC 和PHY,大家都是通
过看数据手册来判断一款SOC 是否支持网络,如果一款芯片数据手册说自己支持网络,一般都
是说的这款SOC 内置MAC,MAC 类似I2C 控制器、SPI 控制器一样的外设。但是光有MAC
还不能直接驱动网络,还需要另外一个芯片:PHY,因此对于内置MAC 的SOC,其外部必须
搭配一个PHY 芯片。但是有些SOC 内部没有MAC,那也就没法搭配PHY 芯片了,这些内部
没有网络MAC 的芯片如何上网呢?这里就要牵扯出常见的两个嵌入式网络硬件方案了。
1、SOC 内部没有网络MAC 外设
我们一般说某个SOC 不支持网络,说的就是它没有网络MAC。那么这个芯片就不能上网
了吗?显然不是的,既然没有内部MAC,那么可以找个外置的MAC 芯片啊,不过一般这种外
置的网络芯片都是MAC+PHY 一体的。比如三星linux 开发板里面用的最多的DM9000,因为
三星的芯片基本没有内部MAC(比如S3C2440、S5PV210,4412 等),所以三星的开发板都是通
过外置的DM9000 来完成有线网络功能的,DM9000 对SOC 提供了一个SRAM 接口,SOC 会
以SRAM 的方式操作DM9000。
有些外置的网络芯片更强大,内部甚至集成了硬件TCP/IP 协议栈,对外提供一个SPI 接
口,比如W5500。这个一般用于单片机领域,单片机通过SPI 接口与W5500 进行通信,由于
W5500 内置了硬件TCP/IP 协议栈,因此单片机就不需要移植软件协议栈,直接通过SPI 来操
作W5500,简化了单片机联网方案。
这种方案的优点就是让不支持网络的SOC 能够另辟蹊径,实现网络功能,但是缺点就是网
络效率不高,因为一般芯片内置的MAC 会有网络加速引擎,比如网络专用DMA,网络处理效
率会很高。而且此类芯片网速都不快,基本就是10/100M。另外,相比PHY 芯片而言,此类芯
片的成本也比较高,可选择比较少。
SOC 与外部MAC+PHY 芯片的连接如图69.1.1.1 所示:
在这里插入图片描述
2、SOC 内部集成网络MAC 外设
我们一般说某个SOC 支持网络,说的就是他内部集成网络MAC 外设,此时我们还需要外
接一个网络PHY 芯片。此时就有朋友会有疑问,PHY 芯片不能也集成进SOC 吗?笔者目前还
没见过将PHY 也集成到芯片里面的SOC。
一般常见的通用SOC 都会集成网络MAC 外设,比如STM32F4/F7/H7 系列、NXP 的I.MX
系列,内部集成网络MAC 的优点如下:
①、内部MAC 外设会有专用的加速模块,比如专用的DMA,加速网速数据的处理。
②、网速快,可以支持10/100/1000M 网速。
③、外接PHY 可选择性多,成本低。
内部的MAC 外设会通过MII 或者RMII 接口来连接外部的PHY 芯片,MII/RMII 接口用来
传输网络数据。另外主控需要配置或读取PHY 芯片,也就是读写PHY 的内部寄存器,所以还
需要一个控制接口,叫做MIDO,MDIO 很类似IIC,也是两根线,一根数据线叫做MDIO,一
根时钟线叫做MDC。
SOC 内部MAC 外设与外部PHY 芯片的连接如图69.1.1.2 所示:
在这里插入图片描述
大家在做项目的时候,如果要用到网络功能,强烈建议大家选择内部带有网络MAC 外设
的主控SOC!I.MX6ULL 就有两个10M/100M 的网络MAC 外设,正点原子ALPHA 开发板板
载了两颗PHY 芯片,型号为LAN8720 或SR8201F。因此,本章节只讲解SOC 内部MAC+外
置PHY 芯片这种方案。

MII/RMII 接口

前面我们说了,内部MAC 通过MII/RMII 接口来与外部的PHY 芯片连接,完成网络数据
传输,本节我们就来学习一下什么是MII 和RMII 接口。
1、MII 接口
MII 全称是Media Independent Interface,直译过来就是介质独立接口,它是IEEE-802.3 定
义的以太网标准接口,MII 接口用于以太网MAC 连接PHY 芯片,连接示意图如图69.1.2.1 所示:
在这里插入图片描述
MII 接口一共有16 根信号线,含义如下:
TX_CLK:发送时钟,如果网速为100M 的话时钟频率为25MHz,10M 网速的话时钟频率
为2.5MHz,此时钟由PHY 产生并发送给MAC。
TX_EN:发送使能信号。
TX_ER:发送错误信号,高电平有效,表示TX_ER 有效期内传输的数据无效。10Mpbs 网
速下TX_ER 不起作用。
TXD[3:0]:发送数据信号线,一共4 根。
RXD[3:0]:接收数据信号线,一共4 根。
RX_CLK:接收时钟信号,如果网速为100M 的话时钟频率为25MHz,10M 网速的话时钟
频率为2.5MHz,RX_CLK 也是由PHY 产生的。
RX_ER:接收错误信号,高电平有效,表示RX_ER 有效期内传输的数据无效。10Mpbs 网
速下RX_ER 不起作用。
RX_DV:接收数据有效,作用类似TX_EN。
CRS:载波侦听信号。
COL:冲突检测信号。
MII 接口的缺点就是所需信号线太多,这还没有算MDIO 和MDC 这两根管理接口的数据
线,因此MII 接口使用已经越来越少了。
2、RMII 接口
RMII 全称是Reduced Media Independent Interface,翻译过来就是精简的介质独立接口,也
就是MII 接口的精简版本。RMII 接口只需要7 根数据线,相比MII 直接减少了9 根,极大的
方便了板子布线,RMII 接口连接PHY 芯片的示意图如图69.1.2.2 所示:
在这里插入图片描述
TX_EN:发送使能信号。
TXD[1:0]:发送数据信号线,一共2 根。
RXD[1:0]:接收数据信号线,一共2 根。
CRS_DV:相当于MII 接口中的RX_DV 和CRS 这两个信号的混合。

REF_CLK:参考时钟,由外部时钟源提供,频率为50MHz。这里与MII 不同,MII 的接
收和发送时钟是独立分开的,而且都是由PHY 芯片提供的。
除了MII 和RMII 以外,还有其他接口,比如GMII、RGMII、SMII、SMII 等,关于其他
接口基本都是大同小异的,这里就不做讲解了。正点原子ALPAH 开发板上的两个网口都是采
用RMII 接口来连接MAC 与外部PHY 芯片。

MDIO 接口

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

RJ45 接口

网络设备是通过网线连接起来的,插入网线的叫做RJ45 座,如图69.1.4.1 所示:


http://www.ngui.cc/article/show-1020439.html

相关文章

基于SSM+JSP实现的流浪猫狗救助系统(分为用户端和管理员端,领养动物、流浪动物知识学习、用户管理、评论管理、领养记录查询、流浪猫狗管理等)

博客目录基于SSMJSP实现的流浪猫狗救助系统实现功能截图系统功能使用技术完整源码基于SSMJSP实现的流浪猫狗救助系统 本系统是一个流浪猫狗救助系统,分为用户端和管理员端,用户端可以完成登陆注册、流浪猫狗知识学习、领养动物,管理员端可以…

Synchronized和锁升级

文章目录1、Synchronized关键字2、无锁3、偏向锁3.1、是什么3.2、核心原理3.3、加载过程3.4、偏向锁的膨胀和撤销4、轻量级锁4.1、是什么4.2、核心原理4.3、轻量级锁的膨胀5、重量级锁5.1、是什么5.2、核心原理锁升级发生后,hashcode去哪啦锁指向6、锁消除7、锁粗化…

3.29面试题

文章目录内存内存管理执行过程要点面试题内存 内存管理 由JVM管理 堆:new出来的对象(包括成员变量、数组元素、方法的地址)栈:局部变量(包括方法的参数)方法区:.class字节码文件(…

c# 第一次作业

一. 单选题(共49题,93.1分) 1. (单选题)下面属于合法变量名的是_____________。 A. P_qrB. 123mnpC. BooleanD. X-Y 我的答案: A正确答案: A 1.9分 2. (单选题)用所有.NET支持的编程语言编写的源代码经过一次编译后被编译成_____________…

ESP8266WiFi模块与Android APP实现数据传输(三)---AT/MQTT固件下载

目录 (1)打开后选择ESP8266 DowmloadTool (2)在弹出的界面进行下面操作: (3)进入等待上电同步: (4)状态显示完成,表示下载结束 (5&…

ChatGPT 使用 拓展资料:大模型训练为什么这么难

ChatGPT 使用 拓展资料:大模型训练为什么这么难 一些LLMs的省内存方法 https://zhuanlan.zhihu.com/p/616858352

用于模拟原子相互作用的continuous-filter卷积NeurIPS2017

深度学习有可能彻底改变量子化学,因为它非常适合学习结构化数据的表示。虽然卷积神经网络已被证明是图像、音频和视频数据的首选,但分子中的原子并不局限于网格结构(grid)。相反,它们的精确位置包含了基本的物理信息&a…

vue 遮罩和ref的使用,setup版和非setup版

1、创建conform.vue&#xff0c;其内容如下&#xff1a; <template><div v-if"fade"><div class"xtx-confirm" :class"{fade}"><div class"wrapper" :class"{fade}"><div class"header&qu…

C++ 实现Python String 中的strip,lstrip,rstrip函数

/// <summary>/// 参数为null时删除左边的空白字符&#xff08;包括’\n’, ‘\r’, ‘\t’, ’ )/// </summary>/// <returns></returns>/// 创建时间&#xff1a; 2023-03-28 最后一次修改时间&#xff1a;2023-03-28 (已测试&#xff09;_StrW…

Krew—Kubectl 插件的包管理器

文章目录1. Krew 是什么&#xff1f;2. 如何开发一个 kubectl 插件3. 安装 Krew 工具4. krew 常用命令5. kubectl 插件实践场景5.1 kubectl-who-can5.2 ingress-nginx5.2.1 conf5.2.2 exec5.2.3 logs1. Krew 是什么&#xff1f; Krew 是一个 Kubernetes 的插件管理器&#xff…