justdomyself 发表于 2023-3-24 10:54:04

自己做的STM32F407+LAN8720板子,没插网线LINK灯就常亮,何解?

如题。

自己画得板子。
PHY芯片是LAN8720.
网络变压器是HR91105A.

不插上网线HR91105A的LINK灯就是常亮的,感觉不太正常。

原理图如下:


仿真了一下:

HAL_StatusTypeDef HAL_ETH_ReadPHYRegister(ETH_HandleTypeDef *heth, uint16_t PHYReg, uint32_t *RegValue)
{
uint32_t tmpreg1 = 0U;   
uint32_t tickstart = 0U;

/* Check parameters */
assert_param(IS_ETH_PHY_ADDRESS(heth->Init.PhyAddress));

/* Check the ETH peripheral state */
if(heth->State == HAL_ETH_STATE_BUSY_RD)
{
    return HAL_BUSY;
}
/* Set ETH HAL State to BUSY_RD */
heth->State = HAL_ETH_STATE_BUSY_RD;

/* Get the ETHERNET MACMIIAR value */
tmpreg1 = heth->Instance->MACMIIAR;

/* Keep only the CSR Clock Range CR bits value */
tmpreg1 &= ~ETH_MACMIIAR_CR_MASK;

/* Prepare the MII address register value */
tmpreg1 |=(((uint32_t)heth->Init.PhyAddress << 11U) & ETH_MACMIIAR_PA); /* Set the PHY device address   */
tmpreg1 |=(((uint32_t)PHYReg<<6U) & ETH_MACMIIAR_MR);                   /* Set the PHY register address */
tmpreg1 &= ~ETH_MACMIIAR_MW;                                          /* Set the read mode            */
tmpreg1 |= ETH_MACMIIAR_MB;                                             /* Set the MII Busy bit         */

/* Write the result value into the MII Address register */
heth->Instance->MACMIIAR = tmpreg1;

/* Get tick */
tickstart = HAL_GetTick();

/* Check for the Busy flag */
while((tmpreg1 & ETH_MACMIIAR_MB) == ETH_MACMIIAR_MB)
{
    /* Check for the Timeout */
    if((HAL_GetTick() - tickstart ) > PHY_READ_TO)
    {
      heth->State= HAL_ETH_STATE_READY;

      /* Process Unlocked */
      __HAL_UNLOCK(heth);
   
      return HAL_TIMEOUT;
    }
   
    tmpreg1 = heth->Instance->MACMIIAR;
}

/* Get MACMIIDR value */
*RegValue = (uint16_t)(heth->Instance->MACMIIDR);

/* Set ETH HAL State to READY */
heth->State = HAL_ETH_STATE_READY;

/* Return function status */
return HAL_OK;
}

这个函数是可以读取到PHY寄存器的值的。

也就是单片机和PHY芯片之间的焊接肯定是没问题的。

程序肯定是没有问题的,我在开发板运行就是正常的,这个板子也是参照开发板画的。



这是焊接的第二块板子了,反复检查,LAN8720A的PHY应该没问题。

有遇到的朋友给点建议 。谢谢

Rabbitoose 发表于 2023-3-24 12:31:49

原因不知道,但是R11应该是12.1K而不是2.1k。

justdomyself 发表于 2023-3-24 13:06:33

Rabbitoose 发表于 2023-3-24 12:31
原因不知道,但是R11应该是12.1K而不是2.1k。
(引用自2楼)

我是两个电阻加起来12.1k。
(板子上目前焊接的电阻是12.4k,不知道有没影响)

ffbiao 发表于 2023-3-24 13:46:19

电阻应该没有问题不大,核对一下以太网LED电路驱动,我一般不是这样设计

Rabbitoose 发表于 2023-3-24 13:54:55

ffbiao 发表于 2023-3-24 13:46
电阻应该没有问题不大,核对一下以太网LED电路驱动,我一般不是这样设计
(引用自4楼)

确实,我也不是这样的。

我是用LAN8720A直接驱动两颗LED的,9、12脚是两个LED的正极。楼主是开漏接法,不知道是不是这个原因。

justdomyself 发表于 2023-3-24 13:57:48

本帖最后由 justdomyself 于 2023-3-24 13:59 编辑

ffbiao 发表于 2023-3-24 13:46
电阻应该没有问题不大,核对一下以太网LED电路驱动,我一般不是这样设计
(引用自4楼)



这是我买的开发板的电路图。时钟是单片机输出25M.

然后led电阻是510欧姆的。还搞了个10k的下拉。

你的意思是我的led的限流电阻1k给的有点大了?

Rabbitoose 发表于 2023-3-24 14:23:58

justdomyself 发表于 2023-3-24 13:57
这是我买的开发板的电路图。时钟是单片机输出25M.

然后led电阻是510欧姆的。还搞了个10k的下拉。
(引用自6楼)

你的开发板的接法是推挽的,你的接法是开漏的。

具体来说,你的RJ45连接器的9、12脚接的是+3.3V,另一端接的是芯片IO。而开发板的9、12脚接的是芯片的IO,另一端接地。

Rabbitoose 发表于 2023-3-24 14:24:32

justdomyself 发表于 2023-3-24 13:57
这是我买的开发板的电路图。时钟是单片机输出25M.

然后led电阻是510欧姆的。还搞了个10k的下拉。
(引用自6楼)

1k电阻限流不是问题。

akey3000 发表于 2023-3-24 14:26:50

关注下,以前也碰到过类似问题,能通信就没有管

justdomyself 发表于 2023-3-24 14:32:44

akey3000 发表于 2023-3-24 14:26
关注下,以前也碰到过类似问题,能通信就没有管
(引用自9楼)

link灯常亮。

网络通信还是正常的?有这种情况存在么

akey3000 发表于 2023-3-24 15:48:03

justdomyself 发表于 2023-3-24 14:32
link灯常亮。

网络通信还是正常的?有这种情况存在么
(引用自10楼)

存在。可能和工作模式有关,比如10m,100m,全双工,半双工之类。我当时用的enc28j60

justdomyself 发表于 2023-3-24 15:56:16

akey3000 发表于 2023-3-24 15:48
存在。可能和工作模式有关,比如10m,100m,全双工,半双工之类。我当时用的enc28j60 ...
(引用自11楼)

LINK 和 STATUS 两个LED灯是PHY芯片输出的指示信号,
指示网络连接和状态。

这两个灯的电阻不对顶多导致LED亮度。跟网络通信没有丝毫关系啊。

polarbear 发表于 2023-3-24 16:10:48

我也遇到这个问题, 通讯正常,做几十块板,不插网线时, 有些LINK 指示灯常亮, 有些不常亮,   但是网口都能正常工作, 你说气人不;

亽亼 发表于 2023-3-24 16:22:20


第13-15页仔细看下,LED引脚是有特殊功能的,不是随便接接的

justdomyself 发表于 2023-3-24 20:21:53

polarbear 发表于 2023-3-24 16:10
我也遇到这个问题, 通讯正常,做几十块板,不插网线时, 有些LINK 指示灯常亮, 有些不常亮,   但是网 ...
(引用自13楼)

我焊接了两块 ,都是link亮,上不了网。

justdomyself 发表于 2023-3-24 20:33:40

亽亼 发表于 2023-3-24 16:22
第13-15页仔细看下,LED引脚是有特殊功能的,不是随便接接的
(引用自14楼)

看了下文档。he开发板的图对比了一下。

感觉我1k的限流电阻应该不是问题,问题可能是我的LINK heSTATUS两个灯脚没有接下拉电阻。

目前感觉是这样的。不知道分析对不对 。

justdomyself 发表于 2023-3-24 21:46:11

没想到真是灯的问题,我要哭晕在厕所了。

按照开发板上面的接法。
经过各种割线,终于可以联网了。

感谢楼上各位的支持。

其实很大一点是自己QFN焊接不好,一直怀疑是焊接问题。

总之谢谢大家!!!

qwe2231695 发表于 2023-3-25 02:25:28

解决了吗,是要严格按参考原理图接就行了对吗

justdomyself 发表于 2023-3-25 06:39:44

qwe2231695 发表于 2023-3-25 02:25
解决了吗,是要严格按参考原理图接就行了对吗
(引用自18楼)

是的。按照开发板那个电路来。link status接led串510电阻到地。同时link status 各10k下拉,不加下拉都不行。

john78 发表于 2023-3-25 07:44:44

justdomyself 发表于 2023-3-24 13:57
这是我买的开发板的电路图。时钟是单片机输出25M.

然后led电阻是510欧姆的。还搞了个10k的下拉。
(引用自6楼)

我也是这个接法,限流电阻1K也是可以的

justdomyself 发表于 2023-3-25 09:29:04

john78 发表于 2023-3-25 07:44
我也是这个接法,限流电阻1K也是可以的
(引用自20楼)

我这个板实际接的50欧的限流电阻。找不到合适的电阻,手头上。

justdomyself 发表于 2023-3-25 09:30:08

polarbear 发表于 2023-3-24 16:10
我也遇到这个问题, 通讯正常,做几十块板,不插网线时, 有些LINK 指示灯常亮, 有些不常亮,   但是网 ...
(引用自13楼)

你是怎么接的,感觉不太正常。

polarbear 发表于 2023-3-25 10:09:21

justdomyself 发表于 2023-3-25 09:30
你是怎么接的,感觉不太正常。
(引用自22楼)

按照上面发checklist 的电路接, 下拉该加的,都加了;   就是link 指示灯不正常,不插网线,指示灯也亮; 网上的人说是焊接问题

网口通讯是正常的, 10,100M 都测试过

marshallemon 发表于 2023-3-25 21:59:04

LAN8720通讯速率可以做到多少?
页: [1]
查看完整版本: 自己做的STM32F407+LAN8720板子,没插网线LINK灯就常亮,何解?