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) 测试代码:略去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;
}
} 关注这个话题 这个片子太厉害了,我们使用9G20,400M的ARM9,平均速度才能达到50M. 用例子StellarisWare\boards\ek-lm3s8962\enet_lwip,写了一小段循环发送UDP的代码替代原来的死循环,实际测试PC端网口资源占用22%,因此可以看出协议的处理所消耗的资源还是蛮大的,TCP没有测试,应该会更慢。
to【3楼】 wenming 老王
你们9G20测试的时候是通过协议栈来测试吗?
如果是那样的话会慢很多,毕竟协议栈没有针对器件进行优化 我们用的BSD协议栈.LINUX内核自带的,使用TCP测试4K,小文件. to 【5楼】 wenming 老王
Linux下的性能估计跟网卡驱动有很大的关系
附上测试工程,有板子的都可以感受一下,程序中发送的目的MAC地址是我的计算机,大家可以修改一下,改成自己电脑的MAC地址。(测试的电脑由于收到大量的UDP包,速度会变慢!)
以太网速度测试工程MyEthernetourdev_526496.rar(文件大小:59K) (原文件名:MyEthernet.rar) 真厉害 回复【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的片子 回复【楼主位】hugeice 戬峰
-----------------------------------------------------------------------
请问楼主,为什么我用你的项目程序改成自己的MAC地址,结果抓包显示还是发往您的地址呢? 我给您发了个邮件,您看下吧 mark这些天我也使用8962学习tcp/ip,有时间测试一下 EthernetMACAddrSet(ETH_BASE, nMACAddr); 是设置单片机的MAC地址,也就是源地址,要修改目的MAC地址要改以太网帧头 理论上的100M LM3S的以太网口的发送FIFO只能容纳一个以太网帧,因此达不到理论上点100M,因为没有发送的时候才能开始向发送FIFO填充一个新的以太帧,而填充是需要时间的,填充的这段时间是没有发送数据的,因此肯定达不到理论上的100M!
为什么就不能把发送FIFO弄两个,或者扩大一倍,采用PingPong方式,那样就能让网口100M全负荷运行了,不解……
接收FIFO可以容纳多帧,因此只要帧小于2K(以太网标准最大帧大小1500字节,但LM3S可以发送2K大小的非标准的帧)是有可能达到100M的接收性能的,不过这个纯属猜想,没有验证,呵呵 我的开发板还没有开工呢? 实际效果会差很多,之前我在8738上用lwip做过,收到pc机发送的tcp包后回传,能做到双向同时10M多.没有dma的支持,速度提升有限,而且cpu没有留下太多的时间给别的处理.看截图:http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_531289.jpg
(原文件名:QQ截图未命名.jpg)
黄线是pc上接受的速度,红线是发送的速度.总速率到了20M+ 关注一下 这个板子很火了 mark. 回复【楼主位】hugeice戬
-----------------------------------------------------------------------
mark 刚刚测试通过;;
移植中需要修改的地方是:
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)
最后 如果 板子直接与电脑相连,网线需要用交叉线。。 我也测试过:
1. zlg的LM3Ss8962开发板以及淘宝上买的6916开发板,无操作系统+lwip,一直向PC发UDP包,包大小1500字节,平均速率22Mbps。丢包率<0.3%
2. ucos+lwip,测试条件相同,最好的情况下平均速率3Mbps。 回复【22楼】haeha
我也测试过:
1. zlg的lm3ss8962开发板以及淘宝上买的6916开发板,无操作系统+lwip,一直向pc发udp包,包大小1500字节,平均速率22mbps。丢包率<0.3%
2. ucos+lwip,测试条件相同,最好的情况下平均速率3mbps。
-----------------------------------------------------------------------
haeha 兄弟,能不能共享你的 ucos+lwip程序? mark -----------------------------------------------------------------------
请问楼主,为什么我用你的项目程序改成自己的mac地址,结果抓包显示还是发往您的地址呢?
-----------------------------------------------------------------------
貌似楼主的以太网帧里封装了ip帧,所以ip那部分也需要自己改 我想请问大家,在发送目标mac地址之前 为什么要发送
/*Length = 1066 - 14 = 1052(0x041c)*/
0x1c, 0x04,
这2个字节呢 写入FIFO的头两个字节是该帧数据的长度, 长度不包括以太帧头部, 所以减去14字节. 结果按照主机字节顺序(低字节在前,高字节在后)写入FIFO.这是LM的芯片的以太网外设的特性, 具体可以看8962的datasheet的以太网部分关于FIFO格式的描述 回复【14楼】hugeice 戬
lm3s的以太网口的发送fifo只能容纳一个以太网帧,因此达不到理论上点100m,因为没有发送的时候才能开始向发送fifo填充一个新的以太帧,而填充是需要时间的,填充的这段时间是没有发送数据的,因此肯定达不到理论上的100m!
为什么就不能把发送fifo弄两个,或者扩大一倍,采用pingpong方式,那样就能让网口100m全负荷运行了,不解……
接收fifo可以容纳多帧,因此只要帧小于2k(以太网标准最大帧大小1500字节,但lm3s可以发送2k大小的非标准的帧)是有可能达到100m的接收性能的,不过这个纯属猜想,没有验证,呵呵
-----------------------------------------------------------------------
2K的接受FIFO,还是太小了。 好像买回来玩一下啊! 请问LZ:
我的电脑IP 为 172.17.109.16, 怎样化为6字节的 IP 地址? 回复【30楼】zhang..yb
请问lz:
我的电脑ip 为 172.17.109.16, 怎样化为6字节的 ip 地址?
-----------------------------------------------------------------------
看一下例程,只要用到以太网实验的例程都有 楼上,找不到呀,可否解释一下,谢谢! mark 回复【30楼】zhang..yb
请问lz:
我的电脑ip 为 172.17.109.16, 怎样化为6字节的 ip 地址?
-----------------------------------------------------------------------
6位的不是IP地址,是MAC地址,也就是网卡的物理地址,WIN+R,然后输入cmd,打开dos窗口,输入ipconfig -all,回车
显示的就是所有网卡的信息,MAC地址就是那个physical address。 最近也在看这方面的,不晓得有os的和没有os的究竟有什么区别的》? mark mark 学习,正在用8962 MARK,刚收到板子,正好要研究 mark 我测试过UDP,最快3MBYTES有效数据,发送前后用IO翻转,,每个包1200字节有效数据,连_发10个包,看IO翻转,同时看电脑UDP,没有丢失,当然如果一个包比较小那速度就满了,8个字节的小包也要70us发完,但是1200字节的大包只要400us发完 mark楼主真牛学习了 MARK!!! 没操作系统当然快的多。 收藏了~~ 楼主厉害,我自己做了一块板子,用了别人做的核心板, 自己布的底板,效果为94M--95M之间,不到96M
同样的程序在EK8962板子上可以达到96M,这是为啥? 学到这了跑一下 没有权限,楼主透漏下QQ联系 急需帮忙,{:cry:}{:cry:} 关于网口无操作系统和上位机之间通讯问题 急等楼主出现{:cry:}{:cry:}{:cry:}{:cry:} 楼主,加我QQ啊:836587669。。。急需帮助 用任务管理器测速靠谱吗 手头正好有个板子,谢谢分享例程。 mark……
顶一个… haeha 发表于 2010-5-8 17:38
我也测试过:
1. zlg的LM3Ss8962开发板以及淘宝上买的6916开发板,无操作系统+lwip,一直向PC发UDP包,包大 ...
速度和丢包率都是怎么测试的呢 顶一下 顶顶更健康! 顶一下 顶一下 目的是为了了解一下器件传输速度的极限,无实际应用意义{:sweat:}
页:
[1]