问答

汇集网友智慧,解决技术难题

21ic问答首页 - 请教GD32F107 以太网half-duplex 模式异常、full-duplex模式正常

单片机

请教GD32F107 以太网half-duplex 模式异常、full-duplex模式正常

workmanxxx2022-07-26
本帖最后由 workmanxxx 于 2022-7-26 17:09 编辑

大佬们,请教一下GD32F107这颗芯片的以太网问题。同一版本PCB,一个板用STM32F107,另一个用GD32F107,使用STM32F107的各个模式下都能正常工作(10M、100M、单工及双工模式)。使用GD32F107的双工模式下10M和100M都能正常工作,当使用单工模式下10M和100M都无法正常工作了。
请问大家都是否遇到过这样的问题,是芯片问题还是配置不到位导致?

      
      下载视频         



回答 +关注 1
593人浏览 13人回答问题 分享 举报
13 个回答
  • lifeforrent 发表于 2022-7-29 11:08
    不用客气,CSD就是在enet_init()函数倒数第三个if中被清掉了~

    我又用STM32的试了一下,调试时监控以太网MAC设置寄存器(ETH_MACCR)的CSD位,这位为0或1时,单工状态下确实能正常工作。

    手册上写的内容如下,根据下面说法,按理应该是该位应该置1才对,为啥STM32为0还能正常工作,太奇怪了。
    CSD:关闭载波侦听功能 (Carrier sense disable)位16
    1:在半双工模式下,MAC的发送器在发送帧过程中忽略MII的CSR信号,发送过程中载波丢失或者没有载波都不会报错。
    0:MAC在发送过程中如果发生上述情况会报错,甚至放弃发送。
  • 不用客气,CSD就是在enet_init()函数倒数第三个if中被清掉了~
  • lifeforrent 发表于 2022-7-29 09:48
    我在GD32F107VCT6开发板上试了没问题,官网例程,PC端无需修改配置,enet_init_status = enet_init(ENET_10 ...

    真是感谢,按你的方法试过了,单工状态下确实能正常连通了。

    主要是这个起作用ENET_MAC_CFG |= ENET_MAC_CFG_CSD,昨天也在enet_init()函数里增加了这句,不过增加到那自动协商部分的后面了,不是增加到enet_init()函数的最后面部分,估计内部还有其它参数设定,所以导致失败。
  • 我在GD32F107VCT6开发板上试了没问题,官网例程,PC端无需修改配置,enet_init_status = enet_init(ENET_100M_HALFDUPLEX, ENET_AUTOCHECKSUM_DROP_FAILFRAMES, ENET_BROADCAST_FRAMES_PASS);这里一定要改为ENET_100M_HALFDUPLEX,另外在enet_init函数最后添加ENET_MAC_CFG|=ENET_MAC_CFG_CSD,PC端ping成功~
  • lifeforrent 发表于 2022-7-28 19:16
    这里修改了吗?enet_init_status = enet_init(ENET_100M_HALFDUPLEX, ENET_AUTOCHECKSUM_DROP_FAILFRAMES,  ...

    这里默认为自动协商模式,协商完成后读取phy的寄存器会和PC端设置的模式相同。
    刚才也设置了成100M单工模式,还是无法连通。
  • 这里修改了吗?enet_init_status = enet_init(ENET_100M_HALFDUPLEX, ENET_AUTOCHECKSUM_DROP_FAILFRAMES, ENET_BROADCAST_FRAMES_PASS);
  • lifeforrent 发表于 2022-7-28 14:31
    可以把代码发下看看吗

    不让上传大于2M的文件,压缩后还有5M多呢。
    附上的是GD32F10x里的demo,稍微改动了一下。我这里用的是IAR IDE,KEIL没有试过是否能正常编译。

    这里用的phy为LAN8720A,地址为0 。GD32用25MHz晶体,PA8使能MCO输出25M时钟给LAN8720A。
    目前代码里IP为固定的192.168.2.100,phy设置为自动协商模式。

    程序下载到GD32后,PC端的网口直连到GD32板的网口。
    当PC端网口默认设置为自动协商模式时,用ping 192.168.2.100 能正常连通。
    PC端网口设置为单工模式时,就无法连通了。
    PC端网口设置为双工模式时,就正常连通了。

    更改PC端网口的模式:
    控制面板 -> 网络和 Internet -> 网络连接 -> 右键选择网卡 -> 单击弹出的菜单属性 -> 配置按钮 -> 高级页面 -> 单击属性列表的 Speed & Duplex -> 右边的值里选择相应的模式 -> 确定按钮
    注意,每次更改网卡模式后,GD32板需要重新上电复位,因未加断线重连功能。

    如果你们有现成的GD32的互联型的板,已经调通了以太网的,按上面的改动一下PC端网口的连接模式,看看单工模式下是否能正常连通,如果确实不能连通,那估计还是GD32互联型的芯片有BUG导致。
    请大家帮忙试试,不管是否能连通,请回复一下,谢谢各位了。
  • lifeforrent 发表于 2022-7-28 14:31
    可以把代码发下看看吗

    感谢感谢,需要点时间从GD32的例子里整理出来一个以太网的demo,稍微晚点传上来。
  • 可以把代码发下看看吗
12下一页

您需要登录后才可以回复 登录 | 注册