全志T527 适配YT8531 双以太网

news2024/11/15 21:33:11

一、确认硬件接口

phy1:

phy2:

PHY 地址设置:

        YT8531 的地址由上图所示的三个管脚外接 ( 或内部默认 ) 电阻来配置。外部不接上下拉电阻时,内部默认 phy 地址为 000( 十进制 0) ;若外接电阻,例如上图所接,则配置的地址是 011( 十进制 3)
以上三管脚要接上拉电阻时候,需接到 DVDD_RGMII 电压上;

二、软件配置

覆盖规则:板级配置文件board.dts会覆盖sun55iw3p1.dtsi

1、设备树:

bsp/configs/linux-5.15/sun55iw3p1.dtsi

                gmac0: gmac0@4500000 {
                        compatible = "allwinner,sunxi-gmac";
                        reg = <0x0 0x04500000 0x0 0x10000>,
                              <0x0 0x03000030 0x0 0x4>;
                        interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>;
                        interrupt-names = "gmacirq";
                        clocks = <&ccu CLK_GMAC0>, <&ccu CLK_GMAC0_25M>;
                        clock-names = "gmac", "phy25m";
                        resets = <&ccu RST_BUS_GMAC0>;
                        phy-handle = <&gmac0_phy0>;
                        status = "disabled";
                };

                gmac1: ethernet@4510000 {
                        compatible = "allwinner,sunxi-gmac-200", "snps,dwmac-4.20a";
                        reg = <0x0 0x04510000 0x0 0x10000>,
                              <0x0 0x03000034 0x0 0x4>;
                        interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>;
                        interrupt-names = "macirq";
                        clocks = <&ccu CLK_GMAC1>, <&ccu CLK_GMAC1_MBUS_GATE>, <&ccu CLK_GMAC1_25M>;
                        clock-names = "stmmaceth", "pclk", "phy25m";
                        resets = <&ccu RST_BUS_GMAC1>;
                        reset-names = "stmmaceth";
                        phy-handle = <&gmac1_phy0>;
                        power-domains = <&pd1 A523_PCK_VO1>;
                        status = "disabled";


                        snps,fixed-burst;

                        snps,axi-config = <&gmac1_stmmac_axi_setup>;
                        snps,mtl-rx-config = <&gmac1_mtl_rx_setup>;
                        snps,mtl-tx-config = <&gmac1_mtl_tx_setup>;

                        gmac1_stmmac_axi_setup: stmmac-axi-config {
                                snps,wr_osr_lmt = <0xf>;
                                snps,rd_osr_lmt = <0xf>;
                                snps,blen = <256 128 64 32 16 8 4>;
                        };

                        gmac1_mtl_rx_setup: rx-queues-config {
                                snps,rx-queues-to-use = <1>;
                                queue0 {};
                        };

                        gmac1_mtl_tx_setup: tx_queues-config {
                                snps,tx-queues-to-use = <1>;
                                queue0 {};
                        };

                        mdio1: mdio1@1 {
                                compatible = "snps,dwmac-mdio";
                                #address-cells = <1>;
                                #size-cells = <0>;
                                gmac1_phy0: ethernet-phy@1 {
                                        compatible = "ethernet-phy-ieee802.3-c22";
                                        reg = <1>;
                                        max-speed = <1000>;  /* Max speed capability */
                                        reset-gpios = <&pio PJ 27 GPIO_ACTIVE_LOW>;
                                        /* PHY datasheet rst time */
                                        reset-assert-us = <10000>;
                                        reset-deassert-us = <150000>;
                                };
                        };
                };

device/config/chips/t527/configs/demo_linux_car/linux-5.15/board.dts

&gmac0 {
        phy-mode = "rgmii";
        pinctrl-names = "default", "sleep";
        pinctrl-0 = <&gmac0_pins_default>;
        pinctrl-1 = <&gmac0_pins_sleep>;
        sunxi,phy-clk-type = <0>;//使用内部时钟还是外部时钟

        tx-delay = <3>;
        rx-delay = <4>;

        gmac3v3-supply = <&reg_cldo3>;
        status = "okay";

};


&gmac1 {
        phy-mode = "rgmii";
        pinctrl-names = "default", "sleep";
        pinctrl-0 = <&gmac1_pins_default>;
        pinctrl-1 = <&gmac1_pins_sleep>;
        aw,soc-phy25m;//有这个属性表示使用soc提供的内部25M
        tx-delay = <3>;
        rx-delay = <4>;
        dwmac3v3-supply = <&reg_cldo3>;
        status = "okay";
        mdio1: mdio1@1 {
                gmac1_phy0: ethernet-phy@1 {
                        reset-gpios = <&pio PJ 18  GPIO_ACTIVE_LOW>;
                };
        };

};

2、引脚信息:

3、Kconfig:

路径:/drivers/net/phy/Kconfig

+config MOTORCOMM_PHY

tristate "Motorcomm PHYs"
---help---
Supports the YT8010, YT8510, YT8511, YT8512 PHYs.

4、Makefile:

路径:/drivers/net/phy/Makefile

obj-$(CONFIG_XILINX_GMII2RGMII) += xilinx_gmii2rgmii.o

+obj-$(CONFIG_MOTORCOMM_PHY) += motorcomm.o

5、menuconfig内核中勾选motorcomm

如果需要保存该.config 配置到相应的 defconfig 里面,可以到 Tina5.0 根目录下执行以下指令。

./build.sh saveconfig

6、驱动

kernel/linux-5.15/drivers/net/phy/motorcomm.c

三、测试

1、查看驱动:

ls /sys/bus/mdio_bus/drivers

移植驱动完成后有以下打印信息:

PHY ID 4f51e91b at 1 IRQ poll (4500048.mdio0-mii:01)

PHY [stmmac-0:01] driver [YT8531 Gigabit Ethernet] (irq=POLL)

2、网卡查看:ifconfig -a

3、打开网卡

ifconfig eth0 up

ifconfig eth1 up

4、关闭网卡

ifconfig eth0 down

ifconfig eth1 down

5、设置静态IP:

ifconfig eth0 172.16.112.244

6、获取 IP 地址

udhcpc -i eth0

udhcpc -i eth1

7、设置速率:

ethtool -s eth0 speed 1000 duplex full autoneg on

ethtool -s eth speed 1000 duplex full autoneg off

测试芯片外围,TX 和 RX 发现 tx clk 时钟 125M ,而 rx clk 是25M,phy 芯片 在 1000M 速率下 TX 和 RX 时钟都应为 125M

Ping百度出现bad address 'www.baidu.com'

解决方法:

1.设置IP

首先打开文 件 vi /etc/network/interfaces在

auto lo

iface lo inet loopback

加上

auto eth0

iface eth0 inet dhcp

2.配置DNS

打开文件vi /etc/resolv.conf

加入

#Google

nameserver 8.8.8.8

nameserver 8.8.4.4

2、重启

最后ping www.baidu.com结果如下

8、iperf3速率测试

iperf3 -s

iperf3 -c IP iperf3 -u -c 172.16.112.75 -i 1 -b 1000M -l 65507

route add default gw 172.16.112.1

测试出现千兆速率不达标情况

四、问题分析

排查点1:

SOC会给PHY提供一个25M的时钟

和下方25M晶振重复,只能使用一个,去掉晶振

排查点2:

根据芯片手册:

发现引脚反了

更改引脚后,示波器测量TX RX的CLK均为125M

再次ping时出现丢包问题,排查解决丢包问题,是否丢包引起速率不达标现象

调整TX RX时延:

调试方法如下:请注意rx_delay和tx_delay的范围(tx_delay【0~7】;rx_delay【0~31】)
cd /sys/devices/platform/soc@3000000/4500000.gmac0
echo xx >  tx_delay
echo  xx > rx_delay
查看当前tx_delay/rx_delay数值的方法
cat tx_delay
cat rx_delay

cat /sys/devices/platform/soc@3000000/4500000.gmac0/tx_delay
echo  xx > /sys/devices/platform/soc@3000000/4500000.gmac0/tx_delay

发现tx_delay的范围在:0~3 rx_delay的范围4~18 ,丢包率在0到4左右

修改后不丢包速率正常

排查点三:eth1

ifconfig eth1后不能link,偶尔会出现下述情况

用示波器测量外部供电,时钟,发现soc连接phy25M时钟为0

查看硬件

发现SOC的25M时钟未连接到phy

硬件连接好后,eth1能正常link

与PC端ping

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1911023.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端面试题33(实时消息传输)

前端实时传输协议主要用于实现实时数据交换&#xff0c;特别是在Web应用中&#xff0c;它们让开发者能够构建具有实时功能的应用&#xff0c;如聊天、在线协作、游戏等。以下是几种常见的前端实时传输协议的讲解&#xff1a; 1. Short Polling (短轮询) 原理&#xff1a;客户…

二分查找3

1. 有序数组中的单一元素&#xff08;540&#xff09; 题目描述&#xff1a; 算法原理&#xff1a; 二分查找解题关键就在于去找到数组的二段性&#xff0c;这里数组的二段性是从单个数字a开始出现然后分隔出来的&#xff0c;如果mid落入左半部分那么当mid为偶数时nums[mid1]…

搞清楚[继承],易如反掌

穷不失义&#xff0c;达不离道。——孔丘《论语》 继承 1、简单理解2、继承2、1、继承的概念2、2、继承定义2、3、基类和派生类对象赋值转换2、4、继承中的作用域2、5、派生类默认成员函数2、6、继承中的特点2、6、1、友元2、6、2、静态成员2、6、3、菱形继承及菱形虚拟继承 3、…

【开源】基于RMBG的一键抠图与证件照制作系统【含一键启动包】

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

2024浙江外国语学院汉语桥线上项目 “在杭州,看见更好的中国”开班

7月9日上午&#xff0c;由教育部中外语言交流合作中心主办、浙江外国语学院国际商学院承办的2024汉语桥“在杭州&#xff0c;看见更好的中国”线上项目正式启动。项目负责人何骅老师及汉语桥教师团队&#xff0c;与来自越南、缅甸、日本、俄罗斯的100名学员相聚云端&#xff0c…

JavaSE学习笔记第二弹——对象和多态(上)

目录 面向对象基础 面向对象程序设计的定义 类的基本结构 成员变量 成员方法 方法定义与使用 设计练习 方法重载 构造方法 静态变量和静态方法 String和StringBuilder 基本含义 区别 总结 今天我们继续来学习JavaSE&#xff0c;扩展和Java相关的知识&#xff0c;…

当CNN遇上Mamba,高性能与高效率通通拿下!

传统视觉模型在处理大规模或高分辨率图像时存在一定限制&#xff0c;为解决这个问题&#xff0c;研究者们就最近依旧火热的Mamba&#xff0c;提出了Mamba结合CNN的策略。 这种结合可以让Mamba在处理长序列数据时既能够捕捉到序列中的时间依赖关系&#xff0c;又能够利用CNN的局…

android自定义键盘弹窗

样式布局 要在Android中自定义键盘弹窗&#xff0c;先要创建一个新的XML布局文件&#xff0c;用于定义键盘弹窗的外观和布局。例如&#xff0c;创建一个名为key_alert_dialog.xml的文件&#xff0c;并在其中添加所需的按钮和其他UI元素。 <?xml version"1.0" e…

7月9日学习打卡-回文链表,交叉链表

大家好呀&#xff0c;本博客目的在于记录暑假学习打卡&#xff0c;后续会整理成一个专栏&#xff0c;主要打算在暑假学习完数据结构&#xff0c;因此会发一些相关的数据结构实现的博客和一些刷的题&#xff0c;个人学习使用&#xff0c;也希望大家多多支持&#xff0c;有不足之…

海外多语言盲盒APP系统开发

随着盲盒的全球化发展&#xff0c;盲盒已经成为了一个热门行业&#xff0c;不仅深受我国消费者的青睐&#xff0c;更是深受海外消费者的喜爱。目前&#xff0c;盲盒出海已经成为了企业拓展市场的新机会。 在数字化时代&#xff0c;海外盲盒APP为企业提供了一个快速打开海外盲盒…

57、基于概率神经网络(PNN)的分类(matlab)

1、基于概率神经网络(PNN)的分类简介 PNN&#xff08;Probabilistic Neural Network&#xff0c;概率神经网络&#xff09;是一种基于概率论的神经网络模型&#xff0c;主要用于解决分类问题。PNN最早由马科夫斯基和马西金在1993年提出&#xff0c;是一种非常有效的分类算法。…

MyBatis框架学习笔记(一):MyBatis入门

1 MyBatis 介绍 1.1 官方文档 MyBatis 中文手册&#xff1a; &#xff08;1&#xff09;https://mybatis.org/mybatis-3/zh/index.html &#xff08;2&#xff09;https://mybatis.net.cn/ Maven 仓库&#xff1a; https://mvnrepository.com/ 仓库作用&#xff1a;需要…

android Dialog全屏沉浸式状态栏实现

在Android中&#xff0c;创建沉浸式状态栏通常意味着让状态栏背景与应用的主题颜色一致&#xff0c;并且让对话框在状态栏下面显示&#xff0c;而不是浮动。为了实现这一点&#xff0c;你可以使用以下代码片段&#xff1a; 1、实际效果图&#xff1a; 2、代码实现&#xff1a;…

第一次坐火车/高铁,如何坐?全流程讲解

第一次坐动车注意事项 第一次乘动车流程&#xff1a;进站→安检→候车厅→找检票口→过闸机→站台候车→找车厢→上车找座→下车→出站 乘车流程 一、进火车站/高铁站&#xff1a;刷购票证件原件进站 1、自助闸机刷证&#xff1a;身份证 2、人工通道&#xff1a;护照、临时…

Oracle通过procedure调用webservice接口

文章目录 准备工作方法体如下Oracle语句详情重要参数说明Web Service的URL地址构造SOAP请求包体构造SOAP请求包体方法依次如下操作即可&#xff1a; 如果需要把上面的功能变成function或者procedure&#xff0c;请自行搜索相关的方法实现即可。 准备工作 定义测试的webservice…

怎么将图片旋转30度?旋转图片的几种方法推荐

怎么将图片旋转30度&#xff1f;在创作过程中&#xff0c;我们常常需要处理图片的镜像效果&#xff0c;确保其视觉效果和构图都达到最佳状态。镜像效果的合理运用不仅可以解决视觉单调的问题&#xff0c;还能在艺术作品中吸引观者的注意力。此外&#xff0c;镜像可以有效地调整…

MoRA: High-Rank Updating for Parameter-Efficient Fine-Tuning

文章汇总 LoRA的问题 与FFT相比&#xff0c;低秩更新难以记忆新知识。虽然不断提高LoRA的秩可以缓解这一问题&#xff0c;但差距仍然存在。 动机 尽可能地利用相同的可训练参数来获得更高的 Δ W \Delta W ΔW秩。 考虑到预训练权值 W 0 ∈ R d k W_0\in R^{d\times k} W0​…

Mac电脑上有什么好玩的肉鸽游戏推荐 苹果电脑怎么玩以撒的结合

Mac电脑尽管在游戏兼容性上可能不及Windows。但是&#xff0c;对于喜欢在Mac上游玩的玩家来说&#xff0c;依然有不少优秀的游戏可以选择&#xff0c;尤其是那些富有挑战性和策略性的肉鸽游戏。此外&#xff0c;对于经典游戏《以撒的结合》&#xff0c;Mac平台也提供了良好的游…

原创作品—数据可视化大屏

设计数据可视化大屏时&#xff0c;用户体验方面需注重以下几点&#xff1a;首先&#xff0c;确保大屏信息层次分明&#xff0c;主要数据突出显示&#xff0c;次要信息适当弱化&#xff0c;帮助用户快速捕捉关键信息。其次&#xff0c;设计应直观易懂&#xff0c;避免复杂难懂的…