国产之路:复旦微FMQL调试笔记1:PS网口

简介: FPGA,全程现场可编程门阵列,是指一切通过软件手段更改、配置器件内部连接结构和逻辑单元,完成既定设计功能的数字集成电路。换个简单通俗的介绍方式,就好比一个全能的运动员,FPGA就是这么神奇的可以通过设定而实现各种复杂的功能电路。

引言

 FPGA,全程现场可编程门阵列,是指一切通过软件手段更改、配置器件内部连接结构和逻辑单元,完成既定设计功能的数字集成电路。换个简单通俗的介绍方式,就好比一个全能的运动员,FPGA就是这么神奇的可以通过设定而实现各种复杂的功能电路。FPGA的核心优点:可编程灵活性高、开发周期短、并行计算可编程灵活性高。同时FPGA也有自身的很多需要解决的问题,FPGA限制因素:成本、功耗和编程设计。现在已经在三个重要领域发挥着重量级作用:(1)通信设备的高速接口电路设计一般如果AD采样率高,数据速率高,这时就需要FPGA对数据进行处理,比如对数据进行抽取滤波,降低数据速率,使信号容易处理,传输,存储;(2)数字信号处理方向/数学计算方向,包括图像处理,雷达信号处理,医学信号处理等,优势是实时性好,用面积换速度,比CPU快的多;(3)SOPC,即利用FPGA这个平台搭建的一个嵌入式系统的底层硬件环境,然后设计者在上面进行嵌入式软件开发。

 自1984年Xilinx刚刚创造出FPGA时,它还是简单的胶合逻辑芯片,而如今在信号处理和控制应用中,它已经取代了自定制专用集成电路(ASIC)和处理器。短短不到40年的历史长河中,超过上百家行业巨头杀入这个市场,不过最后大部分都铩羽而归。这些公司包括了Intel、Philips、Agere Systems、AMD以及摩托罗拉等国际知名的芯片设计厂商。这是因为,Xilinx和Altera在这个领域深耕几十年,两家持续不断地军备竞赛,占据了90%市场

 已经更新了很久的zynq系列就是xilinx的产品,但是对于时代和特殊应用场景的选择下,我们需要介绍仍在进步中的国产芯片:如对标zynq,复旦微电子的FMQL可编程融合芯片(全可编程PSOC芯片)系列。在实际的调试中,不难发现,除去明面上容易查到的比如PS端双核的A9替换为了四核A7等硬件参数,一些不容易查到的比如xilinx成熟的底层硬件加速等,还是有不少差异的。

 调试了有段时间,这里记录一些FMQL的调试笔记,可以与zynq相互对比,本篇首先更新 Ps 的千兆网口gmac 有哪些需要注意的地方

单phy 节点明确指定phy 地址的 设备树写法:

&gmac0 {  
                  status = "okay";  
                  snps,reset-gpio = <&portb 17 GPIO_ACTIVE_LOW>;  
                  snps,reset-active-low;  
                  snps,reset-delays-us = <0 10000 100000>;  
           phy-handle = <&phy0>;  
           mdio@0 {  
                compatible= "snps,dwmac-mdio";  
                #address-cells = <1>;  
                #size-cells = <0>;  
                  phy0: eth-phy@7 {  
                     reg = <7>;  
                  };  
             };  
    };  

单phy 节点不明确指定 phy 地址写法

&gmac0 {  
                  status = "okay";  
                  snps,reset-gpio = <&portb 17 GPIO_ACTIVE_LOW>;  
                  snps,reset-active-low;  
                  snps,reset-delays-us = <0 10000 100000>;  
    };  

  phy 核心层代码会扫描所有的 phy 地址(0-31),特别要注意的是 20210816bsp 里 uboot 需要则一定需要加上 mdio 节点了,主要是修改了共享 mdio 的支持(进口没有做相应的支持)。

一路mdio 控制两个phy,设备树写法

&gmac0 {  
           status = "okay";  
           snps,reset-gpio = <&portb 17 0>;  
           snps,reset-active-low;  
           snps,reset-delays-us =<0 10000 100000>;  
           phy-handle = <&phy0>;  
           mdio@0 {  
                 compatible= "snps,dwmac-mdio";  
                 #address-cells = <1>;  
                 #size-cells = <0>;  
                   phy0: eth-phy@7 {  
                       reg = <7>;//按实际修改  
                   };  
                   phy1: eth-phy@4 {  
                       reg = <4>; //按实际修改  
                   };  
             };  
          };  
 &gmac1 {  
           phy-mode="rgmii-id";  //gmac1 默认的 phy-mode 是 rgmii,和 gmac0 不一样
           status="okay";  
           phy-handle=<&phy1>;  
     };  

 gmac1 的默认 phy-mode 和 gmac0 不一样, 不管怎么样,能 link 不能通信时,每个gmac 都是要调整一下 tx 和 rx delay 的。

 PS:一路mdio 控制两个phy,phy 地址不能有0,因为0 地址是广播地址,对 0 地址处理不同 phy 表现不一样,,这样会引起混乱。 下面是简单讨论一下:

https://www.xilinx.com/support/answers/59554.html

0ada55b89342424eaa4566127d0b6a17.png

 有的 phy 厂家可以关掉 phy 对0地址的响应,另外 demo 的 88E1116R 应该就不响应0地址,这个还要看 phy 厂家的,不管怎么样,对于共享 mdio 总线的两个 phy,不要用0地址了,否则大概率会碰到问题,单 phy 则没有这个限制,因为没有潜在的冲突。特备要注意的是, mdio 勾在哪个 mac 下面,则要写到对应的 gmac 设备节点下面。

phy-mode 属性说明

 rgmii-txid rgmii -rxid rgmii-id rgmii 可 以 参 考 内 核 文 档

Documentations/devicetree/bindings/net/ethernet.txt。
   “rgmii” (RX and TX delays are added by the MAC when required) 。
   “rgmii-id” (RGMII with internal RX and TX delays provided by the PHY, the MAC should not add the RX or TX delays in this case)。

 指PHY 的内部有延时寄存器设置,mac 就不用设置了。

 两个变体:

“rgmii-rxid” (RGMII with internal RX delay provided by the PHY, the MAC should not add an RX delay in this case)。
   “rgmii-txid” (RGMII with internal TX delay provided by the PHY, the MAC should not add an TX delay in this case) 。

 千兆有问题的时候,特别是怀疑 tx 和 rx delay 有问题时,可以尝试用百兆或十兆模式尝试一下。

 另外和 u-boot 一样,可以在设备树 gmac 里限定 max-speed 为 100M:

 max-speed=<100>;

  方便某些调试场合可能会用到。

 Linux 和 uboot 测试设备树相同,如下图

&gmac0{
status = "okay";
snps,reset-gpio = <&portb 17 GPIO ACTIVE LOW>; snps,reset-active-low;
snps,reset-delays-us =<0 10000 100000>;
max-speed=<100>;; /*强制100M */};
Hx--1024
ethtool eth0
Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full 
100baseT/Half 100baseT/Full1000baseT/Half 1000baseT/Full
Supported pause frame use: Symmetric Receive-only Supports auto-negotiation: Yes
Advertised link modes:  10baseT/Half 10baseT/Full 
100baseT/Half 100baseT/Full
Advertised pause frame use: No Advertised auto-neqotiation: Yes
Link partner advertised link modes: 10baseT/Half 10baseT/Full 
100baseT/Half 100baseT/Full
Link partner advertised pause frame use: Svmmetric Receive-onlv
ertised auto-negotiation: Yes
Speed:100Mb/s Duplex:Full Port:MII PHYAD:7
Transceiver: internal Auto-negotiation: on Supports Wake-on: d Wake-on:d
Current message level: 0x0000003f (63)
drv probe link timer ifdown ifup
Link detected: yes  Hx--1024

 可以用 ethtool eth0 查看网口速度,另外插拔网线或者 down 和 up 一下 eth0。


相关文章
|
7月前
|
网络协议 开发工具 Perl
【ZYNQ】裸机 PS + PL 双网口实现之 SDK 程序设计
【ZYNQ】裸机 PS + PL 双网口实现之 SDK 程序设计
342 0
|
7月前
|
开发工具 芯片 Perl
【ZYNQ】裸机 PS + PL 双网口实现之 ZYNQ 配置
【ZYNQ】裸机 PS + PL 双网口实现之 ZYNQ 配置
1012 0
|
7月前
|
网络协议 测试技术 开发工具
【ZYNQ】裸机 PS + PL 双网口实现之 LWIP 库文件修改
【ZYNQ】裸机 PS + PL 双网口实现之 LWIP 库文件修改
730 0
|
7月前
|
Linux
百度搜索:蓝易云【Linux系统ps命令:查看正在运行的进程】
通过这些简洁的ps命令用法,你可以方便地查看Linux系统中正在运行的进程信息。
90 1
|
7月前
|
安全 Linux 应用服务中间件
linux(三十一)系统信息命令ps查看系统进程
linux(三十一)系统信息命令ps查看系统进程
234 1
|
7月前
|
存储 监控 Linux
【Shell 命令集合 系统管理 】⭐⭐⭐Linux 查看当前正在运行的进程信息 ps命令 使用指南
【Shell 命令集合 系统管理 】⭐⭐⭐Linux 查看当前正在运行的进程信息 ps命令 使用指南
136 0
|
Linux Apache
百度搜索:蓝易云 ,Linux ps命令详解,Linux查看进程。
通过使用ps命令,您可以查看当前运行的进程,并获取有关进程的详细信息。根据您的需求,可以使用不同的选项来满足特定的进程查看和筛选要求。
1180 0
|
6月前
|
监控 Linux 应用服务中间件
探索Linux中的`ps`命令:进程监控与分析的利器
探索Linux中的`ps`命令:进程监控与分析的利器
137 13
|
3月前
|
调度
crash命令 —— ps
crash命令 —— ps
|
4月前
|
存储 Docker 容器
在Docker中,容器退出后,通过docker ps命令查看不到,数据会丢失么?
在Docker中,容器退出后,通过docker ps命令查看不到,数据会丢失么?