OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7467|回复: 9

始终在while(tapdev_init())这个循环里,ENC28J60初始化不成功。

[复制链接]

48

主题

167

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
380
金钱
380
注册时间
2013-6-27
在线时间
17 小时
发表于 2013-7-15 18:02:30 | 显示全部楼层 |阅读模式
u8 ENC28J60_Init(u8* macaddr)
{
u16 retry=0;   
ENC28J60_CS=1;
ENC28J60_Write_Op(ENC28J60_SOFT_RESET,0,ENC28J60_SOFT_RESET);
while(!(ENC28J60_Read(ESTAT)&ESTAT_CLKRDY)&&retry<500)
{
retry++;
delay_ms(1);
};
if(retry>=500)return 1; 
        NextPacketPtr=RXSTART_INIT;
        ENC28J60_Write(ERXSTL,RXSTART_INIT&0xFF);
ENC28J60_Write(ERXSTH,RXSTART_INIT>>8);
ENC28J60_Write(ERXRDPTL,RXSTART_INIT&0xFF);
ENC28J60_Write(ERXRDPTH,RXSTART_INIT>>8);
ENC28J60_Write(ERXNDL,RXSTOP_INIT&0xFF);
ENC28J60_Write(ERXNDH,RXSTOP_INIT>>8);
ENC28J60_Write(ETXSTL,TXSTART_INIT&0xFF);
ENC28J60_Write(ETXSTH,TXSTART_INIT>>8);
ENC28J60_Write(ETXNDL,TXSTOP_INIT&0xFF);
ENC28J60_Write(ETXNDH,TXSTOP_INIT>>8);
ENC28J60_Write(ERXFCON,ERXFCON_UCEN|ERXFCON_CRCEN|ERXFCON_PMEN);
ENC28J60_Write(EPMM0,0x3f);
ENC28J60_Write(EPMM1,0x30);
ENC28J60_Write(EPMCSL,0xf9);
ENC28J60_Write(EPMCSH,0xf7);
ENC28J60_Write(MACON1,MACON1_MARXEN|MACON1_TXPAUS|MACON1_RXPAUS);
ENC28J60_Write(MACON2,0x00);
ENC28J60_Write_Op(ENC28J60_BIT_FIELD_SET,MACON3,MACON3_PADCFG0|MACON3_TXCRCEN|MACON3_FRMLNEN|MACON3_FULDPX);
ENC28J60_Write(MAIPGL,0x12);
ENC28J60_Write(MAIPGH,0x0C);
ENC28J60_Write(MABBIPG,0x15);
ENC28J60_Write(MAMXFLL,MAX_FRAMELEN&0xFF);
ENC28J60_Write(MAMXFLH,MAX_FRAMELEN>>8);
ENC28J60_Write(MAADR5,macaddr[0]);
ENC28J60_Write(MAADR4,macaddr[1]);
ENC28J60_Write(MAADR3,macaddr[2]);
ENC28J60_Write(MAADR2,macaddr[3]);
ENC28J60_Write(MAADR1,macaddr[4]);
ENC28J60_Write(MAADR0,macaddr[5]);
ENC28J60_PHY_Write(PHCON1,PHCON1_PDPXMD);
ENC28J60_PHY_Write(PHCON2,PHCON2_HDLDIS);
ENC28J60_Set_Bank(ECON1);
ENC28J60_Write_Op(ENC28J60_BIT_FIELD_SET,EIE,EIE_INTIE|EIE_PKTIE);
ENC28J60_Write_Op(ENC28J60_BIT_FIELD_SET,ECON1,ECON1_RXEN);
if(ENC28J60_Read(MAADR5)== macaddr[0])return 0; //就是这,读出来的MAC值和写进去的的不一样
     else return 1;  
}
我的ENC28J60的RESET引脚和RESET按键连在一起的,所以不用在代码里时行复位操作.ENC28J60和FLASH都挂在SPI1上了,可是已经把FLASH的片选信号置高了啊,ENC28J60的片选引脚也配置好了的,所以SPI操作的相互干扰的原因也排除了。
为什么会读出来的和写进去的不一样呢

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-15 20:46:06 | 显示全部楼层
回复【楼主位】can123dao:
---------------------------------
是通过杜邦线连接的么?
还是做在一个板子上?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

48

主题

167

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
380
金钱
380
注册时间
2013-6-27
在线时间
17 小时
 楼主| 发表于 2013-7-16 08:39:38 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
板子上做好了的
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-16 10:24:02 | 显示全部楼层
那不应该出问题才对哦,呵呵
检查SPI配置吧,参考下我们的例程.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
152
金钱
152
注册时间
2014-1-16
在线时间
23 小时
发表于 2014-1-20 22:19:52 | 显示全部楼层
我的是spi配置不正确,明天继续找找,看看哪儿配置的不对。
上班清闲,喜欢钻研。
回复 支持 反对

使用道具 举报

7

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2013-4-9
在线时间
26 小时
发表于 2014-2-27 14:34:57 | 显示全部楼层
回复【3楼】can123dao:

回复【2楼】正点原子:
---------------------------------
板子上做好了的

---------------------------------
请问这个问题你解决了么??
回复 支持 反对

使用道具 举报

48

主题

167

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
380
金钱
380
注册时间
2013-6-27
在线时间
17 小时
 楼主| 发表于 2014-3-10 18:41:25 | 显示全部楼层
回复【6楼】tangqilin:
---------------------------------
嗯,注意一下SPI配置的问题,看一下ENC28J60的手册
回复 支持 反对

使用道具 举报

7

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2013-4-9
在线时间
26 小时
发表于 2014-3-13 10:29:34 | 显示全部楼层
回复【7楼】can123dao:
---------------------------------
能不能再具体点呢??
回复 支持 反对

使用道具 举报

48

主题

167

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
380
金钱
380
注册时间
2013-6-27
在线时间
17 小时
 楼主| 发表于 2014-3-13 20:41:17 | 显示全部楼层
我好久没弄这个了,我也不清楚了。只记得ENC28J60有个地方有点特殊
回复 支持 反对

使用道具 举报

6

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2014-4-5
在线时间
2 小时
发表于 2014-8-2 19:16:18 | 显示全部楼层
u8 ENC28J60_Init(u8* macaddr)里面的延时改长我的就可以了,战舰的
while(!(ENC28J60_Read(ESTAT)&ESTAT_CLKRDY)&&retry<500)//?????±?????¨
{
retry++;
delay_ms(10);
};
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-4 13:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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