硬件开发环境搭建:开发板、工具与参考手册
搞嵌入式,尤其是做RGMII这种高速接口,硬件环境要是没搭好,后面调试就是给自己挖坑。我自己带过几个徒弟,上来就急着写代码,结果连示波器探头都没接地,折腾一整天啥都没抓到。所以这一章,咱们先把家底儿清点清楚。
2.1 开发板的选型与检查
市面上带KSZ9031的板子不少,树莓派、野火、正点原子都有对应的底板或核心板。我个人习惯选那种把RGMII信号和RJ45座子都引出来的板子,省得自己再飞线。检查开发板时,重点看这几点:
- 电源:核心电压1.2V,IO电压3.3V,别搞反了。我曾经遇到过一块板子,电源纹波大,RGMII时钟抖得像心电图,愣是调了三天才发现是LDO坏了一半。
- 时钟:KSZ9031需要25MHz晶振,或者从SoC那边给125MHz差分时钟。你想想,如果时钟不准,MDC/MDIO都读不到寄存器,别说RGMII了。
- 复位电路:Reset引脚至少要拉低2ms再释放,有些开发板用RC复位,时间不够,芯片起不来。
- 测试点:最好板子上有TXD[3:0]、RXD[3:0]、GTX_CLK、RX_CLK的测试焊盘,不然示波器探头没地方放。
2.2 必备硬件工具清单
做RGMII调试,工具不能省。省了工具就是省时间——省自己的时间去加班。我列一张表,你对照着备齐:
| 工具 | 型号建议 | 用途 | 避坑经验 |
|---|---|---|---|
| 数字示波器 | 至少200MHz带宽,4通道 | 抓RGMII时钟和数据眼图 | 带宽不够看RGMII时钟上升沿会变梯形,误判信号质量 |
| 逻辑分析仪 | 16通道,100MHz采样率以上 | 抓RGMII控制信号、MDIO命令 | 采样率太低会导致毛刺漏掉,我曾因此错过一次MDIO写失败 |
| 可调电源 | 双路输出,带电流表 | 给开发板供电,观察电流变化 | 电流突然变大,十有八九是短路或误烧了配置 |
| 电烙铁 + 热风枪 | T12手柄 + 858D热风枪 | 换电阻、飞线、改配置 | 热风枪温度调320℃,吹久了PCB会鼓包 |
| 串口转USB工具 | FT232RL或CP2102 | 看内核打印,调试驱动 | 别买那些山寨CH340,丢数据丢到你怀疑人生 |
| JTAG调试器 | J-Link或ST-Link | 单步调SoC的RGMII控制器 | 如果SoC是Cortex-A核,记得用J-Link Pro |
工具不在多,但要精。我记得有一次,逻辑分析仪的采样率只有50MHz,结果RGMII的RX_CTL信号脉宽只有8ns,根本采不到,后来换了个200MHz的分析仪才抓到问题——SoC的RX_CTL输出时序差了半拍。
2.3 必须阅读的参考手册
资料这东西,平时不看,出问题才翻。但要是等出问题再翻,黄花菜都凉了。我建议你开工前,至少把这四份文档通读一遍:
- KSZ9031RNX 数据手册 (DS00002114):寄存器表和时序参数是必看章节。PHY地址怎么设?RGMII到MII转换寄存器在哪?都在里面。
- KSZ9031 应用笔记 (AN-1469):专门讲RGMII布局布线的。我当年第一次做RGMII走线,没看这个笔记,结果TX时钟和TXD0长度差了200mil,眼图全关。
- SoC的RGMII控制器手册:比如STM32MP1的ETH外设文档,或者i.MX6的FEC手册。驱动里寄存器基地址、时钟使能位、描述符结构体都要从这里抄。
- 开发板原理图 & PCB布局图:确认RGMII信号有没有串联电阻、有没有上下拉、有没有走蛇形线等长。
这四份文档够了吗?说实话,不够。你还得准备一份示波器操作指南——别笑,我见过有人用20ns/div的时基去抓10ns宽的信号,能看清才怪。建议你提前把那些常用测量项(比如眼图余量、上升时间、建立保持时间)的测量方法练熟练。
2.4 软件工具准备
硬件搭好之后,软件环境也得先就位。下面是我习惯提前装好的工具链:
- 交叉编译器:根据SoC选,比如arm-linux-gnueabihf-gcc,版本搞新一点,不然会碰到奇怪的sizeof对齐问题。
- TFTP/NFS服务器:调试阶段用网络加载内核和设备树,比每次都烧写TF卡快不少。
- MDIO调试工具:比如Linux下的mdio-tool,或者自己写一个mdio read/write的小程序。我曾经用i2c-tool的错觉去调MDIO,结果搞了一天才发现寄存器地址不对。
- 抓包工具:Wireshark + tcpdump,检查PHY是否正常协商、是否有CRC错误。如果抓包发现大量FCS错误,大概率是PHY的RGMII时钟延迟没设对。
2.5 本章知识体系总览
说了这么多,可能有点乱。我画了一张图,把硬件环境搭建的三个维度串起来——开发板、工具、手册。三者互相依赖,缺一不可。
这张图看起来简单,但其实每条箭头背后都有坑。比如开发板和工具之间:没有示波器你怎么测眼图?没有逻辑分析仪你连RGMII的RX_CTL是否有效都看不到,更别说调试驱动了。
好了,硬件环境的主干就这些了。接下来的章节,我们就要真刀真枪地开始驱动移植了——首先得让MDIO能正常读写,不然一切都是白搭。