调试环境搭建:硬件准备与软件工具

搞网络调试,最怕什么?环境出问题。

你想想看,芯片焊好了、代码烧进去了,结果PHY死活不Link UP。这时候你怀疑是硬件问题还是软件问题?没个靠谱的调试环境,那就真成玄学了。

我自己动手搭出来的环境,心里才有底。这一章,我带你过一遍,调试PHY寄存器到底需要准备哪些东西。

硬件准备

硬件是根基。根基不牢,后面全是白忙活。我个人习惯,在动手之前先把这几样东西准备好。

1. 开发板

这是主角。你得确认板子上PHY芯片的型号。手册在哪里?原理图看明白了吗?

我在项目中遇到过,拿到的板子和原理图对不上,引脚都接反了,查了三天才发现。所以,拿到板子第一件事,对照原理图,把PHY的电源、时钟、复位、MDIO/MDC、RGMII/SGMII这些关键信号,一个一个点出来。

  • 确认PHY型号:Marvell? Broadcom? Realtek? 型号不同,寄存器地址和功能差异很大。
  • 管理接口:MDIO/MDC管脚连到CPU还是CPLD?电平是1.8V还是3.3V?
  • 串口引出:板子上的调试串口是UART0还是UART1?波特率设多少?

2. 调试器

调试器是你的“手术刀”。

类型 用途 我常用的型号
JTAG调试器 烧录、单步执行、读内存、读寄存器 J-Link, OpenOCD + FT2232
USB转I2C/SPI 直接挂到PHY的管理接口,绕过CPU Total Phase Aardvark, USB2ANY
逻辑分析仪 抓MDIO时序,看波形对不对 Saleae Logic 8/16, DSLogic

注意:如果CPU还没跑起来,或者系统都挂了,JTAG是你的最后保障。我一般两种都备着。

3. 线缆与电源

  • 网线:至少两条。一条直连PC网卡,一条做环回测试。
  • 串口线:USB转TTL,千万不要买成USB转RS232,电平不一样。
  • 电源:稳定的12V/5V电源,电流要够。有些板子PHY启动瞬间电流很大,电源拉垮了,寄存器都读不出来。

我的习惯:准备一个“调试工具箱”,里面就装这几样。每次开始新项目,直接拎箱子走,不用现找,效率高很多。

软件工具

硬件到位了,接下来就是软件。你想想看,光有板子,没有工具连上去,那和废铁有什么区别?

我整理一下自己电脑上必装的几样东西。

1. 串口调试工具

串口是人和板子对话的基础通道。内核起来了,uboot打印,PHY驱动初始化,都靠它。

  • SecureCRT / MobaXterm:功能全,支持标签页,日志记录方便。
  • PuTTY:轻量级,应急用。
  • minicom(Linux下):命令行环境,我写脚本时常用。

设置参数:波特率通常是115200、8N1、无流控。这个一定要和uboot/内核的打印参数匹配。

我曾经遇到过一个坑:板子串口输出乱码。折腾了半天,最后发现是线太长,信号衰减了。后来我换了一根短粗的线,立马解决。所以,串口线别超过1米。

2. 网络抓包工具

抓包能让你看到PHY对外发的是什么数据包。是Ethernet包,还是乱码?有没有CRC错误?

说白了,PHY把模拟信号转成数字MAC帧,抓包就是在数字侧看结果。

  • Wireshark:必备。装好之后,记得加载Wireshark自带的USB网卡驱动。
  • tcpdump:Linux命令行抓包,适合在目标板上直接抓。
  • PC网卡配置:设为固定IP,比如192.168.1.100/24。关掉防火墙和网卡省电模式。

抓包小技巧:把网卡的巨型帧(Jumbo Frame)打开,有时候能抓到一些非标帧头的数据,对调试有帮助。

3. 寄存器读写工具

这个是核心。PHY寄存器没法直接用眼睛看,必须通过工具读写。

工具 访问方式 适用场景
mdio / mii-tool 通过CPU的MAC控制器 系统已经跑起来了,可以直接在命令行操作
devmem2 / /dev/mem 直接访问内存映射地址 寄存器直接映射到地址空间的PHY或MAC
专用I2C/SPI工具 通过外部调试器绕过CPU CPU没起来,或者怀疑CPU侧的MDIO驱动有问题
JTAG读写 通过JTAG访问CPU内部寄存器 系统全挂了,只能从硬件最低层开始查

我个人推荐,系统要是能正常跑起来,优先用mdio命令。Linux内核里很多PHY驱动都内置了这个接口,写个简单脚本就能批量读一堆寄存器。

# 举个例子,读取PHY地址1的寄存器0x00(控制寄存器)
# 一般的mdio工具用法
mdio eth0 1 0x00

# 返回示例
read from phy 1 reg 0x00 = 0x3100

如果没输出,或者返回全是0xffff,先别急。检查一下MDIO时钟是否正常,PHY地址对不对。我在项目中遇到过,同一个MDIO总线上挂了两颗PHY,地址搞混了,读的全是0。

重点:调试环境不是搭一次就行。每次换板子、换PHY、换CPU,都要重新确认一遍硬件连接和工具版本。别等到出问题才回头检查线是不是松了。

PHY寄存器调试环境拓扑图 调试环境搭建核心逻辑 开发板硬件层 PHY 芯片 CPU / MAC MDIO/MDC RGMII/SGMII 串口 (UART) PC 软件工具层 串口工具 (SecureCRT/minicom) 网络抓包工具 (Wireshark/tcpdump) 寄存器读写工具 (mdio/devmem/JTAG) 硬件调试器 (J-Link/Aardvark) 串口线 (USB-TTL) 网线 (以太网) JTAG / I2C 连接线 全部硬件和软件,最终目标只有一个: 稳定、可靠地读写目标PHY寄存器

你看这张图就清楚了。PHY是核心,CPU通过MDIO访问它。PC端连了三条路:串口看log、网线抓包、调试器/工具直接读写寄存器。三条路各有各的用,缺哪条,调起来都费劲。