LM3S8962开发板以太网开发笔记

eeleader   2010-8-6 14:07 楼主

使用LM3S8962 开发板 学习以太网的相关开发

8962集成了mac 和 phy 貌似没有协议栈, 现在还没看懂例程的lwip 所以索性先随便发数据吧.


unsigned char nMACAddr[] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB};

先初始化以太网控制


SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ);

//使能以太网时钟
 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);


// 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;

 //MAC地址设置
 EthernetMACAddrSet(ETH_BASE,nMACAddr);


 //使能以太网

 EthernetEnable(ETH_BASE);


 while(1)  //循环发送

    {
       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++;
       RIT128x96x4DataDisplay(++count,66,36, 15,5) ;   //计数
    }

程序不是大问题,  问题在于到底要发什么,怎么发,以什么协议发。

我准备先发以太网帧, 以太网帧结构就不重复了, IEEE 802.3  我的网卡的mac被我改成 12 34 56 78 90 00   lm3s8962 的mac被我设为12 34 56 78 90 ab

 发送的数据如下


                //0x1c 0x04 

/*0000*/   0x12,0x34,0X56,0X78,0X90,0X00, 0X12,0X34,0X56,0X78,0X90,0XAB, 0X00,0X32,0X00,0X00,

/*0010*/   0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
/*0020*/   0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
/*0030*/   0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00

结果在sniffer上接收不到

又从网上寻找例程 ,发现 有一个例程在 发送的数据前加了2个字节 0x1c 0x04 

我同样加入 0x1c 0x04  后, 能接收到

 0x1c 0x04  原来是代表后面数据的长度的 ,这样就成为了 LLC帧结构
 继续坚持我的 以太网帧结构
将 sa 后面的 0x00 0x32 改为 0x08 0x00 (ip 帧头)    发送成功

一个为理想不懈前进的人,一个永不言败人! http://shop57496282.taobao.com/ 欢迎光临网上店铺!

回复评论 (3)

如何学习以太网

谢谢斑竹的分享。
想学以太网,但不知道从哪儿下手,希望前辈们指条道
点赞  2010-8-15 18:48
不错,学习了。。。。。。
我的博客
点赞  2010-8-15 20:44
不错的笔记。能系统一点么?
点赞  2010-11-11 14:00
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复