ALPHA开发板网络方案说明

news/2024/7/5 5:43:39

一. 简介

正点原子 ALPHA开发板,包括我们移植的 Uboot,都是参考了 NXP(恩智浦)官方的开发板的。

I.MX6UL/ULL 内部有个以太网 MAC 外设,也就是 ENET ,需要外接一个 PHY 芯片来实现网络通信功能,也就是内部 MAC+ 外部 PHY 芯片的方案。

二.  NXP官方uboot针对ALPHA开发板网络驱动更改

1.  I.MX6U-ALPHA 开发板网络简介

(1)   网络方案:

I.MX6UL/ULL 内部有个以太网 MAC 外设,也就是 ENET ,需要外接一个 PHY 芯片来实现网络通信功能,也就是内部 MAC+ 外部 PHY 芯片的方案。
大家可能听过 DM9000 这个网络芯片,在一些没有内部 MAC CPU 中,比如三星的 2440 4412 等,就会采用 DM9000 来实 现联网功能。 DM9000 提供了一个类似 SRAM 的访问接口,主控 CPU 通过这个接口即可与 DM9000 进行通信, DM9000 就是一个 MAC+PHY 芯片。这个方案就相当于外部 MAC+ 外部 PHY

 I.MX6U 这样的内部 MAC+PHY 芯片与 DM9000 方案比有什么优势吗?那优势大了去了!
首先,是通信效率和速度,一般 SOC 内部的 MAC 是带有一个专用 DMA 的,专门用于 处理网络数据包,采用 SRAM 来读写 DM9000 的速度是压根就没法和内部 MAC+ 外部 PHY 片的速度比。采用外部 DM9000 完全是无奈之举,谁让 2440 4412 这些芯片内部没有以太网 外设呢,现在又想用有线网络,没有办法只能找个 DM9000 的方案。从这里也可以看出,三星 2440 4412 这些芯片设计之初就不是给工业产品用的,他们是给消费类电子使用的,比如手 机、平板等,手机或平板要上网,可以通过 WIFI 或者 4G ,我是没有见过哪个手机或者平板上 网是要接根
网线的。正点原子的 I.MX6U-ALPHA 开发板也可以通过 WIFI 或者 4G 上网,这个 是后话了。

(2)   NXP官方IM6ULL开发板与正点原子ALPHA开发板各自所使用的 PHY芯片是什么?

I.MX6UL/ULL 有两个网络接口 ENET1 ENET2 ,正点原子的 I.MX6U-ALPHA 开发板提供了这两个网络接口,其中 ENET1 ENET2 都使用 LAN8720A 作为 PHY 芯片。
NXP 官方的 I.MX6ULL EVK 开发板使用 KSZ8081 这颗 PHY 芯片, LAN8720A 相比 KSZ8081 具有体积小、 外围器件少、价格便宜等优点。
直接使用 KSZ8081 固然可以,但是我们在实际的产品中不一定 会使用 KSZ8081 ,有时候为了降低成本会选择其他的 PHY 芯片,这个时候就有个问题:换了 PHY 芯片以后网络驱动怎么办?为此,正点原子的 I.MX6U-ALPHA 开发板将 ENET1 ENET2 PHY 换成了 LAN8720A ,这样就可以给大家讲解更换 PHY 芯片以后如何调整网络驱动,使 网络工作正常。

2.  PHY网络芯片LAN8720A

(1)   LAN8720A硬件接口

正点原子的 I.MX6U-ALPHA 开发板提供了这两个网络接口,其中 ENET1 ENET2 都使用LAN8720A 作为 PHY 芯片。

PHY网络芯片 LAN8720A是通过什么接口与 IMX6ULL芯片连接的?

LAN8720A 内部是有寄存器的, I.MX6ULL 会读取 LAN8720 内部寄存器来判断当前的物理链接状态、连接速度 (10M 还是 100M) 和双工状态 ( 半双工还是全双工 )
I.MX6ULL 通过 MDIO 接口来读取 PHY 芯片的内部寄存器, MDIO 接口有两个引脚, ENET_MDC ENET_MDIO ENET_MDC 提供时钟, ENET_MDIO 进行数据传输。

一个 MDIO 接口可以管理 32 PHY 芯片,同一个 MDIO 接口下的这些 PHY 使用不同的器件地址来做区分, MIDO 接口通过不同的 器件地址即可访问到相应的 PHY 芯片。

对于正点原子的 ALPHA开发板而言, ENET1的PHY ADDR是0x0,ENET2的PHY ADDR是0X1.

网络数据连接:

通过原理图可以知道,拿 网口 ENET1来说,网络数据的传输通过 ENET1_TXD0,ENET1_TXD1,ENET1_TXEN,ENET1_RXD0,ENET1_RXD1,ENET1_RXER这些引脚进行的。

复位引脚:

每个LAN8720都有一个复位引脚,ENET1是SNVS_TAMPER7,ENET2是SNVS_TAMPER8。

(2)   LAN8720A驱动说明

注意:IEEE802.3对 网络PHY芯片做了规定,规定了 网络PHY芯片的地址 0~15位共16个寄存器的功能。前 16个寄存器的功能都必须保持一致。而且前 16个寄存器可以保证将 PHY网络芯片驱动起来。

因此,就会存在一个通用 PHY驱动。即通用PHY驱动就能驱动所有的 PHY芯片。

LAN8720驱动,因为所有的PHY,其前16个寄存器一模一样,因此uboot里面已经写好了通用PHY驱动,所以理论上不需要修改。

三.  总结

综上所述,

我们要更改 网络 ENET1 网络或  ENET2 网口驱动,重点是更改三点:

①  LAN8720A 的器件 ID,即更改 PHY芯片的 ADDR。

②  删除原有的74LV595相关代码。

③  ENET2 复位引脚初始化,具体就是 添加ALPHA开发板的网络复位IO。


http://lihuaxi.xjx100.cn/news/1710074.html

相关文章

QWidget快速美化-圆形蓝色单选框

将代码复制进QRadioButton的样式表 效果: 代码: QRadioButton{font:75 9pt "Arial";background:transparent;color:white;border:none; }QRadioButton:disabled{color:gray; }QRadioButton::indicator{width:12px;height:12px;border-radius:8px; }QRadioButton::i…

爱创科技携手洽洽食品,探索渠道数字化最优解!

坚果的下半场,是从吃到喝。 消费升级大潮下,健康养生理念逐渐深入人心。以“天然健康”为核心的食品新消费潮流正加速形成,一个个打着“美味与营养”黄金设定的品类风口正被不断创建,其中人气有增无减的当属植物基饮品。据相关报告…

使用Fragement(碎片)

一、Fragment简介 屏幕大小的差距可能会使同样的界面在不同设备上显示出不同的效果,为了能同时兼顾到手机和平板电脑的开发,从Android3.0版本开始提供了Fragment。 Fragment(碎片)是一种嵌入在Activity中的UI片段,它…

C++(boost):通过boost::process::child同步调用其他程序

boost提供了boost::process::child,可以通过其调用其他程序,并获得输出: #include <boost/process/child.hpp> #include <boost/process/io.hpp> #include <vector> #include <iostream> #include <string> #include <tuple>using nam…

leetcode:2347. 最好的扑克手牌(python3解法)

难度&#xff1a;简单 给你一个整数数组 ranks 和一个字符数组 suit 。你有 5 张扑克牌&#xff0c;第 i 张牌大小为 ranks[i] &#xff0c;花色为 suits[i] 。 下述是从好到坏你可能持有的 手牌类型 &#xff1a; "Flush"&#xff1a;同花&#xff0c;五张相同花色的…

MTK6737安卓核心板-MT6737核心板_4G安卓模块

MT6737核心板以竞争力的价格提供出色的性能和功耗效率&#xff0c;降低了BOM、GMO和内存成本&#xff0c;符合以价值为导向的市场需求。该核心板是一种先进的解决方案&#xff0c;为终端用户提供了高品质又经济实惠的体验。它与全球范围内的IMS兼容&#xff0c;支持VoLTE、ViLT…

msvcr100.dll丢失怎样修复,msvcr100.dll丢失怎么解决(最新方法分享)

我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcr100.dll丢失”。这个错误通常会导致某些程序无法正常运行。为了解决这个问题&#xff0c;我们需要采取一些措施来修复丢失的msvcr100.dll文件。本文将介绍五个有效的解决方法&#xff0c;帮助大家解决这一问题。 一…

并发编程常见面试题(超详细)

文章目录 并发编程进程和线程的区别并发和并行的区别创建线程的方式线程之间的状态&#xff0c;状态之间的转换新建三个线程&#xff0c;如何保证按顺序执行wait方法和sleep的区别如何停止一个正在运行的线程synchronized关键字底层原理Monitor属于重量级锁&#xff0c;了解过锁…