查看: 6273|回复: 20

[原创] 【IMX6U】嵌入式Linux网络接口该怎么设计,文末赠书

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3300

    主题

    6547

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32035
    最后登录
    2024-4-26
    发表于 2023-6-5 15:30:49 | 显示全部楼层 |阅读模式
    【IMX6U】嵌入式Linux网络接口该怎么设计,文末赠书


    在嵌入式Linux中,网络是很常用的一个功能,尤其在工业控制、物联网等领域,本节我们就来学习一下嵌入式Linux的网络接口设计
    1.1 嵌入式网络简介
    1.1.1嵌入式下的网络硬件接口
            提起网络,我们一般想到的硬件就是“网卡”,现在网卡已经是通过一个芯片来完成了,嵌入式网络硬件分为两部分:MAC和PHY,大家都是通过看数据手册来判断一款SOC是否支持网络,如果一款芯片数据手册说自己支持网络,一般都是说的这款SOC内置MAC,MAC类似I2C控制器、SPI控制器一样的外设。但是光有MAC还不能直接驱动网络,还需要另外一个芯片:PHY,因此对于内置MAC的SOC,其外部必须搭配一个PHY芯片。内部没有MAC的SOC芯片,就需要使用外置的MAC+PHY一体芯片了,这里就要牵扯出常见的两个嵌入式网络硬件方案了。
            1.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所示:
    11.png
    图1-1 主控SOC与外置MAC+PHY芯片连接
            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所示:
    12.png
    图1-2 内部MAC与外部PHY之间的连接
            大家在做项目的时候,如果要用到网络功能,强烈建议大家选择内部带有网络MAC外设的主控SOC!I.MX6ULL就有两个10M/100M的网络MAC外设,正点原子ALPHA开发板板载了两颗PHY芯片,型号为LAN8720。因此,本章节只讲解SOC内部MAC+外置PHY芯片这种方案。
    1.1.2 MII/RMII接口
            前面我们说了,内部MAC通过MII/RMII接口来与外部的PHY芯片连接,完成网络数据传输,本节我们就来学习一下什么是MII和RMII接口。
            1.MII接口
            MII全称是Media Independent Interface,直译过来就是介质独立接口,它是IEEE-802.3定义的以太网标准接口,MII接口用于以太网MAC连接PHY芯片,连接示意图如图1-3所示:
    13.png
    图1-3 MII接口
            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芯片的示意图如图1-4所示:
    14.png
    图1-4 RMII接口
            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接口,另外可能还需要复位、中断等其他引脚。
    1.1.4 RJ45接口
            网络设备是通过网线连接起来的,插入网线的叫做RJ45座,如图1-5所示:
    15.png
    图1-5 RJ45座子
            RJ45座要与PHY芯片连接在一起,但是中间需要一个网络变压器,网络变压器用于隔离以及滤波等,网络变压器也是一个芯片,外形一般如图1-6所示:
    16.png
    图1-6 网络变压器
            但是现在很多RJ45座子内部已经集成了网络变压器,比如最常用的HR911105A就是内置网络变压器的RJ45座。内置网络变压器的RJ45座和不内置的引脚一样,但是一般不内置的RJ45座会短一点。因此,大家在画板的时候一定要考虑你所使用的RJ45座是否内置网络变压器,如果不内置的话就要自行添加网络变压器部分电路!同理,如果你所设计的硬件是需要内置网络变压器的RJ45座,肯定不能随便焊接一个不内置变压器的RJ45座,否则网络工作不正常!
            RJ45座子上一般有两个灯,一个黄色(橙色),一个绿色,绿色亮的话表示网络连接正常,黄色闪烁的话说明当前正在进行网络通信。这两个灯由PHY芯片控制,PHY芯片会有两个引脚来连接RJ45座上的这两个灯。内部MAC+外部PHY+RJ45座(内置网络变压器)就组成了一个完整的嵌入式网络接口硬件,如图1-7所示:
    17.png
    图1-7 嵌入式网络硬件接口示意图
    1.1.5 PHY芯片基础知识
            PHY是IEEE 802.3规定的一个标准模块,前面说了,SOC可以对PHY进行配置或者读取PHY相关状态,这个就需要PHY内部寄存器去实现。PHY芯片寄存器地址空间为5位,地址 0~31共32个寄存器,IEEE定义了0~15这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所示:
    18.png
    图1-8 IEEE规定的前16个寄存器
            关于这16个寄存器的内容协议里面也进行了详细的讲解,这里就不分析了。大家可以找个具体的PHY芯片数据手册对比看一下,比如百M网络最常用的LAN8720A这个PHY,大家可以看一下LAN8720前面几个寄存器结构是否和图1-8中的一样。
            关于嵌入式Linux的网络接口设计就讲到这里。


    好书推荐

    全面解析基于ARM内核的嵌入式Linux驱动开发
    数十个项目例程和源代码  丰富的教学视频内容
    让单片机开发者熟练掌握嵌入式Linux驱动开发
    10.png
    清华大学出版社
    出版时间:2023-05-01
    定价:178元
    内容简介
    随着半导体技术和芯片技术的飞速发展,能运行嵌入式Linux系统的MPU芯片价格也在不断降低,ARM架构的芯片在手机、工业控制、物联网、自动驾驶等领域得到了广泛应用。以前大量使用MCU的地方也开始使用嵌入式Linux地系统。刷卡的闸机、汽车充电桩的操作面板、物联网网关等都有嵌入式Linux的身影,各企业对嵌入式Linux开发人才的需求也急剧增加。相比单片机开发,嵌入式Linux开发难度要大很多。尤其是最重要的驱动开发,嵌入式Linux内核采用面向对象思路设计,且已开发大量驱动框架,开发人员需要掌握这些驱动框架的使用,编写出符合嵌入式Linux要求的驱动。
    本书从最基本的点灯程序到网络驱动的编写,涵盖了Linux开发的三大驱动类型:字符设备驱动、块设备驱动和网络设备驱动。本书的一大特色就是涵盖了全设备树开发,除了最开始的几个为了讲解嵌入式Linux如何操作芯片寄存器的例程没有采用设备树外,其他的例程都采用设备树,基本涵盖了嵌入式Linux驱动开发中的常用外设。
    本书可作为广大从事嵌入式开发、物联网、工业控制开发等工程技术人员的学习和参考用书,也可作为高等学校计算机、电子、自动化等专业嵌入式系统、微机接口、物联网等课程的教材。

    作者简介
    左忠凯,14年参加工作以来一直从事于嵌入式教育,以第一作者身份著有《FreeRTOS源码详解与应用开发》。18年开始负责公司Linux教育平台的研发,编写了1800多页的Linux驱动开发教程,录制了200多讲Linux开发视频,负责的I.MX6ULL开发板自从发布至今,销量一直处于淘宝第一,Linux驱动开发相关视频在各大平台的点击量超过30万次。


    评论区说一说你对本书的看法,挑选几位用户送书







    签到签到
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-5 08:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    91

    主题

    2928

    帖子

    2

    金牌会员

    Rank: 6Rank: 6

    积分
    7809
    最后登录
    2024-4-26
    发表于 2023-6-5 19:31:44 | 显示全部楼层
    去年左老师还出过linux 驱动开发详解和驱动指南,也出过教学视频。今年实战应该是增加了很多linux驱动外设学习例程,写的非常详细的。结合硬件并参考以前的文档学过一段时间,三大块中有些地方还是没理解。希望这本书和相关视频让我们彻底踢开linux的大门,豁然开朗。友好的申请一下
    加油哦
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-2-26 09:09
  • 签到天数: 13 天

    [LV.3]偶尔看看II

    7

    主题

    991

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2018
    最后登录
    2024-4-27
    发表于 2023-6-6 09:06:15 | 显示全部楼层
    左盟主的书
    ~~~~~~~~~~~~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 16:01
  • 签到天数: 1480 天

    [LV.10]以坛为家III

    203

    主题

    2万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    92787
    最后登录
    2024-4-27
    发表于 2023-6-6 09:10:50 | 显示全部楼层
    本帖最后由 stm1024 于 2023-6-6 09:14 编辑

    另辟 蹊--径,居然也能成为敏感词?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2023-9-15 10:05
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    0

    主题

    25

    帖子

    0

    注册会员

    Rank: 2

    积分
    98
    最后登录
    2023-11-15
    发表于 2023-6-6 09:14:01 | 显示全部楼层
    学习Linux多年,一直不得其法,游离在Linux大门周围,不知道这本书能不能解决我的疑惑
    习惯打卡
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12

    主题

    789

    帖子

    1

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2726
    最后登录
    2024-4-4
    发表于 2023-6-6 09:18:48 | 显示全部楼层
    mark来学习一下。

    左大的书,看过他的视频,电子版的书,买过他的开发板,通俗易懂,以前也看过一段时间LINUX但是没有项目,且一个人重头到尾搞,感觉东西有点多
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 00:06
  • 签到天数: 1941 天

    [LV.Master]伴坛终老

    61

    主题

    1万

    帖子

    3

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    17305
    最后登录
    2024-4-27
    发表于 2023-6-6 09:55:18 | 显示全部楼层
    一直想学linux,奈何不知道怎么入门啊
    希望借这本书看看,能不能入门呢
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 270 天

    [LV.8]以坛为家I

    31

    主题

    2994

    帖子

    38

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    5316

    活跃会员

    最后登录
    2024-4-26
    发表于 2023-6-6 10:30:43 | 显示全部楼层
    一直希望有机会入门Linux系统,目前一直是个门外汉,所以希望有机会获得赠书的资格,让自己的能力有所提升,也方便大家进行深入的交流。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-7-24 09:25
  • 签到天数: 85 天

    [LV.6]常住居民II

    2

    主题

    225

    帖子

    0

    高级会员

    Rank: 4

    积分
    573
    最后登录
    2023-12-19
    发表于 2023-6-6 10:53:48 | 显示全部楼层
    左盟主的书搭配 IMX6U 板子,无敌
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2023-9-6 15:15
  • 签到天数: 211 天

    [LV.7]常住居民III

    34

    主题

    805

    帖子

    0

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2038
    最后登录
    2024-3-21
    发表于 2023-6-6 10:55:42 | 显示全部楼层
    Linux开始学是大学的时候,特别不习惯,但是编译又特别要这个gcc,学**还真的可以成为大神
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-28 05:16 , Processed in 0.155565 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表