基于正点原子的教程使用NXP开发板的uboot移植到野火的开发板上--网络驱动部分

参考博文:感谢:https://blog.51cto.com/xxpcb/3175658

一:在移植完LCD驱动以后进行网络驱动的移植

1、找到了NXPevk开发板的原理图,对照着野火开发板原理图,发现都是使用的ENET外设,rmii,所以不需要更改代码即可直接移植到野火开发板上,使用的PHY芯片也是一样的KSZ8081,复位引脚也是一样的
2、最主要的就是设置好
setenv ipaddr 192.168.102.115 //开发板 IP 地址 这个只要在局域网内不和其他地址冲突即可
setenv ethaddr 00:04:9f:04:d2:35 //开发板网卡 MAC 地址 这个只要在局域网内不和其他地址冲突即可
setenv gatewayip 192.168.5.1 //开发板默认网关 这个需要和自己的主机一致,因为属于同一个局域网内,他的默认网关和子网掩码都是一样的
在Linux内核中,udhcpc刷新网关,不一定是和局域网内一样的网关
setenv netmask 255.255.255.0 //开发板子网掩码
setenv serverip 192.168.102.170 //服务器地址,也就是 Ubuntu 地址
saveenv

然后发现ping 192.168.102.170,开发板出现了不停的启动,查找资料得知,是uboot源码出了问题,故作如下更改:
进入nxp的官方开发板uboot源码

cd /arch/arm/cpu/armv7
更改start.S文件
在这里插入图片描述
重新进行烧录,再次ping 192.168.102.170发现可以ping通,过程不需要重启

注意细节:
CONFIG_FEC_ENET_DEV默认为1,表示使用的是ENET2,也就是FEC1,地址为0x01,是通过13脚(PHYAD0)、14脚(PHYAD1)的高低电平来设置地址的
正点原子的 I.MX6U-ALPHA 开发板的 ENET2 为 eth0, ENET1 为 eth1

想要ping www.baidu.com 需要先udhcpc分配一个地址,然后将开发板的地址改成分配的这个即可
ifconfig eth0 192.168.1.251 netmask 255.255.255.0 //设置 IP 地址和子网掩码
route add default gw 192.168.1.1 //添加默认网关
/etc/init.d/rcS
在这里插入图片描述

如果想使用ENET1,那么就要把CONFIG_FEC_ENET_DEV更改为0,地址为0x02
在这里插入图片描述

该文件在include/configs/mx6ull_alientek_emmc.h当中

二:当NXPevk开发板换成了正点原子的开发板,PHY芯片变成了LAN8720A,复位引脚发生了变换

这里修改的是ENET1,修改如下三点:
①、 ENET1 复位引脚初始化。
②、 LAN8720A 的器件 ID。
③、 LAN8720 驱动

1、首先修改LAN8720的地址,根据原理图的知识可以得到两个ENET接的PHY芯片的地址是啥,在mx6ull_alientek_emmc.h中修改
修改完地址以后需要修改一下对应的PHY芯片公司,比如NXP官方开发板用的KSZ8081和LAN8720的芯片就不同,将第345行改为
在这里插入图片描述
在这里插入图片描述
2、更改复位引脚,NXP使用了74LV595来扩展IO口,这里将其删除和更改,因为复位引脚直连的IO口,
在mx6ull_alientek_emmc.c中:
在这里插入图片描述
将其替换为
在这里插入图片描述
ENET1 的复位引脚连接到 SNVS_TAMPER7 上,对应 GPIO5_IO07, ENET2 的复位引脚连接到 SNVS_TAMPER8 上,对应 GPIO5_IO08。
继续在该文件中:iox74lv_init 函数是 74LV595 的初始化函数, iox74lv_set 函数用于控制 74LV595 的 IO 输出电平,将这两个函数全部删除掉!

在 mx6ull_alientek_emmc.c 中找到 board_init 函数,此函数是板子初始化函数,会被board_init_r 调用
board_init 会调用 imx_iomux_v3_setup_multiple_pads 和 iox74lv_init 这两个函数来初始化74lv595 的 GPIO,将这两行删除掉。
在这里插入图片描述
添加 I.MX6U-ALPHA 开发板网络复位引脚驱动

在mx6ull_alientek_emmc.c 找到结构体数组 fec1_pads 和 fec2_pads 是 ENET1 和 ENET2 这两个网口的 IO 配置参数,在两个数组的最后分别添加
MX6_PAD_SNVS_TAMPER7__GPIO5_IO07 | MUX_PAD_CTRL(NO_PAD_CTRL),
MX6_PAD_SNVS_TAMPER8__GPIO5_IO08 | MUX_PAD_CTRL(NO_PAD_CTRL),

继续在文件 mx6ull_alientek_emmc.c 中找到函数 setup_iomux_fec
函数 setup_iomux_fec 就是根据 fec1_pads 和 fec2_pads 这两个网络 IO 配置数组来初始化I.MX6ULL 的网络 IO
需要在其中加入一些网络复位IO的初始化代码,并且复位一下PHY芯片
分别在这个函数的两个结构里面加入
gpio_direction_output(ENET1_RESET, 1);
gpio_set_value(ENET1_RESET, 0);
mdelay(20);
gpio_set_value(ENET1_RESET, 1);

打开文件drivers/net/phy/phy.c,找到函数 genphy_update_link,这是个通用 PHY 驱动函数,此函数用于更新 PHY 的连接状态和速度。使用 LAN8720A 的时候需要在此函数中添加一些代码

在这里插入图片描述
右端灰色的为原厂开发板的相关文件,黄色的为模仿原厂文件,新添加并修改的自己开发板的文件。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值