OpenEdv-开源电子网

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

LWIP 上电初始化需要插网线

[复制链接]

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2016-4-22
在线时间
37 小时
发表于 2017-7-19 17:25:19 | 显示全部楼层 |阅读模式
对于LWIP 上电需要插网线,是因为初始化调用的函数ETH_Init(&ETH_InitStructure,DP83848_PHY_ADDRESS);里有两个读寄存器的指令超时
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;
    }


//    do
//    {//printf("1");
//      timeout++;
//    } while (!(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_AutoNego_Complete) && (timeout < (uint32_t)PHY_READ_TO));  

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


把这两个屏蔽掉就可以了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
249
金钱
249
注册时间
2014-10-5
在线时间
37 小时
发表于 2017-7-27 16:40:56 | 显示全部楼层
@huoyancool  楼主,是不是说屏蔽掉之后就可以实现:上电没有插网线,上电一段时间后再插网线就可以直接联网吗,不需要设置什么吗
回复 支持 反对

使用道具 举报

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2016-4-22
在线时间
37 小时
 楼主| 发表于 2017-7-27 18:00:18 | 显示全部楼层
ewrest 发表于 2017-7-27 16:40
@huoyancool  楼主,是不是说屏蔽掉之后就可以实现:上电没有插网线,上电一段时间后再插网线就可以直接联 ...

我不需要设置什么就可以联网,你可以试试,因为这两个语句的意思就是查看是否联网
回复 支持 反对

使用道具 举报

2

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
249
金钱
249
注册时间
2014-10-5
在线时间
37 小时
发表于 2017-8-1 13:50:59 | 显示全部楼层
huoyancool 发表于 2017-7-27 18:00
我不需要设置什么就可以联网,你可以试试,因为这两个语句的意思就是查看是否联网

直接屏蔽两句话就相当于不管网线插没插都初始化,对lwip底层不是特别了解,不知懂这么做会不会造成什么隐患,若是lz知道什么,麻烦解惑,谢谢.
回复 支持 反对

使用道具 举报

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2016-4-22
在线时间
37 小时
 楼主| 发表于 2017-8-3 13:58:39 | 显示全部楼层
ewrest 发表于 2017-8-1 13:50
直接屏蔽两句话就相当于不管网线插没插都初始化,对lwip底层不是特别了解,不知懂这么做会不会造成什么隐患 ...

我觉得不会有影响,因为这两句话的意思你也可以看出来,是读寄存器状态,并没有改变什么,而寄存器你读不读都不影响什么。
回复 支持 反对

使用道具 举报

12

主题

241

帖子

0

精华

高级会员

Rank: 4

积分
806
金钱
806
注册时间
2017-8-17
在线时间
159 小时
发表于 2017-8-18 08:32:01 | 显示全部楼层
楼主,按你的方法初始化不过怎么回事
回复 支持 反对

使用道具 举报

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2016-4-22
在线时间
37 小时
 楼主| 发表于 2017-8-18 10:46:17 | 显示全部楼层
2246606206 发表于 2017-8-18 08:32
楼主,按你的方法初始化不过怎么回事

你调试看看是卡在什么地方了。我去掉后是可行的
回复 支持 反对

使用道具 举报

12

主题

241

帖子

0

精华

高级会员

Rank: 4

积分
806
金钱
806
注册时间
2017-8-17
在线时间
159 小时
发表于 2017-8-18 16:29:35 | 显示全部楼层
huoyancool 发表于 2017-8-18 10:46
你调试看看是卡在什么地方了。我去掉后是可行的

我不是用的原子哥的接口程序,我屏蔽后插上网线也检测不到了。但是打开屏蔽又可以了
回复 支持 反对

使用道具 举报

12

主题

241

帖子

0

精华

高级会员

Rank: 4

积分
806
金钱
806
注册时间
2017-8-17
在线时间
159 小时
发表于 2017-8-18 16:35:16 | 显示全部楼层
huoyancool 发表于 2017-8-18 10:46
你调试看看是卡在什么地方了。我去掉后是可行的

能将你初始化的代码给我借鉴一下么,我就这个问题没解决了。万分感谢
回复 支持 反对

使用道具 举报

12

主题

241

帖子

0

精华

高级会员

Rank: 4

积分
806
金钱
806
注册时间
2017-8-17
在线时间
159 小时
发表于 2017-8-19 08:39:31 | 显示全部楼层
huoyancool 发表于 2017-8-18 10:46
你调试看看是卡在什么地方了。我去掉后是可行的

楼主,我测试过了,直接屏蔽不行。可否借鉴一下
回复 支持 反对

使用道具 举报

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2016-4-22
在线时间
37 小时
 楼主| 发表于 2017-8-21 13:44:40 | 显示全部楼层
2246606206 发表于 2017-8-19 08:39
楼主,我测试过了,直接屏蔽不行。可否借鉴一下

u8 ETH_MACDMA_Config(void)
{
        u8 rval;
        ETH_InitTypeDef ETH_InitStructure;
        
        //ê1&#196;üò&#212;ì&#171;í&#248;MACò&#212;&#188;°MAC&#189;óê&#213;oí·¢&#203;íê±&#214;ó
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_ETH_MAC | RCC_AHB1Periph_ETH_MAC_Tx |RCC_AHB1Periph_ETH_MAC_Rx, ENABLE);
                        
        ETH_DeInit();                                                                  //AHB×ü&#207;&#223;&#214;&#216;&#198;&#244;ò&#212;ì&#171;í&#248;
        ETH_SoftwareReset();                                                  //èí&#188;t&#214;&#216;&#198;&#244;í&#248;&#194;&#231;
        while (ETH_GetSoftwareResetStatus() == SET);//μè′yèí&#188;t&#214;&#216;&#198;&#244;í&#248;&#194;&#231;íê3é
        ETH_StructInit(D_InitStructure);                  //3&#245;ê&#188;&#187;ˉí&#248;&#194;&#231;&#206;a&#196;&#172;è&#207;&#214;μ  

        ///í&#248;&#194;&#231;MAC2&#206;êyéè&#214;&#195;
        ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Enable;                           //&#191;a&#198;&#244;í&#248;&#194;&#231;×&#212;êêó|1|&#196;ü
        ETH_InitStructure.ETH_LoopbackMode = ETH_LoopbackMode_Disable;                                        //1&#216;±&#213;·′à&#161;
        ETH_InitStructure.ETH_RetryTransmission = ETH_RetryTransmission_Enable;                 //1&#216;±&#213;&#214;&#216;′&#171;1|&#196;ü
        ETH_InitStructure.ETH_AutomaticPadCRCStrip = ETH_AutomaticPadCRCStrip_Disable;         //1&#216;±&#213;×&#212;&#182;ˉè¥3yPDA/CRC1|&#196;ü
        ETH_InitStructure.ETH_ReceiveAll = ETH_ReceiveAll_Disable;                                                //1&#216;±&#213;&#189;óê&#213;&#203;ùóDμ&#196;&#214;&#161;
        ETH_InitStructure.ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Enable;//&#212;êDí&#189;óê&#213;&#203;ùóD1&#227;2¥&#214;&#161;
        ETH_InitStructure.ETH_PromiscuousMode = ETH_PromiscuousMode_Disable;                        //1&#216;±&#213;&#187;ìo&#207;&#196;£ê&#189;μ&#196;μ&#216;&#214;·1y&#194;&#203;  
        ETH_InitStructure.ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_Perfect;//&#182;&#212;óú×é2¥μ&#216;&#214;·ê1ó&#195;íê&#195;àμ&#216;&#214;·1y&#194;&#203;   
        ETH_InitStructure.ETH_UnicastFramesFilter = ETH_UnicastFramesFilter_Perfect;        //&#182;&#212;μ¥2¥μ&#216;&#214;·ê1ó&#195;íê&#195;àμ&#216;&#214;·1y&#194;&#203;
#ifdef CHECKSUM_BY_HARDWARE
        ETH_InitStructure.ETH_ChecksumOffload = ETH_ChecksumOffload_Enable;                         //&#191;a&#198;&#244;ipv4oíTCP/UDP/ICMPμ&#196;&#214;&#161;D£&#209;éoíD&#182;&#212;&#216;   
#endif
        //μ±&#206;ò&#195;&#199;ê1ó&#195;&#214;&#161;D£&#209;éoíD&#182;&#212;&#216;1|&#196;üμ&#196;ê±oò£&#172;ò&#187;&#182;¨òaê1&#196;ü′&#230;′¢×a·¢&#196;£ê&#189;,′&#230;′¢×a·¢&#196;£ê&#189;&#214;Dòa±£&#214;¤&#213;&#251;&#184;&#246;&#214;&#161;′&#230;′¢&#212;úFIFO&#214;D,
        //&#213;a&#209;ùMAC&#196;ü2&#229;è&#235;/ê&#182;±e3&#246;&#214;&#161;D£&#209;é&#214;μ,μ±&#213;&#230;D£&#209;é&#213;yè·μ&#196;ê±oòDMA&#190;í&#191;éò&#212;′|àí&#214;&#161;,·&#241;&#212;ò&#190;í&#182;a&#198;úμ&#244;&#184;&#195;&#214;&#161;
        ETH_InitStructure.ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Enable; //&#191;a&#198;&#244;&#182;a&#198;úTCP/IP′í&#206;ó&#214;&#161;
        ETH_InitStructure.ETH_ReceiveStoreForward = ETH_ReceiveStoreForward_Enable;     //&#191;a&#198;&#244;&#189;óê&#213;êy&#190;Yμ&#196;′&#230;′¢×a·¢&#196;£ê&#189;   
        ETH_InitStructure.ETH_TransmitStoreForward = ETH_TransmitStoreForward_Enable;   //&#191;a&#198;&#244;·¢&#203;íêy&#190;Yμ&#196;′&#230;′¢×a·¢&#196;£ê&#189;  

        ETH_InitStructure.ETH_ForwardErrorFrames = ETH_ForwardErrorFrames_Disable;             //&#189;&#251;&#214;1×a·¢′í&#206;ó&#214;&#161;  
        ETH_InitStructure.ETH_ForwardUndersizedGoodFrames = ETH_ForwardUndersizedGoodFrames_Enable;        //2&#187;×a·¢1yD&#161;μ&#196;o&#195;&#214;&#161;
        ETH_InitStructure.ETH_SecondFrameOperate = ETH_SecondFrameOperate_Enable;                  //′ò&#191;a′|àíμú&#182;t&#214;&#161;1|&#196;ü
        ETH_InitStructure.ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable;          //&#191;a&#198;&#244;DMA′&#171;ê&#228;μ&#196;μ&#216;&#214;·&#182;&#212;&#198;&#235;1|&#196;ü
        ETH_InitStructure.ETH_FixedBurst = ETH_FixedBurst_Enable;                                    //&#191;a&#198;&#244;1ì&#182;¨í&#187;·¢1|&#196;ü   
        ETH_InitStructure.ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat;                     //DMA·¢&#203;íμ&#196;×&#238;′óí&#187;·¢3¤&#182;è&#206;a32&#184;&#246;&#189;ú&#197;&#196;   
        ETH_InitStructure.ETH_TxDMABurstLength = ETH_TxDMABurstLength_32Beat;                        //DMA&#189;óê&#213;μ&#196;×&#238;′óí&#187;·¢3¤&#182;è&#206;a32&#184;&#246;&#189;ú&#197;&#196;
        ETH_InitStructure.ETH_DMAArbitration = ETH_DMAArbitration_RoundRobin_RxTx_2_1;
       rval=ETH_Init(D_InitStructure,DP83848_PHY_ADDRESS);                //&#197;&#228;&#214;&#195;ETH
        if(rval==ETH_SUCCESS)//&#197;&#228;&#214;&#195;3é1|
        {
                ETH_DMAITConfig(ETH_DMA_IT_NIS|ETH_DMA_IT_R,ENABLE);          //ê1&#196;üò&#212;ì&#171;í&#248;&#189;óê&#213;&#214;D&#182;&#207;        
        }
        return rval;
}
回复 支持 反对

使用道具 举报

12

主题

241

帖子

0

精华

高级会员

Rank: 4

积分
806
金钱
806
注册时间
2017-8-17
在线时间
159 小时
发表于 2017-8-22 08:38:22 | 显示全部楼层
huoyancool 发表于 2017-8-21 13:44
u8 ETH_MACDMA_Config(void)
{
        u8 rval;

谢谢,我已经解决。初始化未插网线时我并未让它成功,而是在接收函数或者单开一个任务判断初始化未成功时调用以太网重连函数进行连接。只要重新连接成功一次后后续就不需要再调用重连函数也能正常工作了。我是带FREERTOS系统的。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-18 18:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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