Bootstrap

stm32F407 调试 LAN8720A ping不通问题解决

硬件信息

主控:stm32f407VET6

PHY芯片:LAN8720A

网络变压器:HR91105A 带网口座

TCP/IP 协议栈

LWIP

版图设计

 

PCB制作完成,打样板回来后,发现有几个问题:

  1. HR911105A的 4 脚忘了接。。。应该接到VDDE,此处飞线轻松解决;
  2. LAN8720A的封装用的不太好,芯片背面的焊盘是用来接地的,这也是该芯片唯一接地的地方,而我把这个焊盘画的有点小了,如图:

     

然后拿来野火的例程一通试,因为野火的是stm32F407ZET6,所以网络部分引脚分配和我有一点区别,就是ETH_TX_EN、ETH_TXD0 和 ETH_TXD1。

把这三个引脚改了改:

#define ETH_TX_EN_Pin               GPIO_PIN_11       //B11
#define ETH_TX_EN_GPIO_Port         GPIOB
#define ETH_TXD0_Pin                GPIO_PIN_12       //B12
#define ETH_TXD0_GPIO_Port          GPIOB
#define ETH_TXD1_Pin                GPIO_PIN_13       //B13
#define ETH_TXD1_GPIO_Port          GPIOB 

然后就是连接网线,配置IP,一通ping,结果并不能ping通。

  • 关防火墙,没用
  • 往LAN8720A底下的过孔灌锡,使其可靠接触,没用
  • 此时发现R7 R9两个电阻的阻值有问题,野火推荐是4.7K ,正点原子是10K ,我画成了510R。。。不过是下拉电阻应该没影响,换成4.7K ,没用
  • HR911105A的两个灯的串联电阻阻值不对,我也都画成了510R,可是灯都亮了,能有个毛的影响。
  • 换成正点原子的例程一通试,没用

现在是程序能够跑到 eth init 成功,也能跑到 LinkUP,可是就TMDping不通。

然后就查网上各种帖子,有人说把PHY芯片的地址设为1就可以ping通了,

/* LAN8720_PHY_ADDRESS Address*/ 
#define LAN8720_PHY_ADDRESS          1U

我也试了试,发现无论PHY芯片地址设为几,都能 init 成功,这不扯淡吗?看了看官方手册,人家就是说如果10脚不接,地址默认就为0,设置成0肯定是对的。

这时又发现了我LAN8720A的复位脚没接,OMG,这个到底有没有影响?再查芯片手册。

手册上说,这个脚人家为了防止你犯傻,已经内部上拉了,所以不接它肯定不影响你传输东西!

现在是绿灯常亮,黄灯偶尔闪一下,ping的时候,程序里倒是进了中断,但是就是ping不通。

好吧,再读一下程序,发现:



卧槽,

够坑啊,这他么怎么不用宏,直接写了个GPIOG啊,我100脚VET6哪有GPIOG,果断改成GPIOB,结果直接ping通,哈哈哈 大快人心!

难怪ping不通,能收到但是发不出来肯定不通啊。

然后我再试了试改下PHY芯片地址,改成其他数值都不行,只有0 可以,看来这个LWIP的程序是有点问题的,以后有时间了再仔细考究下。

;