按照原子哥的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 可以看到有数据返回 说明网卡底层没啥问题,就是效验发生了错误~~ 有没有大神遇到过啊
接了10k的电阻下拉到地了
一周热门 更多>