This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
你好
AM3358定制板与 BeagleBone Black 非常相似、但使用 DP83867ISRGZR 作为以太网 Phy。
使用最新的 SDK (dr-download.ti.com/.../ti-processor-sdk-linux-am335x-evm-09.01.00.001-Linux-x86-Install.bin)进行 u-boot 和内核构建。 可以通过电路板上的 SD 卡轻松启动。
以下是显示以太网启动的启动日志的一部分:
[22.068642] cpsw-switch 4a100000.switch:启动 ndev. 模式:dual_mac
[22.1639393939] TI DP83867 4a101000.MDIO:00:连接的 PHY 驱动程序(MII_BUS:phy_addr=4a101000.MDIO:00、IRQ=POLL)
[确定]已创建切片切片/system/systemd-fsck.
在/dev/mmcblk0p1...上启动文件系统检查
在/dev/mmcblk1p1...上启动文件系统检查
在/dev/mmcblk1p2...上启动文件系统检查
正在启动网络名称解析...
[确定]已完成/dev/mmcblk1p1.上的文件系统检查
安装/run/media/mmcblk1p1...
[确定]已完成/dev/mmcblk1p2.上的文件系统检查
[确定]已安装/run/media/mmcblk1p1.
安装/run/media/mmcblk1p2...
[确定]已完成/dev/mmcblk0p1.上的文件系统检查
[25.257829] EXT4-FS (mmcblk1p2 ):已安装的文件系统,带有序数据模式。 配额模式:已禁用。
安装/run/media/boot-mmcblk0p1...
[25.369077] cpsw 开关4a100000.switch eth0:链路接通- 1Gbps/全-流量控制关闭
[25.395700] IPv6:ADDRCONF (NETDEV_CHANGE):eth0:链路就绪
[确定]已安装/run/media/mmcblk1p2.
[确定]已安装/run/media/boot-mmcblk0p1.
[确定]已启动网络名称解析。
[ OK ]已到达目标网络。
[ OK ]已到达目标主机和网络名称查找。
正在启动 Avahi mDNS/DNS-SD 堆栈...
开始启用和配置 wl18xx 蓝牙堆栈...
正在启动容器容器运行时...
[ OK ]已启动 Netperf 基准服务器。
[确定]已启动 NFSv2/3锁定的 NFS 状态监视器。
正在启动简单网络…协议(SNMP)守护程序...
正在启动许可用户会话...
板载以太网端口连接到交换机、笔记本电脑连接到同一交换机。 IP 地址通过 ifconfig 设置为 192.168.0.25、PC 地址为192.168.0.200
ethtool 用于检查显示链路正常的状态。
Arago 2023.04 AM335x-EVM -
AM335x-EVM 登录名:root
根@AM335x-EVM:~# ifconfig -a
eth0:flags=4163 MTU 1500
inet6 fe80::167f:fff:fec3:5fc7 prefixlen 64 scopeid 0x20.
乙醚14:7f:0f:C3:5F:C7 txqueuelen 1000 (以太网)
RX 数据包0字节0 (0.0B)
RX 错误0丢弃0溢出0帧0
TX 数据包24字节3828 (3.7KiB)
TX 错误0丢弃0溢出0载波0冲突0
Lo: flags=73. MTU 65536
INET 127.0.0.1网络掩码255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10.
loop txqueuelen 1000 (本地环回)
RX 数据包90字节7574 (7.3KiB)
RX 错误0丢弃0溢出0帧0
TX 数据包90字节7574 (7.3KiB)
TX 错误0丢弃0溢出0载波0冲突0
sit0:标志=128 MTU 1480
Unspec 00-00-00-00-02-00-BC-94-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
RX 数据包0字节0 (0.0B)
RX 错误0丢弃0溢出0帧0
TX 数据包0字节0 (0.0 B)
TX 错误0丢弃0溢出0载波0冲突0
root@AM335x-EVM:~# ifconfig eth0 192.168.0.25
根@AM335x-EVM:~# ifconfig -a
eth0:flags=4163 MTU 1500
INET 192.168.0.25网络掩码255.255.255.0广播192.168.0.255
inet6 fe80::167f:fff:fec3:5fc7 prefixlen 64 scopeid 0x20.
乙醚14:7f:0f:C3:5F:C7 txqueuelen 1000 (以太网)
RX 数据包0字节0 (0.0B)
RX 错误0丢弃0溢出0帧0
TX 数据包32字节5972 (5.8KiB)
TX 错误0丢弃0溢出0载波0冲突0
Lo: flags=73. MTU 65536
INET 127.0.0.1网络掩码255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10.
loop txqueuelen 1000 (本地环回)
RX 数据包90字节7574 (7.3KiB)
RX 错误0丢弃0溢出0帧0
TX 数据包90字节7574 (7.3KiB)
TX 错误0丢弃0溢出0载波0冲突0
sit0:标志=128 MTU 1480
Unspec 00-00-00-00-02-00-BC-94-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
RX 数据包0字节0 (0.0B)
RX 错误0丢弃0溢出0帧0
TX 数据包0字节0 (0.0 B)
TX 错误0丢弃0溢出0载波0冲突0
root@am335x-evm:~# ethtool eth0
eth0的设置:
支持的端口:[ TP MII ]
支持的链路模式:10baseT/half 10baseT/full
100baseT/half 100baseT/Full
1000baseT/half 1000baseT/full
支持的暂停帧使用:仅对称接收
支持自动协商:可以
支持的 FEC 模式:未报告
广播链路模式:10baseT/half 10baseT/full
100baseT/half 100baseT/Full
1000baseT/half 1000baseT/full
广播的暂停帧使用:否
广播的自动协商:是
通告的 FEC 模式:未报告
链路伙伴通告的链路模式:10BaseT /半10 baseT/full
100baseT/half 100baseT/Full
连接方广播的暂停帧使用:对称
连接方广播了自动协商:是
连接伙伴通告的 FEC 模式:未报告
速度:100MB/s
双工:全双工
自动协商:开启
主从配置(MASTER-SLAVE):首选从配置
主从状态:从
端口:双绞线
PHYAD:0
收发器:外部
MDI-X:未知
支持唤醒:ubgs
唤醒:d.
SecureOn 密码:00:00:00:00:00
当前消息级别:0x00000000 (0)
检测到链路:是
然而、当从 PC 对电路板或从电路板对 PC 执行 ping 操作时、两者都显示未通过。 我是否需要检查任何其他配置?
非常感谢您的任何评论或回复。
您好!
从我看到的内容来看、电路板上的接收路径存在问题。
我建议直接在您的板和 PC 之间的以太网电缆、不使用交换机。 通过这种方法、可以使用电路板和 PC 上的以太网 MAC 硬件统计信息来显示是否进行了基本的数据包发送和接收。
您还可以将电路板连接到 BBB 并执行相同的测试。
-甚至无需设置 IP 地址。 在链路初始化期间、当它搜索 IPv4地址时、将发送足够的数据包。
-板启动后使用 ethtool -S eth0在两侧。 查找 RX 正常帧以及两侧是否存在 RX CRC 错误。 如果没有 RX 正常帧、可能是引脚多路复用问题。
此致、
Schuyler
感谢您的快速响应。
我尝试了几件事,你建议。 我将 BBB 连接到同一交换机、并且能够在 PC 和 BBB 之间执行 ping 操作、没有任何错误。 但新电路板未执行 ping 通。 我没有将该电路板直接连接到 BBB、因为我认为我可能需要交叉电缆。
另外、我使用 ethtool -S eth0检查了统计信息。 电路板侧没有 Rx CRC 错误。 似乎 Tx 未发送出去、请参阅以下日志:
root@am335x-evm:~# ethtool -S eth0
NIC 统计信息:
良好的 Rx 帧:181.
广播 Rx 帧:80
多播 Rx 帧:101.
暂停 Rx 帧:0
Rx CRC 错误:0
Rx 对齐/代码错误:0
超大 Rx 框架:0
Rx Jabbers:0
欠大小(短) Rx 帧:0
Rx 片段:0
Rx 八位字节:29198
良好 Tx 帧:0
广播 Tx 帧:0
多播 Tx 帧:0
暂停 Tx 帧:0
延迟的 Tx 帧:0
冲突:0
单一冲突 Tx 帧:0
多个冲突 Tx 帧:0
过度碰撞:0
延迟冲突:0
TX 欠运转:0
载波侦听错误:0
TX 八位位组:0
Rx + Tx 64八位位组帧:35
Rx + Tx 65-127八位位组帧:70
Rx + Tx 128-255八位位组帧:42
Rx + Tx 256-511八位位组帧:34
Rx + Tx 512-1023八位位组帧:0
Rx + Tx 1024-up 八位位组帧:0
净八位数:29198
Rx 帧起始超限:0
Rx 帧中间上溢:0
Rx DMA 超限:0
Rx DMA 通道0:head_enqueue:1
Rx DMA 通道0:tail_enqueue:249
Rx DMA 通道0:PAD_ENQUEY:0
Rx DMA 通道0:误排队:0
Rx DMA 通道0:DESC_ALLOC_FAIL:0
Rx DMA 通道0:PAD_ALLOC_FAIL:0
Rx DMA 通道0:runt_receive_buf:0
Rx DMA 通道0:runt_transmit_bu:0
Rx DMA 通道0:empty_dequeue:0
Rx DMA 通道0:busy_dequeue:122
Rx DMA 通道0:good_dequeue:122
Rx DMA 通道0:需要:0
Rx DMA 通道0:teardown_dequeue:0
TX DMA 通道0:head_enqueue:36
TX DMA 通道0:tail_enqueue:127
TX DMA 通道0:PAD_ENQUEY:0
TX DMA 通道0:排队错误:0
TX DMA 通道0:DESC_ALLOC_FAIL:0
TX DMA 通道0:PAD_ALLOC_FAIL:0
TX DMA 通道0:runt_receive_buf:0
TX DMA 通道0:runt_transmit_bu:0
TX DMA 通道0:empty_dequeue:34
TX DMA 通道0:Busy_Dequeue:0
TX DMA 通道0:good_dequeue:35
TX DMA 通道0:需要:1
TX DMA 通道0:teardown_dequeue:127
根@AM335x-EVM:~#
我无法 在 BBB 上运行 ethtool -S eth0。 我 必须在上面安装 ethtool。
我还 Ping 了主板上的回送地址(127.0.0.1)、其通过后没有错误。
我想这可能是您所指出的引脚多路复用问题、因为我使用了与 BBB 相同的引脚多路复用器。 我已检查 RGMII 引脚与原理图上 BBB 上的 RMII 端口几乎相同。 如果您能在与 DP83867 PHY 相关的器件树文件中提供更新此内容的建议、我将不胜感激。
谢谢!
您好!
您将不需要交叉电缆。 大多数 PHY 实现了自动 MDIX、这将解决此类布线问题。 您应该能够使用 apt get 将 ethtool 安装到 BBB 上。
正如您所观察到的、存在正在发生的 Rx 流量、但没有 TX 流量。 引脚多路复用可能是一种原因、但可能的原因也更多。
您能否为您的定制电路板附加 DTS 文件的那一部分? 我建议使用 TI SysConfig 工具验证引脚多路复用器、您将能够通过 DTS 文件查看为此接口生成的引脚多路复用器。
此致、
Schuyler
非常感谢 Schuyler 调查了这个问题。
我尚未更新 DTS 文件。 我将为 BBB 使用默认 dts 文件、因为电路板非常相似。 我仅更新了 board.c 文件、避免检测电路板 ID 并进行 PMIC 控制。 我发现 DTS 文件是 ... sdk-linux.../arch/arm/dts 文件夹中的 am335x-bonblack.dts、am33x.dtsi、am335x-bone-common.dtsi、am335x-boneback-common.dtsi 和 am335x-boneback-hdm.dtsi。 AM335x-bone-common.dtsi 中的以下代码部分仅与这些引脚相关:
cpsw_default:cpsw_default{
PINCTL-SINGLE、PINS =<
/*从器件1 */
AM33XX_PADCONF (AM335x_PIN_MII1_RX_ER、PIN_INPUT_PULLUP、MUX_MODE0)
AM33XX_PADCONF (AM335x_PIN_MII1_TX_EN、PIN_OUTPUT_PULLDOWN、MUX_MODE0)
AM33XX_PADCONF (AM335x_PIN_MII1_RX_DV、PIN_INPUT_PULLUP、MUX_MODE0)
AM33XX_PADCONF (AM335x_PIN_MII1_TXD3、PIN_OUTPUT_PULLDOWN、MUX_MODE0)
AM33XX_PADCONF (AM335x_PIN_MII1_TXD2、PIN_OUTPUT_PULLDOWN、MUX_MODE0)
AM33XX_PADCONF (AM335x_PIN_MII1_TXD1、PIN_OUTPUT_PULLDOWN、MUX_MODE0)
AM33XX_PADCONF (AM335x_PIN_MII1_TXD0、PIN_OUTPUT_PULLDOWN、MUX_MODE0)
AM33XX_PADCONF (AM335x_PIN_MII1_TX_CLK、PIN_INPUT_PULLUP、MUX_MODE0)
AM33XX_PADCONF (AM335x_PIN_MII1_RX_CLK、PIN_INPUT_PULLUP、MUX_MODE0)
AM33XX_PADCONF (AM335x_PIN_MII1_RXD3、PIN_INPUT_PULLUP、MUX_MODE0)
AM33XX_PADCONF (AM335x_PIN_MII1_RXD2、PIN_INPUT_PULLUP、MUX_MODE0)
AM33XX_PADCONF (AM335x_PIN_MII1_RXD1、PIN_INPUT_PULLUP、MUX_MODE0)
AM33XX_PADCONF (AM335x_PIN_MII1_RXD0、PIN_INPUT_PULLUP、MUX_MODE0)
>;
};
cpsw_sleep:cpsw_sleep{
PINCTL-SINGLE、PINS =<
/*从器件1复位值*/
AM33XX_PADCONF (AM335x_PIN_MII1_RX_ER、PIN_INPUT_PULLDOWN、MUX_MODE7)
AM33XX_PADCONF (AM335x_PIN_MII1_TX_EN、PIN_INPUT_PULLDOWN、MUX_MODE7)
AM33XX_PADCONF (AM335x_PIN_MII1_RX_DV、PIN_INPUT_PULLDOWN、MUX_MODE7)
AM33XX_PADCONF (AM335x_PIN_MII1_TXD3、PIN_INPUT_PULLDOWN、MUX_MODE7)
AM33XX_PADCONF (AM335x_PIN_MII1_TXD2、PIN_INPUT_PULLDOWN、MUX_MODE7)
AM33XX_PADCONF (AM335x_PIN_MII1_TXD1、PIN_INPUT_PULLDOWN、MUX_MODE7)
AM33XX_PADCONF (AM335x_PIN_MII1_TXD0、PIN_INPUT_PULLDOWN、MUX_MODE7)
AM33XX_PADCONF (AM335x_PIN_MII1_TX_CLK、PIN_INPUT_PULLDOWN、MUX_MODE7)
AM33XX_PADCONF (AM335x_PIN_MII1_RX_CLK、PIN_INPUT_PULLDOWN、MUX_MODE7)
AM33XX_PADCONF (AM335x_PIN_MII1_RXD3、PIN_INPUT_PULLDOWN、MUX_MODE7)
AM33XX_PADCONF (AM335x_PIN_MII1_RXD2、PIN_INPUT_PULLDOWN、MUX_MODE7)
AM33XX_PADCONF (AM335x_PIN_MII1_RXD1、PIN_INPUT_PULLDOWN、MUX_MODE7)
AM33XX_PADCONF (AM335x_PIN_MII1_RXD0、PIN_INPUT_PULLDOWN、MUX_MODE7)
>;
};
之前、我通过 SysConfig 生成的 dtsi 文件中与 RGMII 引脚相关的部分如下:
myrgmii1_pins_default:myrgmii1_pins_default{
PINCTL-SINGLE、PINS =<
AM33XX_IOPAD (0x914、PIN_OUTPUT | MUX_Mode2)/*(J16) gmii1_txen.rgmii1_tctl */
AM33XX_IOPAD (0x918、PIN_INPUT | MUX_Mode2)/*(J17) gmii1_rxdv.rgmii1_rctl */
AM33XX_IOPAD (0x92c、PIN_OUTPUT | MUX_MODE2)/*(K18) gmii1_txclk.rgmii1_tclk */
AM33XX_IOPAD (0x930、PIN_INPUT | MUX_MODE2)/*(L18) gmii1_rxclk.rgmii1_RCLK */
AM33XX_IOPAD (0x928、PIN_OUTPUT | MUX_MODE2)/*(K17) gmii1_txd0.rgmii1_td0 */
AM33XX_IOPAD (0x924、PIN_OUTPUT | MUX_MODE2)/*(K16) gmii1_txd1.rgmii1_TD1 */
AM33XX_IOPAD (0x920、PIN_OUTPUT | MUX_MODE2)/*(K15) gmii1_txd2.rgmii1_td2 */
AM33XX_IOPAD (0x91c、PIN_OUTPUT | MUX_MODE2)/*(J18) gmii1_txd3.rgmii1_td3 */
AM33XX_IOPAD (0x940、PIN_INPUT | MUX_MODE2)/*(M16) gmii1_rxd0.rgmii1_rd0 */
AM33XX_IOPAD (0x93c、PIN_INPUT | MUX_MODE2)/*(L15) gmii1_rxd1.rgmii1_RD1 */
AM33XX_IOPAD (0x938、PIN_INPUT | MUX_MODE2)/*(L16) gmii1_rxd2.rgmii1_RD2 */
AM33XX_IOPAD (0x934、PIN_INPUT | MUX_MODE2)/*(L17) gmii1_rxd3.rgmii1_rd3 */
>;
};
/*可选睡眠引脚设置。 必须在下面的框架中手动输入值。 */
myrgmii1_pins_sleep:myrgmii1_pins_sleep{
PINCTL-SINGLE、PINS =<
AM33XX_IOPAD (0x914、)/*(J16) gmii1_txen.rgmii1_tctl */
AM33XX_IOPAD (0x918、)/*(J17) gmii1_rxdv.rgmii1_rctl */
AM33XX_IOPAD (0x92c、)/*(k18) gmii1_txclk.rgmii1_tclk */
AM33XX_IOPAD (0x930、)/*(L18) gmii1_rxclk.rgmii1_RCLK */
AM33XX_IOPAD (0x928、)/*(k17) gmii1_txd0.rgmii1_td0 */
AM33XX_IOPAD (0x924、)/*(k16) gmii1_txd1.rgmii1_td1 */
AM33XX_IOPAD (0x920、)/*(k15) gmii1_txd2.rgmii1_td2 */
AM33XX_IOPAD (0x91c、)/*(J18) gmii1_txd3.rgmii1_td3 */
AM33XX_IOPAD (0x940、)/*(M16) gmii1_rxd0.rgmii1_rd0 */
AM33XX_IOPAD (0x93c、)/*(L15) gmii1_rxd1.rgmii1_RD1 */
AM33XX_IOPAD (0x938、)/*(L16) gmii1_rxd2.rgmii1_RD2 */
AM33XX_IOPAD (0x934、)/*(L17) gmii1_rxd3.rgmii1_rd3 */
>;
};
我的问题是、是否只需更新 DTS 文件的这一部分就足够了? 我是否应该为引脚添加上拉/下拉定义? MDIO 引脚在与 PHY 器件通信时看起来没有问题。
谢谢!
您好!
感谢您提供引脚多路复用信息。 但是、您提到的一个关键点是 PHY 是在 RMII 模式而不是 RGMII 模式下连接。 您能否附上显示 CPSW 和 PHY 之间连接的部分原理图? 除了引脚多路复用器之外、DTS 的 CPSW 节点中还有一种用于指示 RGMII 或 RMII 的接口模式。
此致、
Schuyler
谢谢、请参阅 RGMII 连接的原理图部分。
是的、我在 DTS 中还找到了 cpsw_emac0器件。 我将在 am335x_Bone_common.dtsi 中将其更新为:
cpsw_emac0{
PHY-Handle =<ðphy0>;
PHY-MODE ="RGMII-txid";
};
Mac (&M){
从器件=<1>;
pinctrl-names ="默认值"、"睡眠";
pinctrl-0 =<&cpsw_default>;
pinctrl-1 =<&cpsw_sleep>;
状态="正常";
};
&Davinci_MDIO{
pinctrl-names ="默认值"、"睡眠";
pinctrl-0 =<&Davinci_MDIO_default>;
pinctrl-1 =<&Davinci_MDIO_SLEEP>;
ethphy0:ethernet-phy@0{
REG =<0>;
};
};
如果您在此处看到任何问题或 需要任何其他更新、请告诉我。 谢谢!
只是快速更新一下。 经过上述修改后,我创建了新的 u-boot 和内核,但问题似乎仍然存在。 RX 正常、但是 TX 没有出去。 从 ethtool -S eth0中、只有 tex"tail_enqueue"计数随时间推移而递增。
您好!
一个潜在的问题是 PHY 模式应该是:
phy-mode = "rgmii-id";
这与 TI 销售的 EVM SK 板类似、使用 RGMII PHY。
您是否从 AM335x 器件测量 TX 时钟?
此致、
Schuyler
我注意到、我一直在使用默认的 AM335x-evm.dts、因为在使用顶级 make 文件构建 u-boot 和内核之前、我没有修改 SDK 中的 defconfig。
因此、它应该仍然是: phy-mode = "rgmii-id"; in the DTS.
我在运行 ping 命令时没有找到 TX 时钟、但 dp83867的 RX 时钟已开启、看起来正常。
MAC 似乎没有以某种方式进行传输。
谢谢你
您好!
如果 TX CLK 未显示任何输出、则不会传输任何数据。 是否在控制台上看到 netdev 看门狗超时?
我需要询问硬件应用同事哪些因素可能会阻止 TX 时钟不运行。
此致、
Schuyler
否、 控制台上没有看门狗超时。 ping 命令必须与 CTL-C 终止、它会显示发送的数据包数量、且所有数据包均失败/丢失。 我想为 AM335x-EVM 加载一个预编译的映像和文件系统、以测试以太网端口。
再次感谢您调查此问题。
您好!
加载预编译映像可能是一个好主意、这将取决于预编译与您的设计的接近程度。 例如、RGMII 引脚排列需要匹配。 我建议使用您对定制电路板所做的 u-boot。
如果预编译映像不存在 TX 时钟、则接下来是查看提供给定制板的时钟。
此致、
Schuyler