OpenEdv-开源电子网

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

调试STM32F417+DP83848,遇到的问题

[复制链接]

28

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
273
金钱
273
注册时间
2015-3-23
在线时间
54 小时
发表于 2016-5-6 14:13:38 | 显示全部楼层 |阅读模式
1.第一次是卡在初始化MAC层及DMA配置的软复位部分,如下:
ETH_SoftwareReset();                                                 
while (ETH_GetSoftwareResetStatus() == SET);

一直跳不出while循环,这主要是PHY芯片管脚配置的问题,我把一些不常用的管脚:PWR_DOWN/INT之类的不在程序中配置。
2.第二次卡初始化ETH中:
rval=ETH_Init(&ETH_InitStructure,DP83848_PHY_ADDRESS);
返回值为0,初始化不成功。
将问题定位在读取PHY芯片寄存器的函数中:
/* We wait for linked status... */
    do
    {
      timeout++;
    } while (!(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_Linked_Status) && (timeout < PHY_READ_TO));

    /* Return ERROR in case of timeout */
    if(timeout == PHY_READ_TO)
    {
      return ETH_ERROR;
    }

查看芯片手册,发现将COL管脚配置为悬空,表示1,我其他PHY地址管脚都是配置的悬空,那么这时的PHY地址为01
3.程序中一直往上位机发送数据,上位机只接收到一两个数据包;上位机往STM32发数据,总进到中断中,但没有调用接收数据的回调函数。
状态寄存器不对:LAN8720跟DP83848的状态寄存器不同。
////LAN8720 PHYD&#190;&#198;&#172;μ&#196;×′ì&#172;&#188;&#196;′&#230;&#198;÷
//#define PHY_SR                                ((uint16_t)31)                 //LAN8720μ&#196HY×′ì&#172;&#188;&#196;′&#230;&#198;÷μ&#216;&#214;·
//#define PHY_SPEED_STATUS    ((uint16_t)0x0004)         //LAN8720 PHY&#203;ù&#182;è&#214;μ&#209;ú&#194;&#235;
//#define PHY_DUPLEX_STATUS   ((uint16_t)0x00010) //LAN8720 PHYá&#172;&#189;ó×′ì&#172;&#214;μ&#209;ú&#194;&#235;  

/* The DP83848 PHY status register  */
#define PHY_SR                 ((uint16_t)0x10) /* PHY status register Offset */
#define PHY_SPEED_STATUS       ((uint16_t)0x0002) /* PHY Speed mask */
#define PHY_DUPLEX_STATUS      ((uint16_t)0x0004) /* PHY Duplex mask */

完成这些,程序基本调通。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-5-6 14:47:15 | 显示全部楼层
回复 支持 反对

使用道具 举报

28

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
273
金钱
273
注册时间
2015-3-23
在线时间
54 小时
 楼主| 发表于 2016-5-23 14:33:30 | 显示全部楼层
原子哥的程序里面有个小坑,如果程序已经跑起来,你还没接网线,这时再接网线,程序会卡在分配内存的位置,原因是:
没接网线,初始化LAN8720通不过,这时已经分配好四个数组的内存:DMARxDscrTab  DMATxDscrTab Rx_Buff Tx_Buff,和mem mep内存,
这次初始化不通过,会继续初始化,继续给四个数组分配内存,这样,内存已经被分配完了,再接上网线,程序就会停在分配内存的位置。
回复 支持 反对

使用道具 举报

38

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2015-12-16
在线时间
50 小时
发表于 2020-2-12 14:55:43 | 显示全部楼层
楼主你好,我在用stm32调试网络时也遇到了这些情况,想请教2个问题:(1).你把phhy芯片不常用的引脚不在程序中配置是什么意思?通过电路配置吗?具体是哪些引脚呢?(2)将COL管脚配置为悬空,表示1,我其他PHY地址管脚都是配置的悬空,那么这时的PHY地址为01,意思是其它PHY地址和COL相反,悬空为0吗?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-8 06:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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