正点原子407开发板,网口强制100M通讯问题

2019-07-20 21:28发布

RT,当网口设置成为非协商,100M时,网口灯不亮。相关代码在 lan8720.c 中,部分代码如下:
[mw_shl_code=c,true]u8 ETH_MACDMA_Config(void){
    .......
    ETH_StructInit(D_InitStructure);                  //初始化网络为默认值  

    ///网络MAC参数设置
    ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Disable;
        ETH_InitStructure.ETH_Mode = ETH_Mode_FullDuplex;
        ETH_InitStructure.ETH_Speed = ETH_Speed_10M;

    ETH_InitStructure.ETH_LoopbackMode = ETH_LoopbackMode_Disable;                                        //关闭反馈
    ETH_InitStructure.ETH_RetryTransmission = ETH_RetryTransmission_Disable;                 //关闭重传功能
    ETH_InitStructure.ETH_AutomaticPadCRCStrip = ETH_AutomaticPadCRCStrip_Disable;         //关闭自动去除PDA/CRC功能
    ETH_InitStructure.ETH_ReceiveAll = ETH_ReceiveAll_Disable;                                                //关闭接收所有的帧
    ETH_InitStructure.ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Enable;//允许接收所有广播帧
    ETH_InitStructure.ETH_PromiscuousMode = ETH_PromiscuousMode_Disable;                        //关闭混合模式的地址过滤  
    ETH_InitStructure.ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_Perfect;//对于组播地址使用完美地址过滤   
    ETH_InitStructure.ETH_UnicastFramesFilter = ETH_UnicastFramesFilter_Perfect;        //对单播地址使用完美地址过滤
#ifdef CHECKSUM_BY_HARDWARE
    ETH_InitStructure.ETH_ChecksumOffload = ETH_ChecksumOffload_Enable;                         //开启ipv4和TCP/UDP/ICMP的帧校验和卸载   
#endif
    //当我们使用帧校验和卸载功能的时候,一定要使能存储转发模式,存储转发模式中要保证整个帧存储在FIFO中,
    //这样MAC能插入/识别出帧校验值,当真校验正确的时候DMA就可以处理帧,否则就丢弃掉该帧
    ETH_InitStructure.ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Enable; //开启丢弃TCP/IP错误帧
    ETH_InitStructure.ETH_ReceiveStoreForward = ETH_ReceiveStoreForward_Enable;     //开启接收数据的存储转发模式   
    ETH_InitStructure.ETH_TransmitStoreForward = ETH_TransmitStoreForward_Enable;   //开启发送数据的存储转发模式  

    ETH_InitStructure.ETH_ForwardErrorFrames = ETH_ForwardErrorFrames_Disable;             //禁止转发错误帧  
    ETH_InitStructure.ETH_ForwardUndersizedGoodFrames = ETH_ForwardUndersizedGoodFrames_Disable;        //不转发过小的好帧
    ETH_InitStructure.ETH_SecondFrameOperate = ETH_SecondFrameOperate_Enable;                  //打开处理第二帧功能
    ETH_InitStructure.ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable;          //开启DMA传输的地址对齐功能
    ETH_InitStructure.ETH_FixedBurst = ETH_FixedBurst_Enable;                                    //开启固定突发功能   
    ETH_InitStructure.ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat;                     //DMA发送的最大突发长度为32个节拍   
    ETH_InitStructure.ETH_TxDMABurstLength = ETH_TxDMABurstLength_32Beat;                        //DMA接收的最大突发长度为32个节拍
    ETH_InitStructure.ETH_DMAArbitration = ETH_DMAArbitration_RoundRobin_RxTx_2_1;

    .......
}[/mw_shl_code]

尝试过 10 M 非协商[全双工/半双工],网口灯亮,可以PING通。

尝试过 协商模式[协商结果为100M全双工],网口灯亮,可以PING通。

尝试过 100 M 非协商[全双工/半双工],网口灯不亮,PING不通。

                                                                                                          谢谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
zhoujianwen
1楼-- · 2019-07-21 00:51
这个刚好我弄成功了,把配置延时时间提高一点就可以了
正点原子
2楼-- · 2019-07-21 05:46
帮顶
zhoujianwen
3楼-- · 2019-07-21 07:46
 精彩回答 2  元偷偷看……

一周热门 更多>