本章节为大家讲解STM32自带的MAC和PHY芯片的基础知识,为下一章底层驱动的讲解做一个铺垫。
最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=95243 第6章 RL-TCPnet底层驱动说明 本章节为大家讲解RL-TCPn
往期周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 本周更新了一期视频教程
最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=104619 第6章 ThreadX NetXDUO网络协议栈移植到STM32F4
本章节为大家讲解RL-TCPnet的底层驱动,主要是STM32自带MAC的驱动实现和PHY的驱动实现。
往期周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 上周更新一期视频教程:
内存子系统是 SoC 中最复杂的系统之一,对芯片的整体性能至关重要。近年来,内存市场呈爆炸式增长,在移动、消费和企业系统中势头强劲。这不仅导致内存控制器 (MC) 越来越复杂,还导致将内存子系统连接到外部 DRAM 的 PHY变得非常复杂。
5)电流或电压驱动型的PHY,若为2线共模电感+自耦变压器形式,自耦变压器放在RJ45侧。
在飞凌嵌入式OKA40i-C开发板上虽然只有一个网口,但全志A40i-H处理器本身是有两个网络控制器的,因此在飞凌嵌入式提供的产品资料中提供了双网口解决方案。有的工程师小伙伴在开发过程中会遇见一些网卡的设计问题,今天小编为大家分享3种在使用OKA40i-C开发板时容易遇到的网卡软件问题以及排查思路。
CPU用的是Armada-3720,内核版本是4.14。两路网口,eth0用RGMII模式,20_18_2:0默认111, eth1用SGMII模式,20_18_2:0默认001,88e1512的phy地址只能用0、1,(0也是mdio广播地址)。
上图来自 瑞昱半导体 (RealTek) 的 RTL8201F 系列网卡 PHY 芯片手册。按OSI 7层网络模型划分,网卡PHY 芯片(图中的RTL8201F)位于物理层,对应的软件层就是本文讨论的 PHY 驱动层;而 MAC 位于 数据链路层,也是通常软件上所说的网卡驱动层,它不是本文的重点,不做展开。另外,可通过 MDIO 接口对 PHY 芯片进行配置(如PHY芯片寄存器读写),而 PHY 和 MAC 通过 MII/RMII 进行数据传输。
网卡(Network Interface Card,简称NIC),也称网络适配器,是电脑与局域网相互连接的设备。无论是普通电脑还是高端服务器,只要连接到局域网,就都需要安装一块网卡。如果有必要,一台电脑也可以同时安装两块或多块网卡。
从硬件的角度看,以太网接口电路主要由 MAC(Media Access Control,MAC)控制器和物理层接口 PHY(Physical Layer,PHY)两大部分构成。如下图所示:
本篇文章要写的是调试Xilinx网络IP时踩到的一个坑,也是控制PHY芯片时的一个坑,板卡上的PHY芯片是非常经典的88E1111,使用MDIO接口控制。
最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=95243 第7章 RL-TCPnet网络协议栈移植(RTX5) 本章教程为大家讲
1、 网口使用的是DM9161/9162(紧挨着9帧串口座的网口),而不是DM9000。
可以看到PHY的数据是RJ45网络接口(网线口)穿过了的差分信号,而PHY作用就是将差分信号转为数字信号,这块内容不用深究,制造商都设计好了。那我们干什么呢?(主要是对phy芯片进行模式选择,比如工作速率,工作模式)
通过之前的介绍<FPGA和USB3.0通信-USB3.0协议介绍>,我们大致了解到USB3.0整个协议异常复杂,就连物理层都需要SerDes(FPGA实现的情况)才可以,所以目前使用USB3.0时,搭档FPGA的最优解就是外置USB3.0 PHY片。
FPGA 传输的数据为单沿数据,而 PHY 传输的数据为双沿数据,所以FPGA 发送心跳包的最后需要使用 ODDR 原语将单沿数据转换为双沿数据。通常情况下 FPGA 处理数据使用的时钟为晶振产生的时钟(FPGA 时钟),而 FPGA 传输来的数据经过ODDR 原语后转换为双沿的数据都是和 PHY 的时钟同步,所以我们如果想把 FPGA 时钟的数据传给 PHY 芯片则需要进行跨时钟域,将 FPGA 时钟同步的数据转换为 PHY 时钟同步的数据。此处单沿转双沿数据采用 Output DDR 原语,简称 ODDR,将单沿 8bit 数据转换为双沿 4bit 数据。
从硬件上来说,一般PHY芯片为模数混合电路,负责接收电、光这类模拟信号,经过解调和A/D转换后通过MII接口将信号交给MAC芯片进行处理。一般MAC芯片为纯数字电路。
总结:上面已经将phy的状态设置成了 phydev->state = PHY_READY,同时完成了emac接口下的phy设备驱动注册,接下来将分析如何使用该phy设备驱动。
Mobile Industry Processor Interface 简称MIPI;MIPI(移动产业处理器接口)是MIPI联盟发起的为移动应用处理器制定的开放标准和一个规范。
实现网络通信实质上是PHY与MAC及RJ45接口实现信号传输。MAC 就是以太网控制器,MAC属于数据链路层,主要负责把数据封装成帧,对帧进行界定实现帧同步。对MAC地址和源MAC地址及逆行相应的处理并对错误帧进行处理。PHY属于物理层,在以太网控制器中负责物理层功能的芯片叫PHY芯片,因为网线上传输的是模拟信号而MAC发出或接收的信号为数字信号所以PHY主要负责对网络数据的编解码处理以及一些网络状态的控制。RJ45就是我们常用的网口座子。
PHY 芯片通常带有回环(Loopback)功能,用于 PHY 通信链路的测试。本文主要讨论三种常用 PHY 芯片的回环功能,并使用 Broadcom 的 B50612D 芯片进行 PHY 回环测试。
MultiGBASE-T包括2.5G/5G/10G/25G/40G五种类型双绞线PHY。它们与遍地可见的10M/100M/1000M 双绞线PHY不同,可能很多小伙伴对他们并没有基本的概念,这里笔者分别对他们进行一个简单的介绍(这部分内容双绞线自协商无直接关系,对本部分不感兴趣的读者可以跳过本章节)。下面笔者按照这五种PHY诞生的时间顺序进行阐述。
1.《【uboot】imx6ull uboot 2020.04源码下载和编译环境配置》 2.《【Ethernet】以太网卡LAN8720A分析和使用》
前面文章我们邀请了思科网络资深专家介绍数通专题系列,专家介绍了以太网自协商相关方面9的文章。
在嵌入式系统里,以太网是一个基本的接口,既用于调试,也用于数据传输。所以在单板调试过程中,以太网是一个基本的任务。如果以太网工作正常,也可以说是一个重要的里程碑。 Xilinx MPSoC支持多个网卡,应用成熟,下面是常见的调试思路。
测试方法:使用TestCenter向被测板子上的千兆以太网口打流,在FPGA内部通过自回环从源端口返回给TestCenter,通过看TestCenter控制界面上显示结果判断自回环是否正确。
概述:由于近期要使用以太网PHY芯片,于是在网上查找各种资料,学习这部分的知识,这篇文章是对当前的学习做一个汇总。海翎光电的小编目前也是在学习PHY,所以难免会有错误不足,有什么需要更正补充的,欢迎大家一起讨论交流。
假设fasta文件名为: aligned_fasta.fasta 读取fasta文件,转化:
MIPI C-PHY是手机中的重要接口,它的速率比D-PHY还要高,其速率单位是symbol/s/lane,而D-PHY的速率单位是bit/s/lane,换算关系是1 Symbol = 2.28 bits。
1、MIPI 联盟,即移动产业处理器接口(Mobile Industry Processor Interface)联盟。MIPI 是 MIPI 联盟发起的为移动应用处理器制定的开放标准和一个规范。
在以太网通信中,设备之间的物理局链路均由 PHY 芯片建立。PHY 芯片内部含有一些列寄存器,用户可通过这些寄存器来配置 PHY 芯片的工作模式以及获取 PHY 芯片的若干状态信息,如连接速率、双工模式、自协商状态等。PHY 内部寄存器的读写通过 MDIO 接口进行。
在Xilinx的ZCU102和ZCU106单板设计中,使用了管脚PS_MODE1作为外部USB Phy的复位信号。在MPSoC的文档ug1085和ug1087中,关于PS_MODE1的信息比较少。下面是更详细的描述。
数据中心,存储,汽车和其他新兴市场应用程序的增长,正在推动DDR5,LPDDR5的发展。像它们的前辈一样,最新的内存技术还使用DFI(内存控制器和PHY之间的标准接口)来降低集成成本并提高性能和数据吞吐效率。DFI也随着存储技术而发展,DFI 5.0可以确保使用DDR5 / LPDDR5的系统中的更高性能。
MultiGBASE-T自协商,主要协商的内容为“速度双工”、“主从”两个关键项(协商失败,链路不能正常建立链接)和“流控”、“EEE”、“Fast Retrain”、“PMA training reset request” 、“PHY short reach mode” 、“10GBASE-T loop timing”六个非关键项(协商失败,链路能正常建立链接)。下面先介绍MultiGBASE-T自协商的BasePage和ExtendedNextPage的bits分配, 然后就这八大类自协商内容进行阐述。
上图中,88E6350/88E6351为千兆交换,当内置的千兆PHY作为百兆使用时,MDIP/N[2]和MDIP/N[3]是Unused,在MDI配置下,MDIP/N[0]作为TX±,MDIP/N[1]作为RX±;在MDIX配置下,MDIP/N[0]作为RX±,MDIP/N[1]作为TX±;
复制一份imx_v6_v7_defconfig,这里我命名为dfos_mini_defconfig。
电脑上位机将一幅 1024*768 图片通过双绞线(网线),发送给板卡网口(RJ45接口),RJ45接口将数据传输给网卡(PHY芯片),PHY 芯片将差分信号转换成双沿数据,IDDR将双沿数据转换成单沿数据传输给 FPGA,FPGA 处理完成后将图像数据缓存到DDR3 中,DDR3 中的图像数据使用 UDP 协议传回 PC 机,同时将 DDR3 中数据使用 HDMI 传输到显示器上。
说是网络,其实是网卡驱动。而且是针对于FREESCALE芯片的FEC端的驱动,我不知道别的芯片厂商的FEC模块是怎么样的, 但就我接触过的几款FREESCALE的芯片来看,比如基于POWERPC的860T和ARM系列的MX27等,他们的FEC有一个明显的特点就是 都是由BD和一个DMA缓冲组成,而这个DMA是专用的,也就是只是给FEC使用,区别于芯片内的DMAC模块。我们先来从fec.c这 个与硬件直接相关的看起: 首先找到module_init(fec_enet_module_init);这里fec_enet_module_init为入口点 fec_enet_module_init() 首先调用fec_arch_init,它调用gpio_fec_active设置GPIO为FEC模式,然后如果有电源管理的话,就调用 mxc_fec_power_on开启电源。接着调用clk_get,clk_enable, clk_put设置FEC的CLOCK,这里退出fec_arch_init函数,接 着循环FEC_MAX_PORTS次,也就是有几个FEC就循环几次,在这里我们只有一个FEC,所以这个循环不用管。接下来因为我们 用的是以太网,所以调用dev = alloc_etherdev(sizeof(struct fec_enet_private));申请一个以太网设备描述,其中 struct fec_enet_private是用来描述FEC专有的数据结构。如下: /* The FEC buffer descriptors track the ring buffers. The rx_bd_base and * tx_bd_base always point to the base of the buffer descriptors. The * cur_rx and cur_tx point to the currently available buffer. * The dirty_tx tracks the current buffer that is being sent by the * controller. The cur_tx and dirty_tx are equal under both completely * empty and completely full conditions. The empty/ready indicator in * the buffer descriptor determines the actual condition. */ struct fec_enet_private { /* Hardware registers of the FEC device */ volatile fec_t *hwp; /* The saved address of a sent-in-place packet/buffer, for skfree(). */ unsigned char *tx_bounce[TX_RING_SIZE]; struct sk_buff* tx_skbuff[TX_RING_SIZE]; struct sk_buff* rx_skbuff[RX_RING_SIZE]; ushort skb_cur; ushort skb_dirty; /* CPM dual port RAM relative addresses. */ void * cbd_mem_base; /* save the virtual base address of rx&tx buffer descripter */ cbd_t *rx_bd_base; /* Address of Rx and Tx buffers. */ cbd_t *tx_bd_base; cbd_t *cur_rx, *cur_tx; /* The next free ring entry */ cbd_t *dirty_tx; /* The ring entries to be free()ed. */ struct net_device_stats stats; uint tx_full; spinlock_t lock; uint phy_id; uint phy_id_done; uint phy_status; uint phy_speed; phy_info_t const *p
今天给大侠带来基于FPGA的以太网控制器(MAC)设计,由于篇幅较长,分三篇。今天带来第三篇,下篇,程序的仿真与测试和总结。话不多说,上货。
在MAC/PLS服务接口支持5 Gb/s和2.5 Gb/s的速度(在Medium侧为6.4gbps和3.2gbps);
领取专属 10元无门槛券
手把手带您无忧上云