按照原子哥的lan8720电路做的板子,现在已调试通过。总结几点经验吧~~1.lan8720下面有一个焊盘,一定要记得接地。这个封装真的很难受,手工焊接很不爽,尤其是底部焊盘,我用风枪吹了好多次,而且板子还坏了一块。。。。
下次做这个的时候,最好在底部开一个窗或者放个大焊盘,手工焊接可以从底部灌锡进去。
2.判断8720是否正常工作,可以测量14脚,时钟输出端,正常上电情况下(不能处于复位)应该输出50mhz
3.可以使用usmart工具查询8720寄存器状态 看看通信是否成功。
4.刚开始不理解2 3脚 link led为啥加10k下拉,排版的时候电阻加上了,焊接的时候省事没焊接(觉得没啥用),后来测试的时候 不管网线查不查,rj45的指示灯都亮着~~~结果又焊上下拉电阻,指示灯正常。
还有一个问题,不焊接那俩下拉电阻,程序里面一直在HAL_ETH_Init里面出不来,调试的时候发现 在这个函数里面
/* Wait for software reset */
while (((heth->Instance)->DMABMR & ETH_DMABMR_SR) != (uint32_t)RESET)
{
}
等待软件复位? 是复位8720吗,硬件检查8720复位电路没问题。
把那俩10k下拉电阻焊接上,这个问题就解决了~~~哈哈 不解
5.还是在HAL_ETH_Init当中,上个问题解决了,HAL_ETH_Init返回3,查看错误是超时连接,
/* We wait for linked status */
do
{
HAL_ETH_ReadPHYRegister(heth, PHY_BSR, &phyreg);
/* Check for the Timeout */
if((HAL_GetTick() - tickstart ) > LINKED_STATE_TIMEOUT_VALUE)
{
/* In case of write timeout */
err = ETH_ERROR;
/* Config MAC and DMA */
ETH_MACDMAConfig(heth, err);
heth->State= HAL_ETH_STATE_READY;
/* Process Unlocked */
__HAL_UNLOCK(heth);
return HAL_TIMEOUT;
}
} while (((phyreg & PHY_LINKED_STATUS) != PHY_LINKED_STATUS));
为啥超时咧~我也不太清楚
,那就把这两个宏 LINKED_STATE_TIMEOUT_VALUE 、 AUTONEGO_COMPLETED_TIMEOUT_VALUE 时间设置的大一些 原来是2s 1s 我改成3s 2s还是不行 直接加个0(20s 10s)。。。搞定
这个时间修改过后,还特意做了下实验,跟原子开发板l从上电初始化到能够ping通,差不多都是25s左右,所以也没在意~~~~
接下来移植了原子的网络试验,测试tcp udp web都没问题,就是tcp server出现了问题,网络调试助手链接不上啊~~又试了开发板,也是server 链接不上。。。
开发板设置server 模式,我电脑本地ip 192.168.1.100
开发板 server ip 192.168.1.30 端口 8088
网络调试助手硬是链接不上。。。郁闷了 tcp client 、udp、 web都没问题
关于2 3脚 link led为啥加10k下拉 刚又看了下例程 有提到
当该引脚接下拉电阻时,正常工作后, nINT/REFCLKO 引脚将作为参考时钟输出(选
中 REF_CLK OUT 模式)。
LAN8720A 需要 1.2V 电压给 VDDCR 供电,不过芯片内部集成了 1.2V 稳压器,可以通过
LED1(REGOFF)来配置是否使用内部稳压器,当不使用内部稳压器的时候,必须外部提供 1.2V
电压给 VDDCR 引脚。这里我们使用内部稳压器,所以我们在 LED1 接下拉电阻(浮空也行,
内置了下拉电阻),以控制开启内部 1.2V 稳压器。 所以正常情况下 8720的6脚为1.2v
这就是不好好学习的结果 多亏排版的时候把那俩电阻加上了,不然还麻烦了
一周热门 更多>