

MII共16根线,数据位宽4(tx rx各4根信号线),TX_CLK RX_CLK均是PHY提供的。
TX_ER(Transmit Error): 发送数据错误提示信号,同步于TX_CLK,高电平有效,表示TX_ER有效期内传输的数据无效。对于10Mbps速率下,TX_ER不起作用;
TX_EN(Transmit Enable): 发送使能信号,只有在TX_EN有效期内传的数据才有效;
TX_CLK:发送参考时钟,100Mbps速率下,时钟频率为25MHz,10Mbps速率下,时钟频率为2.5MHz。注意,TX_CLK时钟的方向是从PHY侧指向MAC侧的,因此此时钟是由PHY提供的。
TXD(Transmit Data)[3:0]:数据发送信号,共4根信号线;
RX_ER(Receive Error): 接收数据错误提示信号,同步于RX_CLK,高电平有效,表示RX_ER有效期内传输的数据无效。对于10Mbps速率下,RX_ER不起作用;
RX_DV(Reveive Data Valid): 接收数据有效信号,作用类型于发送通道的TX_EN;
RXD(Receive Data)[3:0]:数据接收信号,共4根信号线;
RX_CLK:接收数据参考时钟,100Mbps速率下,时钟频率为25MHz,10Mbps速率下,时钟频率为2.5MHz。RX_CLK也是由PHY侧提供的。
CRS:Carrier Sense,载波侦测信号,不需要同步于参考时钟,只要有数据传输,CRS就有效,另外,CRS只有PHY在半双工模式下有效;
COL:Collision Detectd,冲突检测信号,不需要同步于参考时钟,只有PHY在半双工模式下有效。
MII接口一共有16根线。

RMII即 Reduced MII,是MII的简化板,共8根线,数据位宽2。
CLK_REF:是由外部时钟源提供的50MHz参考时钟,与MII接口不同,MII接口中的接收时钟和发送时钟是分开的,而且都是由PHY芯片提供给MAC芯片的。这里需要注意的是,由于数据接收时钟是由外部晶振提供而不是由载波信号提取的,所以在PHY层芯片内的数据接收部分需要设计一个FIFO,用来协调两个不同的时钟,在发送接收的数据时提供缓冲。PHY层芯片的发送部分则不需要FIFO,它直接将接收到的数据发送到MAC就可以了。

同MII,但数据位宽8位,共24根信号线,其中GTX_CLK由MAC侧提供,大多数GMII兼容MII。
phy 如果工作在含有RGMII 接口的模式,按照业内惯例,tx clk delay 由MAC 来完成;rx clk delay 由phy 来完成。所以一般PHY芯片的rx clk delay默认是 2ns, tx clk delay默认是750ps。
来源https://blog.csdn.net/fangye945a/article/details/121109158

RGMII即Reduced GMII,是GMII的简化版本,共14根信号线,位宽为4,该时钟上升沿下降沿均采集数据。

SGMII即Serial GMII,串行GMII,收发各一对差分信号线,时钟频率625MHz,在时钟信号的上升沿和下降沿均采样,参考时钟RX_CLK由PHY提供,是可选的,主要用于MAC侧没有时钟的情况,一般情况下,RX_CLK不使用。收发都可以从数据中恢复出时钟。大多数MAC芯片的SGMII接口都可以配置成SerDes接口(在物理上完全兼容,只需配置寄存器即可),直接外接光模块,而不需要PHY层芯片,此时时钟速率仍旧是625MHz。
xqzhang@greatwall:~$ sudo find /sys/ -name "*stmmac*"
/sys/bus/platform/drivers/stmmaceth
/sys/bus/mdio_bus/devices/stmmac-0:04
/sys/bus/mdio_bus/drivers/Atheros 8035 ethernet/stmmac-0:04
/sys/devices/platform/FTGM0001:00/mdio_bus/stmmac-0
/sys/devices/platform/FTGM0001:00/mdio_bus/stmmac-0/stmmac-0:04
/sys/class/mdio_bus/stmmac-0
/sys/kernel/debug/stmmaceth
/sys/module/dwmac_generic/drivers/platform:stmmaceth
/sys/module/stmmac
/sys/module/stmmac/holders/stmmac_platform
/sys/module/stmmac_platform
由上述信息可知,phy驱动为Atheros 8035 ethernet,该设备为平台设备,设备目录为/sys/devices/platform/FTGM0001:00/
cat /sys/devices/platform/FTGM0001:00/mdio_bus/stmmac-0/stmmac-0:04/phy_interface
rgmii
cat /sys/devices/platform/FTGM0001\:00/mdio_bus/stmmac-0/stmmac-0\:04/phy_id
0x004dd072
devmem2: https://gitee.com/Lematin_SZ/ARM_Linux_Debug_Tools/blob/master/devmem2/devmem2.c
Usage: devmem2 { address } [ type [ data ] ]
address : memory address to act upon
type : access operation type : [b]yte, [h]alfword, [w]ord
data : data to be written
对于FT2000/4核,MAC芯片是包含在CPU核内的,因此根据FT-2000/4+软件编程手册.pdf手册可以拿到MAC芯片的物理地址,用户态直接映射该物理地址可直接进行读写。
此外该物理地址也可以从设备树 ACPI固件中读取。


读mac地址0寄存器
xqzhang@greatwall:~$ ifconfig enaftgm1i0
enaftgm1i0 Link encap:以太网 硬件地址 00:07:3e:9a:79:d6
inet 地址:172.25.83.26 广播:172.25.87.255 掩码:255.255.248.0
xqzhang@greatwall:~$ sudo devmem2 $((0x0002820C000+0x40)) h
[sudo] xqzhang 的密码:
/dev/mem opened.
Memory mapped at address 0x7fabbb3000.
Value at address 0x2820C040 (0x7fabbb3040): 0xD679
xqzhang@greatwall:~$ sudo devmem2 $((0x0002820C000+0x44)) h
/dev/mem opened.
Memory mapped at address 0x7f974b8000.
Value at address 0x2820C044 (0x7f974b8044): 0x700
xqzhang@greatwall:~$ sudo devmem2 $((0x0002820C000+0x46)) h
/dev/mem opened.
Memory mapped at address 0x7fa3e7c000.
Value at address 0x2820C046 (0x7fa3e7c046): 0x9A3E
写0x48寄存器
xqzhang@greatwall:~$ sudo devmem2 $((0x0002820C000+0x48)) h 0x0001
/dev/mem opened.
Memory mapped at address 0x7f9e52e000.
Value at address 0x2820C048 (0x7f9e52e048): 0xFFFF
Written 0x1; readback 0x1
xqzhang@greatwall:~$ sudo devmem2 $((0x0002820C000+0x48)) h
/dev/mem opened.
Memory mapped at address 0x7facc88000.
Value at address 0x2820C048 (0x7facc88048): 0x1
环回寄存器在MAC控制寄存器0第12bit.

读mac控制寄存器
xqzhang@greatwall:~$ sudo devmem2 $((0x0002820C000+0x0)) w
[sudo] xqzhang 的密码:
/dev/mem opened.
Memory mapped at address 0x7f855a9000.
Value at address 0x2820C000 (0x7f855a9000): 0x614C8C
xqzhang@greatwall:~$ 0000 0000 1010 0001 0100 1100 1000 1100
配置bit12为1
xqzhang@greatwall:~$ sudo devmem2 $((0x0002820C000+0x0)) w 0x615c8c
/dev/mem opened.
Memory mapped at address 0x7f9b982000.
Value at address 0x2820C000 (0x7f9b982000): 0x614C8C
Written 0x615C8C; readback 0x615C8C
arp配置不存在的ip MAC地址为本机MAC,注意该mac地址必须与mac芯片的mac一致
sudo arp -s 172.25.82.241 00:07:3e:9a:79:d6
抓包并用ping验证

phytool: https://github.com/wkz/phytool.git 该方式需要网卡驱动提供支持
phytool read IFACE/ADDR/REG
phytool write IFACE/ADDR/REG <0-0xffff>
phytool print IFACE/ADDR[/REG]
Clause 22:
ADDR := <0-0x1f>
REG := <0-0x1f>
Clause 45 (not supported by all MDIO drivers):
ADDR := PORT:DEV
PORT := <0-0x1f>
DEV := <0-0x1f>
REG := <0-0xffff>
其中ADDR的获取方式可参考获取GMAC网卡信息章节,或者使用如下命令获取ethtool enaftgm1i0 | grep PHYAD
xqzhang@greatwall:/sys/devices/platform/FTGM0001:00$ ethtool enaftgm1i0 | grep PHYAD
PHYAD: 4
xqzhang@greatwall:~/phytool$ sudo ./phytool enaftgm1i0/00:04/
ieee-phy: id:0x004dd072
ieee-phy: reg:BMCR(0x00) val:0x1000
flags: -reset -loopback +aneg-enable -power-down -isolate -aneg-restart -collision-test
speed: 10-half
ieee-phy: reg:BMSR(0x01) val:0x796d
capabilities: -100-b4 +100-f +100-h +10-f +10-h -100-t2-f -100-t2-h
flags: +ext-status +aneg-complete -remote-fault +aneg-capable +link -jabber +ext-register
xqzhang@greatwall:~/phytool$ sudo ./phytool enaftgm1i0/0x4/
ieee-phy: id:0x004dd072
ieee-phy: reg:BMCR(0x00) val:0x1000
flags: -reset -loopback +aneg-enable -power-down -isolate -aneg-restart -collision-test
speed: 10-half
ieee-phy: reg:BMSR(0x01) val:0x796d
capabilities: -100-b4 +100-f +100-h +10-f +10-h -100-t2-f -100-t2-h
flags: +ext-status +aneg-complete -remote-fault +aneg-capable +link -jabber +ext-register

xqzhang@greatwall:~/phytool$ sudo ./phytool read enaftgm1i0/0x04/0x02
ieee-phy: reg:0x02 val:0x004d
xqzhang@greatwall:~/phytool$ sudo ./phytool read enaftgm1i0/0x4/0x03
ieee-phy: reg:0x03 val:0xd072
root@greatwall:/home/xqzhang/phytool# sudo ./phytool write enaftgm1i0/0x04/0x04 0x1de1
root@greatwall:/home/xqzhang/phytool# sudo ./phytool read enaftgm1i0/0x04/0x04
ieee-phy: reg:0x04 val:0x1de1


首先需要bit12=0关闭自协商,然后根据bit6 bit13强制配置速率。
千兆配置sudo ./phytool write enaftgm1i0/0x4/0x0 0x0140
百兆配置sudo ./phytool write enaftgm1i0/0x4/0x0 0x2100
十兆配置sudo ./phytool write enaftgm1i0/0x4/0x0 0x0100
实际测试 强制千兆无法up,百兆千兆需要等很久才能ping通。
环回寄存器在phy控制寄存器0第14bit.

10M 速率环回
sudo ./phytool write enaftgm1i0/0x4/0x0 0x4100
经测试在本节环境下,只有10M 环回才能正常UP
查看Kconfig文件,发现该驱动支持Platform和多种SOC以及PCI等方式。
kylin@kylin-GW-001M1A-FTF:~/Workspace/xqzhang/ShangHai-GFSY-klinux/drivers/net/ethernet/stmicro/stmmac$ grep -nr support Kconfig
21: tristate "STMMAC Platform bus support"
26: This selects the platform specific bus support for the stmmac driver.
45: tristate "QCA IPQ806x DWMAC support"
52: This selects the IPQ806x SoC glue layer support for the stmmac
58: tristate "NXP LPC18xx/43xx DWMAC support"
66: tristate "Amlogic Meson dwmac support"
72: This selects the Amlogic Meson SoC glue layer support for
77: tristate "Rockchip dwmac support"
84: This selects the Rockchip RK3288 SoC glue layer support for
88: tristate "SOCFPGA dwmac support"
95: This selects the Altera SOCFPGA SoC glue layer support
100: tristate "STi GMAC support"
107: This selects STi SoC glue layer support for the stmmac
112: tristate "Allwinner GMAC support"
118: This selects Allwinner SoC glue layer support for the
124: tristate "STMMAC PCI bus support"
130: This PCI support is tested on XLINX XC2V3000 FF1152AMT0221
lsmod查看当前设备所加载的驱动模块
xqzhang@greatwall:~$ lsmod | grep stmmac
stmmac_platform 9705 1 dwmac_generic
stmmac 72158 3 dwmac_generic,stmmac_platform
其中dwmac_generic属于驱动匹配入口,支持设备树、ACPI、Platform等匹配方式。
stmmac_platform则是提供设备树、ACPI、Platform等资源信息的获取方式,并提供了PM电源管理的ops。
stmmac为网卡驱动本体,负责probe配置、网卡open等。
在GMAC驱动probe过程中会先读取0x1058硬件功能寄存器,并将其复制给dma_cap,若mac芯片不支持PCS(TBI / SGMII / RTBI PHY 接口))则会遍历phy设备找到对应的phy id然后注册mdio bus.
当CONFIG_DEBUG_FS宏打开时,可通过cat /sys/kernel/debug/stmmaceth/eth0/dma_cap查看硬件功能寄存器中的内容。
在GMAC的open函数中,如果不支持PCS(TBI / SGMII / RTBI PHY 接口)则先进行phy芯片的初始化工作,在phy初始化的过程中(stmmac_init_phy)如果设备树有定义phy_node(phy_node是通过device tree中的phy_handle构造的)则进行of_phy_connect连接,否则进行phy_connect连接。of_phy_connect和phy_connect差异在于前者已经找到的phy_device,后者需要先通过mdio bus找到phy_device。连接phy的实现主要在phy_connect_direct函数中,该函数共做了以下几步:
无论是否支持PCS,open函数中都要做的是alloc tx rx desc环形缓冲区、配置MAC芯片寄存器stmmac_hw_setup、创建1个stmmac_tx_timer定时器(用于定时清理环形缓冲区)、phy_start启动phy设备、request_irq注册相关中断。
stmmac_hw_setup函数中stmmac_init_dma_engine初始化dma引擎、set_umac_addr配置MAC addr、bus_setup总线配置(可选)、core_init MAC core的初始化、rx_ipc RX IPC Checksum offload启用、stmmac_set_mac启用MAC收发队列、stmmac_dma_operation_mode设置DMA模式、stmmac_mmc_setup设置mac管理计数器、stmmac_init_ptp初始化PTP硬件时钟驱动、start_tx start_rx 启用dma收发队列、rx_watchdog、ctrl_ane。
根据上述分析,在GMAC probe流程中主要对硬件功能寄存器进行读取,驱动根据具体的功能支持情况进行配置。GMAC open流程中phy_init_hw函数中包含了大量phy寄存器的配置,stmmac_hw_setup函数中包含了大量mac寄存器的配置。
日志级别信息
enum {
NETIF_MSG_DRV = 0x0001,
NETIF_MSG_PROBE = 0x0002,
NETIF_MSG_LINK = 0x0004,
NETIF_MSG_TIMER = 0x0008,
NETIF_MSG_IFDOWN = 0x0010,
NETIF_MSG_IFUP = 0x0020,
NETIF_MSG_RX_ERR = 0x0040,
NETIF_MSG_TX_ERR = 0x0080,
NETIF_MSG_TX_QUEUED = 0x0100,
NETIF_MSG_INTR = 0x0200,
NETIF_MSG_TX_DONE = 0x0400,
NETIF_MSG_RX_STATUS = 0x0800,
NETIF_MSG_PKTDATA = 0x1000,
NETIF_MSG_HW = 0x2000,
NETIF_MSG_WOL = 0x4000,
};
默认的消息级别: 0x0063
static const u32 default_msg_level = (NETIF_MSG_DRV | NETIF_MSG_PROBE |
NETIF_MSG_LINK | NETIF_MSG_IFUP |
NETIF_MSG_IFDOWN | NETIF_MSG_TIMER);
打印rx ring desc
sudo ethtool -s enaftgm1i0 msglvl 0x0800
关闭日志打印
sudo ethtool -s enaftgm1i0 msglvl 0x0000
恢复默认的日志级别
sudo ethtool -s enaftgm1i0 msglvl 0x0063
该日志信息可通过dmesg -w查看。
通过cat /sys/kernel/debug/stmmaceth/eth0/descriptors_status


我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
我正在尝试按Rails相关模型中的字段进行排序。我研究的所有解决方案都没有解决如果相关模型被另一个参数过滤?元素模型classItem相关模型:classPriority我正在使用where子句检索项目:@items=Item.where('company_id=?andapproved=?',@company.id,true).all我需要按相关表格中的“位置”列进行排序。问题在于,在优先级模型中,一个项目可能会被多家公司列出。因此,这些职位取决于他们拥有的company_id。当我显示项目时,它是针对一个公司的,按公司内的职位排序。完成此任务的正确方法是什么?感谢您的帮助。PS-我
假设您有一个可执行文件foo.rb,其库bar.rb的布局如下:/bin/foo.rb/lib/bar.rb在foo.rb的header中放置以下要求以在bar.rb中引入功能:requireFile.dirname(__FILE__)+"../lib/bar.rb"只要对foo.rb的所有调用都是直接的,这就可以正常工作。如果你把$HOME/project和符号链接(symboliclink)foo.rb放入$HOME/usr/bin,然后__FILE__解析为$HOME/usr/bin/foo.rb,因此无法找到bar.rb关于foo.rb的目录名.我意识到像rubygems这
目录0专栏介绍1平面2R机器人概述2运动学建模2.1正运动学模型2.2逆运动学模型2.3机器人运动学仿真3动力学建模3.1计算动能3.2势能计算与动力学方程3.3动力学仿真0专栏介绍?附C++/Python/Matlab全套代码?课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。?详情:图解自动驾驶中的运动规划(MotionPlanning),附几十种规划算法1平面2R机器人概述如图1所示为本文的研究本体——平面2R机器人。对参数进行如下定义:机器人广义坐标
术语中文解释Ability原子化服务帮助用户完成任务的原子化服务,和用户的意图进行关联。Fulfillment服务履行通过图标,卡片,语音等形式呈现用户意图。开发者通过接口的方式,处理用户意图,返回内容。Intent意图用于表达用户想要达成的目标或完成的任务。HUAWEIAssistant智能助手“无微不智”的个人助手,通过不断的学习用户的使用习惯,不断的为用户提供贴心的精准的便捷的个性化服务。AISearch全局搜索用户可快速搜索关键词,与之匹配的原子化服务则会出现在搜索结果中。SmartService智慧服务用户订阅原子化服务,在到达特定触发条件(时间、地点、事件)后,卡片推送至用户智能助
网站的日志分析,是seo优化不可忽视的一门功课,但网站越大,每天产生的日志就越大,大站一天都可以产生几个G的网站日志,如果光靠肉眼去分析,那可能看到猴年马月都看不完,因此借助网站日志分析工具去分析网站日志,那将会使网站日志分析工作变得更简单。下面推荐两款网站日志分析软件。第一款:逆火网站日志分析器逆火网站日志分析器是一款功能全面的网站服务器日志分析软件。通过分析网站的日志文件,不仅能够精准的知道网站的访问量、网站的访问来源,网站的广告点击,访客的地区统计,搜索引擎关键字查询等,还能够一次性分析多个网站的日志文件,让你轻松管理网站。逆火网站日志分析器下载地址:https://pan.baidu.
一、机器人介绍 此处是基于MATLABRVC工具箱,对ABB-IRB-1200型号的微型机械臂进行正逆向运动学分析,并利Simulink工具实现对机械臂进行具有动力学参数的末端轨迹规划仿真,最后根据机械模型设计Simulink-Adams联合仿真。 图1.ABBIRB 1200尺寸参数示意图ABBIRB 1200提供的两种型号广泛适用于各作业,且两者间零部件通用,两种型号的工作范围分别为700 mm 和 900 mm,大有效负载分别为 7 kg 和5 kg。 IRB 1200 能够在狭小空间内能发挥其工作范围与性能优势,具有全新的设计、小型化的体积、高效的性能、易于集成、便捷的接
目录一.大致如下常见问题:(1)找不到程序所依赖的Qt库version`Qt_5'notfound(requiredby(2)CouldnotLoadtheQtplatformplugin"xcb"in""eventhoughitwasfound(3)打包到在不同的linux系统下,或者打包到高版本的相同系统下,运行程序时,直接提示段错误即segmentationfault,或者Illegalinstruction(coredumped)非法指令(4)ldd应用程序或者库,查看运行所依赖的库时,直接报段错误二.问题逐个分析,得出解决方法:(1)找不到程序所依赖的Qt库version`Qt_5'
目录H2数据库入门以及实际开发时的使用1.H2数据库的初识1.1H2数据库介绍1.2为什么要使用嵌入式数据库?1.3嵌入式数据库对比1.3.1性能对比1.4技术选型思考2.H2数据库实战2.1H2数据库下载搭建以及部署2.1.1H2数据库的下载2.1.2数据库启动2.1.2.1windows系统可以在bin目录下执行h2.bat2.1.2.2同理可以通过cmd直接使用命令进行启动:2.1.2.3启动后控制台页面:2.1.3spring整合H2数据库2.1.3.1引入依赖文件2.1.4数据库通过file模式实际保存数据的位置2.2H2数据库操作2.2.1Mysql兼容模式2.2.2Mysql模式