注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
bear2529的个人空间 https://home.eeworld.com.cn/space-uid-106305.html [收藏] [复制] [分享] [RSS]
日志

8962以太网学习笔记

已有 901 次阅读2010-7-14 14:40

因为单位封了博客....所以只能在论坛记录每天的工作内容了...初学水平大家见谅...主要目的是为了督促自己

使用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) ;   //计数
    }

程序不是大问题,  问题在于到底要发什么,怎么发,以什么协议发
插入一个话题, 先说一下接收用的软件, 我用的sniffer  用于接收分析以太网的数据

继续

我准备先发以太网帧, 以太网帧结构就不重复了, 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 帧头)    发送成功

今天到这里 ,明个继续

 


发表评论 评论 (1 个评论)
回复 fornever 2010-7-29 15:18
lz能不能把main函数贴一下?
我试了好几天都没有成功耶。。。。
对MACTR不需要置位么?是自动置位然后发送数据的?

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章