Xilinx社区
首页 > Steve专栏 > Adam Taylor玩转MicroZed系列第78部分:Zynq SoC以太网第二部分
Steve专栏
Adam Taylor玩转MicroZed系列第78部分:Zynq SoC以太网第二部分
来源:  时间:2015-06-02  浏览量:2863

在先前的几篇博文中我们介绍了Zynq SoC上的千兆以太网控制器,其提供了介质访问控制层(MAC)功能。这是搭建一个IP栈的第一步。现在借助几个赛灵思SDK中提供的范例,我们将研究如何配置MAC来发送和接收数据包,该SDK显示了MAC具体是如何工作的。

首先,打开SDK然后参考带有千兆以太网控制的BSP来创建一个空白应用。(上述工作需要在Vivado设计套件中完成)

赛灵思SDK中有展示以太网MAC发送帧数据的完整范例。我将围绕这个不错的实例来阐述本部分。然而,要遵循要事第一的原则。首先我们需要在我们的工程中包含这些示例文件。通过几个简单的点击操作我们就能完成这个工作,选择导入->文件系统,定位到<安装目录>/SDK/2014.1/data/embeddedsw/XilinxProcessorIPLib/drivers/emacps_v2_0/examples

然后导入下列文件:

•c文件——例程本身文件

•c源文件——例程中所使用函数的具体实现

•h头文件——所使用函数的声明

把这些文件包含到你的工程中去之后,你就可以build示例工程了,如果板子和终端程序连上了,你应该可以看到示例成功(没连上则会失败)的现象。然而,上面这些步骤并不会帮助我们理解如何配置和使用Zynq SoC上的以太网MAC。

那么让我们来研究研究这些例程文件,然后看看它们具体如何工作,这样才能更好的理解MAC。我们从xemacps_example_intr_dam.c文件开始。该文件中第一步做的工作是:
1.在进行相关声明后,该文件定义了一系列Rx和Tx缓冲器描述器、设备ID号、中断号和寄存器偏移和值。
2.给发送和接收以太网数据帧声明全局变量,设置帧长度以及发送和接收的帧数目。

主要功能在函数EmacPSIntrExample中实现。该函数解锁SLCR(系统层控制寄存器),然后给MAC建立时钟,接着使用许多其它外设中用到的方式来配置和初始化MAC——查找配置,接着利用实例的指针来进行初始化。

初始化过后,MAC地址就设置好了。该地址包含在文件xemacps_example_util.c中,长度为6字节。其被定义为一个字符数组;本例中为00:0A:35:01:02:03。MAC地址是辨认连接到网络上节点的唯一标识。MAC地址设置好之后,有三个处理函数被创建,在发送、接收或错误发生的时候会调用它们。

MAC配置完成之后,下一步就是给发送和接收缓冲器建立DMA缓冲器描述器(BD)了。

缓冲器描述器(BD)结构

缓冲器描述器(BD)结构

XEmacPs_BdRingCreate(&(XEmacPs_GetRxRing
                                 (EmacPsInstancePtr)),
                                 RX_BD_LIST_START_ADDRESS,
                                 RX_BD_LIST_START_ADDRESS,
                                 XEMACPS_BD_ALIGNMENT,
                                 RXBD_CNT);

要建立一个BD环,我们需要5样东西:

1.接收或发送指针实例,本例中由函数XEmacPs_GetRxRing函数提供。对于发送也有相似的函数。

2.缓冲区内存的物理起始地址——在先前的声明中定义

3.缓冲区内存的虚拟起始地址——这里和物理地址相同,因为cache被禁用了。

4.字节对齐方式,本例中为4字节对齐。

5.所需创建缓冲区描述器的数量。

在创建好环之后,我们可以给新创建的环克隆一下缓冲区描述器模板。对于发送环也是进行类似的工作。

创建及克隆后的发送缓冲区描述器

创建及克隆后的发送缓冲区描述器

函数EmacPsSetupIntrSystem使能中断。这和其它我们研究过的使用中断的例子很相似。(详情参见博客1213)。

利用函数EmacPsDmaSingleFrameIntrExample可以产生和接收帧。该函数同时使用发送和接收缓冲区描述器来发送及接收1000字节有效负荷帧。在MAC配置为环回模式下,该函数仅仅是把发送帧和接收帧校验一下,以此来验证例程好使。

帧的构成是很有意思的。一个以太网帧的组成为:

● 8字节帧头

● 6字节目标地址

● 6字节源地址

● 2个类型字节——其定义了包含在数据填充里协议的类型

● 46到1500个数据或填充字节

● 4个CRC帧校验字节

发送帧TxFrame被定义为EthernerFrame类型。它是一个1532字符大小的字符数组。因此创建发送帧的方式是利用一个指向数组中每个成员的指针,然后把指针设置为需要的值。本例中,源地址及目标地址设置为和MAC地址一样。有效荷载仅仅包含了一个递增计数器的值,以太网类型设为1000。

发送帧需要被插入到缓冲区描述器中去,这样我们才能把它提交到硬件。本例中,发送帧被分割到两个缓冲区描述器中去,以此来展示如何使用多重缓冲区描述器,而接收帧则包含在单缓冲区描述器中。

建立缓冲区描述器然后提交到硬件

建立缓冲区描述器然后提交到硬件

接下来对于接收帧缓冲区描述器也是一样的过程,把它指向一个接收帧字符数组。在发送和接收帧缓冲区描述器都建立好并且提交到硬件之后,下面的描述就可以使能传输了:

传输完成后,处理函数被触发,发送帧计数器递增,然后缓冲区描述器被清空。接着会对比发送和接收帧来保证它们一致;成功或失败将会显示出来。

尽管花了很长时间解释所有的东西,然而如果想创建一个IP栈,我们必须理解MAC工作原理以及知道如何配置它。在经过这个例子后,我们可以看出配置Zynq SoC的以太网MAC来传输数据也没有什么难的。

现在,你可以方便地获取第一年的亚当·泰勒MicroZed开发板编年史Kindle电子书版本了,很实惠仅需7.5美元。点击这里。

原文链接:http://forums.xilinx.com/t5/Xcell-Daily-Blog/Adam-Taylor-s-MicroZed-Chro...

 ©  Copyright 2014 Xilinx Inc

如需转载,请注明出处

热点文章
精选视频
推荐资源

中国授权培训机构

北京 电话:(010)82757632
      (010) 62192881
深圳 电话:(0755)86186715
武汉 电话:(027)61389792
成都 电话:(028)80821007
南京 电话:(025)66022032
西安 电话:(029)82230498
邮箱:sales@e-elements.com

中国授权经销商

香港 电话:(852)22127848
北京 电话:(010)84148118
成都 电话:(028)86528262
上海 电话:(021)33678387
深圳 电话:(0755)26584925
武汉 电话:(027)87322806
邮箱:china@avent.com
深圳 电话:(0755)26743210
上海 电话:(021)51696680
北京 电话:(010)51726678
成都 电话:(028)85139576
武汉 电话:(027)87690155
邮箱:
xilinx_enquiry@comtech.com.cn

社区主办


《电子产品世界》杂志社

内容提供


    赛灵思公司

Copyright ©2000-2015 ELECTRONIC ENGINEERING & PRODUCT WORLD. All rights reserved.
京ICP备12027778号-2 北京市公安局备案:1101082052