hugeice 发表于 2010-1-15 13:09:12

EK-LM3S8962 以太网速度测试 96Mbps ! (无OS、无协议栈)

本来另外一个帖子里已经讲过了,不过还是按捺不住激动要郑重的通知大家一下 ^_^

用免费申请的EK-LM3S8962开发板,写了一个简单的以太网发送速度测试程序,发送的数据是一个固定的UDP报文,循环反复发送,实测PC端网卡占用率 96%,也就是在 96Mbps 左右!

当然这个测试不涉及任何计算,实际应用中是没有意义的,不过可以看出LM的网口效率还是挺高的,如果能用DMA的话就更好了。(8962好像没有DMA?9000系列才有?)

另外,说明一下,这个测试是没有跑协议栈的,更没有操作系统,只是单纯的往网口的FIFO写数据,测试以太网帧的发送速度。目的是为了了解一下器件传输速度的极限,无实际应用意义。


http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_526433.JPG
PC端网络占用率 (原文件名:netload.JPG)

http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_526434.JPG
Wireshark抓包结果 (原文件名:pak.JPG)

hugeice 发表于 2010-1-15 13:11:26

测试代码:略去UDP报文数据部分(太长)

#include "../../../inc/hw_ints.h"
#include "../../../inc/hw_memmap.h"
#include "../../../inc/hw_nvic.h"
#include "../../../inc/hw_types.h"
#include "../../../inc/hw_ethernet.h"
#include "../../../driverlib/sysctl.h"
#include "../../../driverlib/gpio.h"
#include "../../../driverlib/ethernet.h"


static unsigned char nMACAddr[] = {0x00, 0x07, 0x63, 0x04, 0xF9, 0x30, 0x00, 0x00};
static unsigned char nSendData[] = {
/*Length = 1066 - 14 = 1052(0x041c)*/
                        0x1c, 0x04,                       
/*Frame*/
/*0000*/        0x00, 0x14, 0x2a, 0x6c, 0xae, 0xa8, 0x00, 0x07, 0x63, 0x04, 0xf9, 0x30, 0x08, 0x00, 0x45, 0x00,

// 此处略去若干行
// ......
//

/*Pads*/
                        0x00, 0x00//, 0x00, 0x00
};

int main(void)
{
        unsigned long* pS;
        unsigned long nEthClk, ulTemp;
        int i;

        // Set the clocking to run at 50MHz from the PLL.
        SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ);

        // Enable and Reset the Ethernet Controller.
        SysCtlPeripheralEnable(SYSCTL_PERIPH_ETH);
        SysCtlPeripheralReset(SYSCTL_PERIPH_ETH);
       
        // Enable Port F for Ethernet LEDs.
        //LED0      Bit 3   Output
        //LED1      Bit 2   Output
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
        GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_2 | GPIO_PIN_3, GPIO_DIR_MODE_HW);
        GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_2 | GPIO_PIN_3, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
       
        // Intialize the Ethernet Controller and disable all Ethernet Controller
        // interrupt sources.
        EthernetIntDisable(ETH_BASE, (ETH_INT_PHY | ETH_INT_MDIO | ETH_INT_RXER | ETH_INT_RXOF | ETH_INT_TX | ETH_INT_TXER | ETH_INT_RX));
        ulTemp = EthernetIntStatus(ETH_BASE, false);
        EthernetIntClear(ETH_BASE, ulTemp);
       
        // Initialize the Ethernet controller for operation
        nEthClk = SysCtlClockGet();
        EthernetInitExpClk(ETH_BASE, nEthClk);

        // Configure the Ethernet controller for normal operation
        // Enable TX Duplex Mode
        // Enable TX Padding
        EthernetConfigSet(ETH_BASE, (ETH_CFG_TX_DPLXEN | ETH_CFG_TX_PADEN | ETH_CFG_TX_CRCEN));

        HWREG(ETH_BASE + MAC_O_THR) = 0x0;

        // Program the MAC Address (01-23-45-67-89-AB)
        EthernetMACAddrSet(ETH_BASE, nMACAddr);

        // Enable the Ethernet controller
        EthernetEnable(ETH_BASE);

        // Send
        while(1)
        {
                // Wait for current packet (if any) to complete.
                while(HWREG(ETH_BASE + MAC_O_TR) & MAC_TR_NEWTX)
                {
                }

                // Copy data to FIFO
                pS = (unsigned long*)nSendData;
                for ( i = 0; i < sizeof(nSendData) / 4; i++ )
                        HWREG(ETH_BASE + MAC_O_DATA) = *pS++;

                // Activate the transmitter
                // HWREG(ETH_BASE + MAC_O_TR) = MAC_TR_NEWTX;
        }
}

astudent 发表于 2010-1-15 13:11:33

关注这个话题

wenming 发表于 2010-1-15 13:16:03

这个片子太厉害了,我们使用9G20,400M的ARM9,平均速度才能达到50M.

hugeice 发表于 2010-1-15 14:31:41

用例子StellarisWare\boards\ek-lm3s8962\enet_lwip,写了一小段循环发送UDP的代码替代原来的死循环,实际测试PC端网口资源占用22%,因此可以看出协议的处理所消耗的资源还是蛮大的,TCP没有测试,应该会更慢。

to【3楼】 wenming 老王
    你们9G20测试的时候是通过协议栈来测试吗?
    如果是那样的话会慢很多,毕竟协议栈没有针对器件进行优化

wenming 发表于 2010-1-15 14:39:17

我们用的BSD协议栈.LINUX内核自带的,使用TCP测试4K,小文件.

hugeice 发表于 2010-1-15 14:58:01

to 【5楼】 wenming 老王
    Linux下的性能估计跟网卡驱动有很大的关系


附上测试工程,有板子的都可以感受一下,程序中发送的目的MAC地址是我的计算机,大家可以修改一下,改成自己电脑的MAC地址。(测试的电脑由于收到大量的UDP包,速度会变慢!)

以太网速度测试工程MyEthernetourdev_526496.rar(文件大小:59K) (原文件名:MyEthernet.rar)

aysyjgw 发表于 2010-1-15 15:00:32

真厉害

ffxz 发表于 2010-1-15 15:03:52

回复【3楼】wenming老王
这个片子太厉害了,我们使用9G20,400M的ARM9,平均速度才能达到50M.
-----------------------------------------------------------------------

他的测试和你的测试是两样的,

他的是直接往硬件中一直不断的持续写,而你的经过了协议层,一层层上来/下去的。

lm3s上,TCP测试过,
无OS的情况,LwIP的发送速度在3.2MB/s左右,接收速度在800KB/s左右
有OS的情况(RT-Thread),lwIP的发送速度在2.2MB/s左右,接收速度700KB/s左右。

是LM3S6918的片子

jovitian 发表于 2010-1-28 21:14:30

回复【楼主位】hugeice 戬峰
-----------------------------------------------------------------------

请问楼主,为什么我用你的项目程序改成自己的MAC地址,结果抓包显示还是发往您的地址呢?

jovitian 发表于 2010-1-28 21:15:05

我给您发了个邮件,您看下吧

lovecsu 发表于 2010-1-28 23:27:40

mark这些天我也使用8962学习tcp/ip,有时间测试一下

hugeice 发表于 2010-1-29 16:15:28

EthernetMACAddrSet(ETH_BASE, nMACAddr); 是设置单片机的MAC地址,也就是源地址,要修改目的MAC地址要改以太网帧头

AVRman 发表于 2010-1-29 20:24:58

理论上的100M

hugeice 发表于 2010-1-31 21:46:27

LM3S的以太网口的发送FIFO只能容纳一个以太网帧,因此达不到理论上点100M,因为没有发送的时候才能开始向发送FIFO填充一个新的以太帧,而填充是需要时间的,填充的这段时间是没有发送数据的,因此肯定达不到理论上的100M!

为什么就不能把发送FIFO弄两个,或者扩大一倍,采用PingPong方式,那样就能让网口100M全负荷运行了,不解……

接收FIFO可以容纳多帧,因此只要帧小于2K(以太网标准最大帧大小1500字节,但LM3S可以发送2K大小的非标准的帧)是有可能达到100M的接收性能的,不过这个纯属猜想,没有验证,呵呵

Fire_cow 发表于 2010-1-31 22:05:17

我的开发板还没有开工呢?

awakening 发表于 2010-1-31 22:19:07

实际效果会差很多,之前我在8738上用lwip做过,收到pc机发送的tcp包后回传,能做到双向同时10M多.没有dma的支持,速度提升有限,而且cpu没有留下太多的时间给别的处理.看截图:http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_531289.jpg
(原文件名:QQ截图未命名.jpg)
黄线是pc上接受的速度,红线是发送的速度.总速率到了20M+

ddcour 发表于 2010-1-31 23:00:55

关注一下

hjk3344547 发表于 2010-2-8 01:21:08

这个板子很火了

liumaojun_cn 发表于 2010-2-8 09:28:05

mark.

chen112 发表于 2010-4-25 00:48:06

回复【楼主位】hugeice戬
-----------------------------------------------------------------------

mark

hebin939 发表于 2010-5-8 17:15:00

刚刚测试通过;;

移植中需要修改的地方是:
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_552434.jpg
需要修改的地方 (原文件名:ethernet test 中需要修改的部分.jpg)

效果图:
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_552431.jpg
以太网测试 (原文件名:ethernet test.jpg)

最后 如果 板子直接与电脑相连,网线需要用交叉线。。

haeha 发表于 2010-5-8 17:38:11

我也测试过:
1. zlg的LM3Ss8962开发板以及淘宝上买的6916开发板,无操作系统+lwip,一直向PC发UDP包,包大小1500字节,平均速率22Mbps。丢包率<0.3%
2. ucos+lwip,测试条件相同,最好的情况下平均速率3Mbps。

hebin939 发表于 2010-5-8 18:58:32

回复【22楼】haeha
我也测试过:
1. zlg的lm3ss8962开发板以及淘宝上买的6916开发板,无操作系统+lwip,一直向pc发udp包,包大小1500字节,平均速率22mbps。丢包率&lt;0.3%
2. ucos+lwip,测试条件相同,最好的情况下平均速率3mbps。
-----------------------------------------------------------------------

haeha 兄弟,能不能共享你的 ucos+lwip程序?

psocfans 发表于 2010-5-12 15:13:24

mark

bear2529 发表于 2010-7-13 09:00:54

-----------------------------------------------------------------------
请问楼主,为什么我用你的项目程序改成自己的mac地址,结果抓包显示还是发往您的地址呢?
-----------------------------------------------------------------------

貌似楼主的以太网帧里封装了ip帧,所以ip那部分也需要自己改

bear2529 发表于 2010-7-13 09:02:13

我想请问大家,在发送目标mac地址之前 为什么要发送
/*Length = 1066 - 14 = 1052(0x041c)*/
0x1c, 0x04,

这2个字节呢

hugeice 发表于 2010-7-13 13:15:15

写入FIFO的头两个字节是该帧数据的长度, 长度不包括以太帧头部, 所以减去14字节. 结果按照主机字节顺序(低字节在前,高字节在后)写入FIFO.这是LM的芯片的以太网外设的特性, 具体可以看8962的datasheet的以太网部分关于FIFO格式的描述

eworker 发表于 2010-7-31 17:58:17

回复【14楼】hugeice 戬
lm3s的以太网口的发送fifo只能容纳一个以太网帧,因此达不到理论上点100m,因为没有发送的时候才能开始向发送fifo填充一个新的以太帧,而填充是需要时间的,填充的这段时间是没有发送数据的,因此肯定达不到理论上的100m!
为什么就不能把发送fifo弄两个,或者扩大一倍,采用pingpong方式,那样就能让网口100m全负荷运行了,不解……
接收fifo可以容纳多帧,因此只要帧小于2k(以太网标准最大帧大小1500字节,但lm3s可以发送2k大小的非标准的帧)是有可能达到100m的接收性能的,不过这个纯属猜想,没有验证,呵呵
-----------------------------------------------------------------------

2K的接受FIFO,还是太小了。

ADO1234 发表于 2010-7-31 21:22:37

好像买回来玩一下啊!

zhang..yb 发表于 2010-8-2 14:00:13

请问LZ:

我的电脑IP 为 172.17.109.16, 怎样化为6字节的 IP 地址?

mawenwei 发表于 2010-8-3 07:59:06

回复【30楼】zhang..yb
请问lz:
我的电脑ip 为 172.17.109.16, 怎样化为6字节的 ip 地址?
-----------------------------------------------------------------------

看一下例程,只要用到以太网实验的例程都有

zhang..yb 发表于 2010-8-4 09:54:55

楼上,找不到呀,可否解释一下,谢谢!

gxy508 发表于 2010-8-4 13:18:20

mark

jkhu 发表于 2010-9-2 18:20:34

回复【30楼】zhang..yb
请问lz:
我的电脑ip 为 172.17.109.16, 怎样化为6字节的 ip 地址?
-----------------------------------------------------------------------

6位的不是IP地址,是MAC地址,也就是网卡的物理地址,WIN+R,然后输入cmd,打开dos窗口,输入ipconfig -all,回车
显示的就是所有网卡的信息,MAC地址就是那个physical address。

xuhe1206 发表于 2010-9-2 19:34:38

最近也在看这方面的,不晓得有os的和没有os的究竟有什么区别的》?

zsfang0104 发表于 2010-10-9 14:15:57

mark

jiangkun_weike 发表于 2010-11-18 17:38:50

mark

spy2008 发表于 2010-11-21 17:25:44

学习,正在用8962

cu_ice 发表于 2010-11-22 16:53:42

MARK,刚收到板子,正好要研究

hong1986 发表于 2010-11-22 17:37:32

mark

NJ8888 发表于 2011-1-7 21:45:06

我测试过UDP,最快3MBYTES有效数据,发送前后用IO翻转,,每个包1200字节有效数据,连_发10个包,看IO翻转,同时看电脑UDP,没有丢失,当然如果一个包比较小那速度就满了,8个字节的小包也要70us发完,但是1200字节的大包只要400us发完

uuu520 发表于 2011-7-23 13:47:29

mark楼主真牛学习了

iirf 发表于 2011-7-27 14:49:54

MARK!!!

arm920t 发表于 2011-9-10 12:06:54

没操作系统当然快的多。

58642902 发表于 2011-9-19 21:28:36

收藏了~~

xzq1019@163.com 发表于 2012-8-13 19:21:37

楼主厉害,我自己做了一块板子,用了别人做的核心板, 自己布的底板,效果为94M--95M之间,不到96M
同样的程序在EK8962板子上可以达到96M,这是为啥?

heying1991 发表于 2012-10-10 11:04:37

学到这了跑一下

zhangbing123 发表于 2013-2-19 16:44:16

没有权限,楼主透漏下QQ联系

zhangbing123 发表于 2013-2-19 16:44:40

急需帮忙,{:cry:}{:cry:}

zhangbing123 发表于 2013-2-19 16:45:51

关于网口无操作系统和上位机之间通讯问题

zhangbing123 发表于 2013-2-20 09:20:53

急等楼主出现{:cry:}{:cry:}{:cry:}{:cry:}

zhangbing123 发表于 2013-2-20 11:31:31

楼主,加我QQ啊:836587669。。。急需帮助

123xinbu 发表于 2013-4-23 09:28:45

用任务管理器测速靠谱吗

tom919 发表于 2013-5-2 15:48:56

手头正好有个板子,谢谢分享例程。

xiefy21 发表于 2013-8-12 18:29:51

mark……
顶一个…

棋间卒 发表于 2014-3-18 10:15:04

haeha 发表于 2010-5-8 17:38
我也测试过:
1. zlg的LM3Ss8962开发板以及淘宝上买的6916开发板,无操作系统+lwip,一直向PC发UDP包,包大 ...

速度和丢包率都是怎么测试的呢

huangxiaowei 发表于 2014-4-16 09:15:12

顶一下

andmain999 发表于 2014-5-30 15:36:52

顶顶更健康!

melodyoooo 发表于 2014-8-3 09:42:14

顶一下 顶一下

自行车路考 发表于 2015-2-9 11:20:02

目的是为了了解一下器件传输速度的极限,无实际应用意义{:sweat:}
页: [1]
查看完整版本: EK-LM3S8962 以太网速度测试 96Mbps ! (无OS、无协议栈)