首页 > 其他分享 >rtthread系统用 RT1062 移植网卡功能(LAN8720A)

rtthread系统用 RT1062 移植网卡功能(LAN8720A)

时间:2024-02-01 18:01:15浏览次数:26  
标签:PHY 引脚 phy rtthread RT1062 网卡 MAC LAN8720A

RT-Thread: v4.0.2(master)
SOC: i.MX RT1062
Board: 自研控制板

背景描述
1.有个控制板网口一直没人调试。
2.NXP RT1xxx系列ENET_MAC调试心得。

3.Ethernet MAC控制器调试《终极指南》。

 

开整

RT1062 移植网卡功能(LAN8720A)

1、i.MX RT 系列外设驱动添加指南

2、LAN8720A 芯片的驱动代码:fsl_phy.c,fsl_phy.h

3、编写 phy 复位函数 imxrt_enet_phy_reset_by_gpio

1、用 MCUXpresso 生成 pin_mux.h pin_mux.c 复用代码时,要根据自己开发板原理图,我们这里是移植的网卡,所以要注意从SOC到PHY芯片之间用到的引脚。然后结合 LAN8720A 芯片手册来进行配置。这里我使用的野火提供的FreeRTOS中lwip例程,这个例程有LAN8720A 芯片的驱动代码 fsl_phy.c,fsl_phy.h。所以直接拿过来使用进行。将 pin_mux.c 中的 “BOARD_InitPins” 函数下有关网卡配置的代码,复制到你的工程中。(NXP官网上没有找到关于LAN8720A的驱动,而且NXP的官方开发板“MIMXRT1050-EVK”使用的是“ksz8081”phy芯片)

编写 phy 复位函数 imxrt_enet_phy_reset_by_gpio,代码见 board.h board.c

void imxrt_enet_phy_reset_by_gpio(void)
{
    gpio_pin_config_t gpio_config = {kGPIO_DigitalOutput, 0, kGPIO_NoIntmode};

    GPIO_PinInit(GPIO2, 30, &gpio_config);
    GPIO_WritePinOutput(GPIO2, 30, 0);
    GPIO_PinInit(GPIO3, 2, &gpio_config);
    GPIO_PinInit(GPIO3, 3, &gpio_config);
    /* pull up the ENET_INT before RESET. */
    GPIO_WritePinOutput(GPIO3, 2, 1);
    GPIO_WritePinOutput(GPIO3, 3, 0);
    rt_thread_delay(100);
    GPIO_WritePinOutput(GPIO3, 3, 1);
}

void imxrt_enet_phy_reset_by_gpio(void);
#define PHY_ADDRESS (0x00U)

2、menuconfig 配置
在 RT-Thread Components → Network → light weight TCP/IP stack 下
关闭 “Enable alloc ip address through DHCP”
进入 “Static IPv4 Address” 并设置IP,网关,掩码
scons --target=mdk5 -s
编译并下载,程序正常运行,ping 检测, 网络正常
3、移植网卡驱动过程的思路

1、去 RT-Thread 官网下载 Env工具,打开对应的配置项。

2、移植L8720的驱动程序,lwip 的方法来移植 rt-thread中的网卡。

3、enet_ethernetif.c 该文件中也有包含 #include "fsl_enet.h"。

4、移植网卡驱动, 主要是针对 fsl_enet.c,fsl_enet.h 这两个文件。

4、电路上关于8720的一些配置。

MODE[2:0]: Mode配置

用于选择 LAN8720A 网络通信速率和工作模式

MODE[0]与 RXD0 引脚共用

nINTSEL: nINT/REFCLKO配置 当 nINTSEL引脚为低电平时 可以直接连

通过nINTSEL来配置两个模式:REF_CLK输入模式(nINT)和REF_CLK输出模式。通过该引脚的高低电平决定了nINT / REFCLKO引脚的功能。

当 nINTSEL引脚为低电平时,它也可以被设置成 50MHz 时钟输出,这样可以直接与 主机MAC接口 的 REF_CLK引脚连接为其提供 50MHz时钟源,这种模式要求为 XTAL1 与 XTAL2 之间或为 XTAL1/CLKIN提供 25MHz时钟,由 LAN8720A内部 PLL电路陪频得到 50MHz 时钟,此时nIN/REFCLKO 引脚的中断功能不可用,用于 50MHz时钟输出。

 

5. REGOFF: 配置内部+1.2V电压源

REGOFF引脚用于配置内部+1.2V电压源,LAN8720A 内部需要+1.2V电压,可以通过VDDCR引脚输入+1.2V 电压提供,也可以直接利用 LAN8720A 内部+1.2V 稳压器提供。当REGOFF引脚为低电平时选择内部+1.2V稳压器。REGOFF与 LED1 引脚共用。

由于REGOFF的配置与LED1引脚共享功能,因此还必须适当考虑LED的极性。下面是REGOFF引脚为低电平时的实例如下:

MDIO接口

MDIO是双向的,只支持一个MAC连接最多32个PHY的连接方式,且MAC作为master,PHY作为slave。在写PHY寄存器的时候,由MAC驱动MDIO向PHY写入数据;在读PHY寄存器时,前半段由MAC驱动发送寄存器地址,后半段由PHY驱动回复寄存器的值。

MDC要求由MAC输出,是非周期性的,即不要求提供固定频率的时钟,对于PHY芯片则作为输入,以在上升沿触发MDIO的读写。MDC的时钟频率可以是DC-2.5MHz,即最小的时钟周期为400ns。

硬件管脚分配

pin_mux.c中的BOARD_InitPins函数。

针对RMII模式,PHY和MAC之间需要做时钟同步。 REF_CLK

OMUX_SW_MUX_CTL_PAD[SION] = 1:该bit的作用是强制开启该管脚的输入功能,这样相当于ENET_PLL时钟通过该管脚输出后又接回到ENET_REF_CLK,该bit可以通过IOMUXC_SetPinMux函数最后一个入参来设置。

5 软件调试注意的问题

g_txBuffDescrip: TXBD作为发送描述符一般由length, control, buffer三个域所组成,其中length表示要发送的数据长度,control表示发送的控制bit,buffer是发送地址指针,发送函数会将g_txDataBuff的地址填入该指针。需要注意的是,该变量必须放在noncache的数据区,并且按照一定的对齐方式进行对齐,默认是64字节。

查看的资料:

NXP RT1xxx系列ENET_MAC调试心得

https://mp.weixin.qq.com/s/jMmipY2GDMq12hu4SJH-Eg

Ethernet MAC控制器调试《终极指南》

https://mp.weixin.qq.com/s/vbJsLW0YgATywYkmN5DwNQ

6、太晚了

文章记录的有点乱,有啥问题可以找我技术交流吧。

 

标签:PHY,引脚,phy,rtthread,RT1062,网卡,MAC,LAN8720A
From: https://www.cnblogs.com/wt88/p/18001281

相关文章

  • linux单网卡双IP配置
     [root@localhost~]#more/etc/sysconfig/network-scripts/ifcfg-ens224/etc/sysconfig/network-scripts/ifcfg-ens224:1::::::::::::::/etc/sysconfig/network-scripts/ifcfg-ens224::::::::::::::TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=no#BOOTPROTO=dhcp......
  • 解决centos7修改网卡名为eth0仍显示ens33的问题
    1.进入/etc/sysconfig/network-scripts修改网卡配置文件中的DEVICE=与NAME=参数为eth0保存退出后再修改网卡配置文件名mvifcfg-ens33ifcfg-eth02.重新生成grub2文件编辑/etc/default/grub配置文件,在GRUB_CMDLINE_LINUX这个参数后面加入:net.ifnames=0biosdevnam......
  • Linux 网卡Bonding配置
    当在Linux系统上使用Bonding技术时,实际上是将多个物理网络接口(也称为Slave接口)绑定在一起,形成一个虚拟的Bond接口。这个Bond接口可以提高网络的可靠性和性能,有助于负载均衡和容错。配置Linux系统上Bonding的步骤:步骤1:加载Bonding模块在Linux内核中,Bonding功能是通过一个模块实......
  • 详解Linux双网卡绑定之bond0
    1、什么是bond?网卡bond是通过多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,在生产场景中是一种常用的技术。Kernels2.4.12及以后的版本均供bonding模块,以前的版本可以通过patch实现。2、实现原理:网卡工作在混杂(promisc)模式,接收到达网卡的所有数据包,tcp......
  • 双网卡问题及route命令使用
    双网卡问题:IP路由依次查找:路由表IP段->默认路由1->默认路由2;如果路由表有目标IP段路由,则使用该路由;如果没有则使用默认路由;双网卡通常会自动有两个默认路由,这就可能导致网络问题;1,如果两张网卡设备都连接相同网络,这种情况不会有问题,两边网络一样使用那个默认路由都可以。2,通常情况......
  • Centos 静态IP网卡格式
    TYPE="Ethernet"PROXY_METHOD="none"BROWSER_ONLY="no"BOOTPROTO="static"修改该项dhcp为staticIPADDR=192.168.1.129增加静态IP地址NETMASK=255.255.255.0子网掩码GATEWAY=192.168.1.1子网网关DNS1=114.114.114.114DNSDE......
  • 自动修改网卡 IP
    1.讲个故事   我的一同事需要调试PLC,需要经常修改电脑IP在各个工位的PLC间来回连接。于是,每次需要改变IP的时候都是手动点开网络管理界面然后再修改。终于有一天,一天改80次IP的他开始开始抱怨,手动修改IP真TM麻烦。于是我就想了个办法怎么来偷懒解决这个问题......
  • j3455黑群晖 安装ax88179的usb网卡
    参考的教程: https://vircloud.net/exp/dsm-ax88179.html#selection-183.3326-183.3339驱动下载: https://github.com/pocopico/rp-ext/tree/main/ax88179_178a/releases开启ssh.具体请自行搜索开启admin账号用户群组---用户账号---admin---右击编辑-----停用此用户账号......
  • Linux网卡配置文件解析
    [root@localhost130~]#cat/etc/sysconfig/network-scripts/ifcfg-ens33TYPE="Ethernet"#网络类型为以太网#PROXY_METHOD="none"#代理方式#BROWSER_ONLY="no"#只是浏览器:否BOOTPROTO="static"#网卡协议获取网卡ip的方式,dhcp动态主机配置协议也就是自动获取,no......
  • liunx双网卡负载均衡
    一、bonding技术bonding(绑定)是一种linux系统下的网卡绑定技术,可以把服务器上n个物理网卡在系统内部抽象(绑定)成一个逻辑上的网卡,能够提升网络吞吐量、实现网络冗余、负载等功能,有很多优势。bonding技术是linux系统内核层面实现的,它是一个内核模块(驱动)。使用它需要系统有这......