请问dp83848的软键复位与硬件复位为什么不同?

2019-07-21 08:59发布

看datasheet里有这样的叙述:
硬件复位时:This will reset the device such that all registers will be reinitialized to default values and the hardware configuration values will be re-latched into the device (similar to the power-up/reset operation).

软件复位时:The software reset will reset the device such that all registers will be reset to default values and the hardware configuration values will be maintained. Software driver code must wait 3 ?s following a software reset before allowing further serial MII operations with the DP83848C

区别在于the hardware configuration values will be re-latched 和the hardware configuration values will be maintained 

首先我不太明白all registers和the hardware configuration values 的区别。然后maintain是保持,re-latched从字面上看是重新锁存?
为什么不把软件复位和硬件复位做成效果一样的呢?还是因为软件复位和硬件复位有本质的区别?


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
XUZJWWSZ
1楼-- · 2019-07-21 12:03
我遇到的实际问题是:开发板的复位按键同时连接了stm32f107和dp83848的复位引脚,所以通过按键硬件复位的时候什么毛病都没有。
但是由于板子最终会被封到一个盒子里,我不得不用软件复位。
软件复位之后,与板子连接的surface的上的软件会显示socket出问题了,要重启软件才能连上。板子通过网线插路由上,surface通过路由的WIFI与板子通信。
XUZJWWSZ
2楼-- · 2019-07-21 14:22
以太网部分我都是复制开发板带的例程,基本都是调用的库函数,代码出错的可能性很小。
下面是stm32软复位的代码:
void MCU_Reset(void)
{
        __disable_fault_irq();      // STM32 软复位  
        NVIC_SystemReset();
}

下面是以太网配置的部分代码:
进入:Ethernet_Configuration()
{
。。。。。。。。
。。。。。。。
。。。。。。
/* Reset ETHERNET on AHB Bus */
  ETH_DeInit();

  /* Software reset */
  ETH_SoftwareReset();
。。。。。。
。。。。。。
。。。。。。
。。。。。。
ETH_Init(Ð_InitStructure, HY_ADDRESS);
。。。。。。
。。。。。。
。。。。。



}
在ETH_Init(Ð_InitStructure, HY_ADDRESS)里
有如下代码:
 if(!(ETH_WritePHYRegister(PHYAddress, HY_BCR, HY_Reset)))
  {
    /* Return ERROR in case of write timeout */
    return ETH_ERROR;
  }
  
  /* Delay to assure HY reset */
  _eth_delay_(PHY_ResetDelay);


我相信ETH_WritePHYRegister(PHYAddress, HY_BCR, HY_Reset)这句就实现了DP83848的软复位。
头文件里有:
#define HY_BCR                          0          /*!< Tranceiver Basic Control Register */
#define HY_BSR                          1          /*!< Tranceiver Basic Status Register */
。。。。。
。。。。

#define HY_Reset                       ((u16)0x8000)      /*!< PHY Reset */
#define PHY_Loopback                    ((u16)0x4000)      /*!< Select loop-back mode */
#define PHY_FULLDUPLEX_100M             ((u16)0x2100)      /*!< Set the full-duplex mode at 100 Mb/s */
。。。。。。
。。。。。。
0x8000刚好把第15位置1,与手册中描述的软复位符合。
XUZJWWSZ
3楼-- · 2019-07-21 15:57
 精彩回答 2  元偷偷看……
正点原子
4楼-- · 2019-07-21 18:47
帮顶。。。。
神出没
5楼-- · 2019-07-21 20:26
解决了吗,我现在也是PHY复位引脚连到了单片机的复位引脚,通讯不上,怀疑是PHY_Init函数中复位那里有问题,换成了软件复位
if(!(ETH_WritePHYRegister(PHY_ADDRESS, PHY_BCR, PHY_Reset)))//失败
  {
    return 1;
  }
  
  /* Delay to assure PHY reset */
  _eth_delay_(PHY_RESET_DELAY);
不知道是不是这个问题,现在板子没在手边,没法试。不知道软硬件复位效果一样不。望回复,多谢
meimengxing2014
6楼-- · 2019-07-21 22:52
我这儿也是,下载程序后以及按复位键,接收和传输数据都没问题,但是重新上电后,以太网连接状态移值返回2,表示发送了连接请求,但是没有应答,一直在那儿等待

一周热门 更多>