极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18335|回复: 7

ENC28J60设置问题

[复制链接]
发表于 2013-4-11 21:46:42 | 显示全部楼层 |阅读模式
enc28j60寄存器的设置是用的那个aduino开源程序模版的上面的enc28j60源文件,也用的里面的初始化函数,经过一系列的调试现在可以接收ARP请求数据包和应答ARP请求。但是从pc机上发送ICMP和TCP请求enc28j60都不能接收到这个包,是不是我什么寄存器设置错误了,求大神指导啊!!!!
回复

使用道具 举报

发表于 2013-4-11 22:00:47 | 显示全部楼层
您好歹得把代码贴上啊
回复 支持 反对

使用道具 举报

发表于 2013-4-12 01:18:14 | 显示全部楼层
楼上说的有道理
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-4-12 13:50:41 | 显示全部楼层
本帖最后由 等待…… 于 2013-4-12 16:03 编辑

初始化代码如下:

ENC28J60_CONTROL_DDR |= 1<<ENC28J60_CONTROL_CS;
    CSPASSIVE;

    DDRB |=(1<<PB5)|(1<<PB7);
    DDRB &=~(1<<PB6);
    PORTB|=(1<<PB5)|(1<<PB7);
    SPCR = (1<<SPE)|(1<<MSTR);
    SPSR |= (1<<SPI2X);///SPI等端口初始化

    enc28j60WriteOp(ENC28J60_SOFT_RESET,0,ENC28J60_SOFT_RESET);
    _delay_ms(50);///enc28j60系统复位

    NextPacketPtr = RXSTART_INIT;///下一个数据包指针位置初始化

    enc28j60Write(ERXSTL,RXSTART_INIT&0xff);
    enc28j60Write(ERXSTH,RXSTART_INIT>>8);///接收起始地址

    enc28j60Write(ERXRDPTL, RXSTART_INIT&0xFF);
        enc28j60Write(ERXRDPTH, RXSTART_INIT>>8);///接收读指针起始地址

    enc28j60Write(ERXNDL, RXSTOP_INIT&0xFF);
        enc28j60Write(ERXNDH, RXSTOP_INIT>>8);///接收结束地址

    enc28j60Write(ETXSTL, TXSTART_INIT&0xFF);
        enc28j60Write(ETXSTH, TXSTART_INIT>>8);///发送起始地址

        enc28j60Write(ETXNDL, TXSTOP_INIT&0xFF);
        enc28j60Write(ETXNDH, TXSTOP_INIT>>8);///发送结束地址

    enc28j60Write(ERXFCON, ERXFCON_UCEN|ERXFCON_CRCEN|ERXFCON_PMEN);///接收过滤控制寄存器
    //enc28j60Write(ERXFCON, 0xa8);///接收过滤控制寄存器

        enc28j60Write(EPMM0, 0x3f);
        enc28j60Write(EPMM1, 0x30);
        enc28j60Write(EPMCSL, 0xf9);
        enc28j60Write(EPMCSH, 0xf7);///格式匹配屏蔽和格式匹配校验
    //PORTA=EPMCSL;
        // do bank 2 stuff
        // enable MAC receive
        enc28j60Write(MACON1, MACON1_MARXEN|MACON1_TXPAUS|MACON1_RXPAUS);///MAC初始化寄存器1
        // bring MAC out of reset
        enc28j60Write(MACON2, 0x00);///MAC子系统复位
        // enable automatic padding to 60bytes and CRC operations
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, MACON3, MACON3_PADCFG0|MACON3_TXCRCEN|MACON3_FRMLNEN|MACON3_FULDPX);///MAC自动填充和CRC校验以及发送使能
        // set inter-frame gap (non-back-to-back)
        //PORTA=enc28j60Read(MACON3);
        enc28j60Write(MAIPGL, 0x12);///半双工是的设置
        enc28j60Write(MAIPGH, 0x0C);
        // set inter-frame gap (back-to-back)
        enc28j60Write(MABBIPG, 0x12);///全双工的设置
        // Set the maximum packet size which the controller will accept
        // Do not send packets longer than MAX_FRAMELEN://最大数据帧长度设置
        enc28j60Write(MAMXFLL, MAX_FRAMELEN&0xFF);
        enc28j60Write(MAMXFLH, MAX_FRAMELEN>>8);///设置最大帧长度
        // do bank 3 stuff
        // write MAC address
        // NOTE: MAC address in ENC28J60 is byte-backward
        enc28j60Write(MAADR5, macaddr[0]);
        enc28j60Write(MAADR4, macaddr[1]);
        enc28j60Write(MAADR3, macaddr[2]);
        enc28j60Write(MAADR2, macaddr[3]);
        enc28j60Write(MAADR1, macaddr[4]);
        enc28j60Write(MAADR0, macaddr[5]);///设置MAC地址


        // no loopback of transmitted frames
        enc28j60PhyWrite(PHCON2, PHCON2_HDLDIS);///PHY初始化(要发送的数据仅通过双绞线接口发出)
        // switch to bank 0
        enc28j60SetBank(ECON1);///设置指针在BANK0区域
        // enable interrutps
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, EIE, EIE_PKTIE|EIE_TXIE);///全局中断,接收数据包待处理,发送中断允许
        // enable packet reception
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_RXEN);///使能接收



另外MAC为:0x24,0x00,0x10,0x58,0x55,0x54,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-4-12 13:51:30 | 显示全部楼层
gaoshine 发表于 2013-4-11 22:00
您好歹得把代码贴上啊

代码贴上了  谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-4-12 19:32:24 | 显示全部楼层
自己顶上去吧  自己知道错误在哪里了   是在数据包筛选设置里面有问题  我设置为所有数据包接收就可以接收到。所以求怎么设置?????
回复 支持 反对

使用道具 举报

发表于 2013-4-12 20:56:38 | 显示全部楼层
我再多问一句,您用的是那个库啊 ICMP 协议已经封装好了 直接就可应用 您ping一下就知道了,用不着看这么底层得代码,随便建议一下,本论坛已经有个非常好的ENC28j60的系列文章,我记着原文应该在意大利的一个网站,您搜一下就可以,讲的不能再细了,我觉得。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-4-13 13:14:34 | 显示全部楼层
gaoshine 发表于 2013-4-12 20:56
我再多问一句,您用的是那个库啊 ICMP 协议已经封装好了 直接就可应用 您ping一下就知道了,用不着看这么底 ...

其实吗 我也知道  不过第一我不是用aduino,第二我把那个库移植过来也有问题,所以决定自己写,然后就出现这种我觉得是那库本身的问题。所以只有慢慢研究,目前阶段只有接收所有数据包然后手动过滤包了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-6-2 02:11 , Processed in 0.047487 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表