【genius_platform软件平台开发】第九十八讲:嵌入式网络接口(MAC、PHY)

news2024/12/23 20:04:31

1. 嵌入式网络简介

1.1 嵌入式下的网络硬件接口

  • 提起网络,我们一般想到的硬件就是“网卡”,现在网卡已经是通过一个芯片来完成了,嵌入式网络硬件分为两部分:MAC和PHY,大家都是通过看数据手册来判断一款SOC是否支持网络,如果一款芯片数据手册说自己支持网络,一般都是说的这款SOC内置MAC,MAC类似I2C控制器、SPI控制器一样的外设。

  • 但是光有MAC还不能直接驱动网络,还需要另外一个芯片:PHY,因此对于内置MAC的SOC,其外部必须搭配一个PHY芯片。内部没有MAC的SOC芯片,就需要使用外置的MAC+PHY一体芯片了,这里就要牵扯出常见的两个嵌入式网络硬件方案了。

2. SOC内部没有网络MAC外设

  • 对于内部没有MAC的SOC芯片,可以使用外置 MAC+PHY一体的网络芯片来实现网络功能。比如三星linux开发板里面用的最多的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芯片的连接如图1-1所示:
    在这里插入图片描述

2. SOC内部集成网络MAC外设

  • 我们一般说某个SOC支持网络,说的就是他内部集成网络MAC外设,此时我们还需要外接一个网络PHY芯片。目前几乎所有支持网络的SOC都是内置MAC外设,比如STM32F4/F7/H7系列、NXP的I.MX系列,内部集成网络MAC的优点如下:

1)内部MAC外设会有专用的加速模块,比如专用的DMA,加速网速数据的处理。

2)网速快,可以支持10/100/1000M网速。

3)外接PHY可选择性多,成本低。

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

SOC内部MAC外设与外部PHY芯片的连接如图1-2所示:
在这里插入图片描述

  • 大家在做项目的时候,如果要用到网络功能,强烈建议大家选择内部带有网络MAC外设的主控SOC!I.MX6ULL就有两个10M/100M的网络MAC外设,正点原子ALPHA开发板板载了两颗PHY芯片,型号为LAN8720。因此,本章节只讲解SOC内部MAC+外置PHY芯片这种方案。

2.1 MII/RMII接口

  • 前面我们说了,内部MAC通过MII/RMII接口来与外部的PHY芯片连接,完成网络数据传输,本节我们就来学习一下什么是MII和RMII接口。

2.1.1 MII接口

MII全称是Media Independent Interface,直译过来就是介质独立接口,它是IEEE-802.3定义的以太网标准接口,MII接口用于以太网MAC连接PHY芯片,连接示意图如图1-3所示:
在这里插入图片描述
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.1.2 RMII接口

RMII全称是Reduced Media Independent Interface,翻译过来就是精简的介质独立接口,也就是MII接口的精简版本。RMII接口只需要7根数据线,相比MII直接减少了9根,极大的方便了板子布线,RMII接口连接PHY芯片的示意图如图1-4所示:
在这里插入图片描述
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芯片。

1.1.3 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接口,另外可能还需要复位、中断等其他引脚。

2.1.3 RJ45接口

网络设备是通过网线连接起来的,插入网线的叫做RJ45座,如图1-5所示:
在这里插入图片描述
RJ45座要与PHY芯片连接在一起,但是中间需要一个网络变压器,网络变压器用于隔离以及滤波等,网络变压器也是一个芯片,外形一般如图1-6所示:

在这里插入图片描述
但是现在很多RJ45座子内部已经集成了网络变压器,比如最常用的HR911105A就是内置网络变压器的RJ45座。内置网络变压器的RJ45座和不内置的引脚一样,但是一般不内置的RJ45座会短一点。

因此,大家在画板的时候一定要考虑你所使用的RJ45座是否内置网络变压器,如果不内置的话就要自行添加网络变压器部分电路!同理,如果你所设计的硬件是需要内置网络变压器的RJ45座,肯定不能随便焊接一个不内置变压器的RJ45座,否则网络工作不正常!

RJ45座子上一般有两个灯,一个黄色(橙色),一个绿色,绿色亮的话表示网络连接正常,黄色闪烁的话说明当前正在进行网络通信。这两个灯由PHY芯片控制,PHY芯片会有两个引脚来连接RJ45座上的这两个灯。内部MAC+外部PHY+RJ45座(内置网络变压器)就组成了一个完整的嵌入式网络接口硬件,如图1-7所示:
在这里插入图片描述

2.1.4 PHY芯片基础知识

PHY是IEEE 802.3规定的一个标准模块,前面说了,SOC可以对PHY进行配置或者读取PHY相关状态,这个就需要PHY内部寄存器去实现。PHY芯片寄存器地址空间为5位,地址 031共32个寄存器,IEEE定义了015这16个寄存器的功能,16~31这16个寄存器由厂商自行实现。

也就是说不管你用的哪个厂家的PHY芯片,其中0~15这16个寄存器是一模一样的。仅靠这16个寄存器是完全可以驱动起PHY芯片的,至少能保证基本的网络数据通信,因此Linux内核有通用PHY驱动,按道理来讲,不管你使用的哪个厂家的PHY芯片,都可以使用Linux的这个通用PHY驱动来验证网络工作是否正常。

事实上在实际开发中可能会遇到一些其他的问题导致Linux内核的通用PHY驱动工作不正常,这个时候就需要驱动开发人员去调试了。但是,随着现在的PHY芯片性能越来越强大,32个寄存器可能满足不了厂商的需求,因此很多厂商采用分页技术来扩展寄存器地址空间,以求定义更多的寄存器。

这些多出来的寄存器可以用于实现厂商特有的一些技术,因此Linux内核的通用PHY驱动就无法驱动这些特色功能了,这个时候就需要PHY厂商提供相应的驱动源码了,所以大家也会在Linux内核里面看到很多具体的PHY芯片驱动源码。

不管你的PHY芯片有多少特色功能,按道理来讲,Linux内核的通用PHY驱动是绝对可以让你这PHY芯片实现基本的网络通信,因此大家也不用担心更换PHY芯片以后网络驱动编写是不是会很复杂。

IEEE802.3协议英文原版中的 “22.2.4 Management functions”章节,此章节对PHY的前16个寄存器功能进行了规定,如图1-8所示:
在这里插入图片描述
图1-8 IEEE规定的前16个寄存器

关于这16个寄存器的内容协议里面也进行了详细的讲解,这里就不分析了。大家可以找个具体的PHY芯片数据手册对比看一下,比如百M网络最常用的LAN8720A这个PHY,大家可以看一下LAN8720前面几个寄存器结构是否和图1-8中的一样。

关于嵌入式Linux的网络接口设计就讲到这里。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/656783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux tar.xz 格式的文件正确的解压命令

Linux tar.xz 最近下载 Linux kernel,好像最近流行 tar.xz 格式的后缀 对于 xz 后缀的压缩文件,我之前的解压方式是分为两步: xz -d xxx.tar.xz 解压成 xxx.tar 格式文件,然后再 tar xf xxx.tar 解压文件。 这样的操作不仅比较的…

【Java基础学习打卡11】Path环境变量的配置

目录 前言一、为什么配置环境变量二、如何配置环境变量三、JDK11的环境变量配置总结 前言 本文我们要知道为什么配置环境变量,自己思考不配置环境变量可以吗?JDK 11 如何配置环境变量。 一、为什么配置环境变量 原因很简单,就是方便命令的查…

痛点-调研-明确需求-实现-测试-发布 不需要手一步到位使用AGI生成去广告脚本,复制粘贴发布到Greasy Fork

总算又想起密码了, 自从用了语雀后, 其他平台基本都不再使用了 csdn 真的**, c h a t g p t 是禁词(已经改为了AGI, 通用型人工智能), 你倒是说清楚啊,直接来一句违反社区规定, 莫名其妙, 得靠猜…服了 今天来补上一篇利用AGI生成的js去广告脚本 前置知识(不看也问题不大) …

MyBatis junit 日志框架logback

JUnit是专门做单元测试的组件 <!-- junit依赖 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency>…

牛客网最全的 Java 面试八股文大合集汇总

就目前大环境来看&#xff0c;跳槽成功的难度比往年高很多。一个明显的感受&#xff1a;今年的面试&#xff0c;无论一面还是二面&#xff0c;都很考验 Java 程序员的技术功底。这不马上又到了面试跳槽的黄金段&#xff0c;成功升职加薪&#xff0c;不成功饱受打击。当然也要注…

关于laravel使用Elastic Search的一些记录

文章目录 1. 准备工作2. 本地安装elastic search3. laravel安装es依赖4. laravel中使用es参考链接 1. 准备工作 因为我本地php版本是7.3.4&#xff0c;不支持太高的es。 所以使用如下环境: laravel6 php7.3.4 elastic search 7.17.2 2. 本地安装elastic search 1. 下载安装包…

备战金九银十,两份 JAVA 面试题 2023 最新整合版,祝你脱颖而出

前言 马上又准备到了一年一度的金九银十环节&#xff0c;作为一年中的跳槽求职高峰期&#xff0c;相信有很多朋友都已经开始着手准备面试了&#xff0c;但是网上的面试题杂七杂八的&#xff0c;所以今天分享 2 份整合好的合集版&#xff0c;从基础到深入比较全面。即适合初入社…

windows10系统-14-Hexo博客框架和DevSidecar加速访问GitHub

HexoGitee零代码基础从0到1部署博客全流程&#xff08;一&#xff09; HexoGithub博客搭建教程 亲测解决npm ERR! Unexpected end of JSON input while parsing near…的方法 Hexo-修改Hexo主题 hexo免费主题 现在市面上的博客很多&#xff0c;如CSDN&#xff0c;博客园&#x…

【干货】Android系统定制基础篇:第二部分

1、Android Launcher3支持键盘切换焦点 Android Launcher3 默认并不支持键盘操作&#xff0c;无法切换焦点&#xff0c;在一些需要支持键盘或遥控操作的设备中无法使用&#xff0c;因些对 Launcher3 做简单修改&#xff0c;使其支持键盘切换焦点。 diff --git a/packages/app…

C语言学习笔记:指针

✨博文作者&#xff1a;烟雨孤舟 &#x1f496; 喜欢的可以 点赞 收藏 关注哦~~ ✍️ 作者简介: 一个热爱大数据的学习者 ✍️ 笔记简介&#xff1a;作为大数据爱好者&#xff0c;以下是个人总结的学习笔记&#xff0c;如有错误&#xff0c;请多多指教&#xff01; 目录 简介 …

Redis客户端 - SpringDataRedis

原文首更地址&#xff0c;阅读效果更佳&#xff01; Redis客户端 - SpringDataRedis | CoderMast编程桅杆https://www.codermast.com/database/redis/spring-data-redis.html 介绍 SpringData 是 Spring 中操作数据的模块&#xff0c;包含对各种数据库的集成&#xff0c;其中…

2023 年最新阿里巴巴 Java 面试权威指南(泰山版)

不知道现在同学们有没有想法备战金九银十&#xff0c;好多未雨绸缪的同学已经开始整理学习资源了&#xff0c;有些同学想冲击一下大厂&#xff0c;有些同学希望自己能够涨薪&#xff01;不管是出于哪种想法&#xff0c;看一下现在的时间&#xff0c;也确实该准备了&#xff0c;…

English Learning - L3 作业打卡 Lesson6 Day41 2023.6.14 周三

English Learning - L3 作业打卡 Lesson6 Day41 2023.6.14 周三 引言&#x1f349;句1: In the early morning, the food that had been laid out for the dead is thrown into a river or into the sea as it is considered unlucky for anyone living to eat it.成分划分弱读…

C语言学习笔记:数组

✨博文作者&#xff1a;烟雨孤舟 &#x1f496; 喜欢的可以 点赞 收藏 关注哦~~ ✍️ 作者简介: 一个热爱大数据的学习者 ✍️ 笔记简介&#xff1a;作为大数据爱好者&#xff0c;以下是个人总结的学习笔记&#xff0c;如有错误&#xff0c;请多多指教&#xff01; 目录​​​​…

基于javaweb jsp+SSM 酒店客房管理系统的设计与实现

一.项目介绍 本系统需要进行登录&#xff0c;点击登录即可跳转到登陆页面&#xff0c; 管理员密码是在数据库中设置好的可以直接登录&#xff0c; 其它用户需要管理员登录以后注册用户才可以根据账号密码登录。 当登录进入到系统当中时 可以对客房&#xff0c;商品&#xff…

使用python制作一个批量查询搜索排名的SEO免费工具

&#x1f482; 个人网站:【海拥】【摸鱼游戏】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 搭建背景 最近工作中需要用…

《人月神话》译文修订明细(10)-读者可以对照修改

《人月神话》译文修订明细&#xff08;1&#xff09;-读者可以对照修改 《人月神话》译文修订明细&#xff08;2&#xff09;-读者可以对照修改 《人月神话》译文修订明细&#xff08;3&#xff09;-读者可以对照修改 《人月神话》译文修订明细&#xff08;4&#xff09;-读…

团队管理之性能实施团队日志14 -- 项目终结

历时2个月16天&#xff0c;项目结束了。 今天给客户做最终的汇报。 本来汇报准备了92页PPT&#xff0c;把几个系统单独的都一个个说了个遍。但是感觉这种方式老板不一定能接受。于是换了一个方式&#xff0c;只说overview的结果&#xff0c;但系统的就不一一解释了。 老板更想…

【C/C++套接字编程】TCP通信实验

一、实验目的&#xff1a; 通过本实验使学员了解和掌握编写基于TCP协议的网络应用程序。任务是开发一个基于TCP Socket API的网络聊天程序。 二、实验内容简要描述 用所学的TCP Socket API知识来开发基于TCP协议的网络。通过编程实现服务端和客户端的信息通信。TCP协议建立交…

【MySQL】之索引与索引优化

目录 一、索引介绍二、MySQL索引结构二、索引优化 一、索引介绍 1、索引简介 MySQL官方对索引的定义为&#xff1a;索引&#xff08;Index&#xff09;是帮助MySQL高效获取数据的数据结构。 可以得到索引的本质&#xff1a;索引是数据结构。索引的目的在于提高查询效率&…