4. 开发环境搭建与第一个PIC32以太网工程

要让一块 PIC32 以太网开发板真正“活”起来,第一步不是写协议栈,而是把工具链、配置工具和硬件连接理顺。本节以 PIC32MX795F512L + LAN8720A PHY 的典型组合为例,走通从安装 MPLAB X IDE 到点亮 RJ45 座链路指示灯(Link LED)的完整路径。链路灯亮起,说明 MAC 已通过 RMII 接口与 PHY 建立通信、PHY 与对端交换机完成了自协商,这是后续跑通 TCP/IP 之前最关键的“物理层验收”。

一、工具链三件套及其分工

PIC32 以太网开发涉及三个必须协同的工具,理解它们各自的职责,能避免后面“改了配置不生效”的困惑:

  • MPLAB X IDE:工程管理、代码编辑、下载与调试的集成环境,负责组织源文件、调用编译器和调试器。
  • XC32 编译器:把 C 源码编译成 PIC32 的 MIPS32 机器码,并提供设备启动代码、链接脚本和寄存器头文件。
  • MPLAB Harmony 3:Microchip 的中间件与代码生成框架,通过 MCC(MPLAB Code Configurator)图形化配置时钟、引脚、以太网 MAC、PHY 驱动和 TCP/IP 协议栈,自动生成初始化代码。

三者版本必须匹配:Harmony 3 的某个版本通常要求特定范围的 XC32 与 IDE 版本。建议从 Harmony 3 的 release notes 中确认推荐组合,例如 Harmony v3.10 搭配 XC32 v4.10、MPLAB X IDE v6.05。版本错配最常见的表现是 MCC 图形界面无法加载器件包,或生成的代码在编译时报“未定义的外设寄存器宏”。

二、安装与调试器设置

安装顺序建议为:先装 MPLAB X IDE,再装 XC32 编译器,最后通过 IDE 的 Tools → Plugins 安装 MCC 与 Harmony 内容包。安装完成后,在 Tools → Options → Embedded → Build Tools 中确认 XC32 路径已被识别。

调试器方面,PIC32 以太网开发常用 PICkit 4 或 ICD 4,通过 ICSP 接口连接。在工程属性中需要设置:

  • Debugger:选择实际使用的调试器型号,接口选 ICSP,供电方式选“由目标板供电”或“由调试器供电”,取决于开发板是否已接外部电源。
  • Compiler:优化等级建议调试阶段用 -O0 或 -O1,避免优化导致单步跳转混乱;发布阶段再切到 -Os。
  • Programmer:勾选“Program after build”可让每次编译后自动烧录,提高迭代效率。
首次连接调试器时,若 IDE 提示“无法识别器件”,先检查 ICSP 的 MCLR、PGEC、PGED 三根线是否接好,再确认目标板供电电压是否为 3.3V。PIC32 的调试接口对电源质量较敏感。

三、用 MCC 配置以太网外设

新建工程时选择器件 PIC32MX795F512L,工具链选 XC32,然后启动 MCC。配置的核心是让 MAC 与 PHY 的时钟、引脚和数据通路对齐。以 RMII 接口为例,关键配置项如下:

配置项示例值说明
系统时钟 SYSCLK80 MHz由 8 MHz 晶振经 PLL 倍频得到
REFCLKO50 MHzRMII 参考时钟,由 REFCLKO 输出给 PHY
以太网接口模式RMII相比 MII 引脚更少,需 50 MHz 参考时钟
PHY 地址0x00由 PHY 的 PHYAD 引脚电平决定
PHY 类型LAN8720Harmony 内置对应驱动
中断优先级4以太网 MAC 中断,需高于普通任务

配置完成后点击 Generate,MCC 会生成 system_config、ethernet_init、drv_ethmac 等初始化代码。此时不要急着写应用逻辑,先确认生成的 sys_initialize() 被正确调用。

四、点亮链路指示灯的验证逻辑

链路指示灯由 PHY 直接驱动,但它的亮灭取决于三个条件同时成立:PHY 已上电并完成复位、REFCLKO 50 MHz 时钟已送达 PHY、PHY 与对端交换机完成自协商。因此,点灯过程实际上是一次完整的物理层自检。

在 Harmony 生成的代码中,PHY 驱动会周期性读取 BMSR(Basic Mode Status Register)寄存器的 Link Status 位。我们可以用调试器观察该位,或在代码中加入轮询:

// 轮询 PHY 链路状态(示例)
uint16_t bmsr;
DRV_ETH_PHY_Read(phyHandle, PHY_REG_BMSR, &bmsr);
if (bmsr & 0x0004) {
    // Link up:链路已建立
    LED_GREEN_On();
} else {
    LED_GREEN_Off();
}

如果 RJ45 座上的绿色 Link LED 常亮,说明链路已建立;若同时有黄色 Activity LED 闪烁,说明有数据帧收发。若灯始终不亮,按以下顺序排查:

  1. 用示波器测 REFCLKO 引脚是否有 50 MHz 方波,无则检查时钟配置。
  2. 测 PHY 的 nRST 引脚,确认复位已释放。
  3. 读 PHY 的 PHYID 寄存器,若读回 0x0000 或 0xFFFF,说明 MDIO/MDC 通信失败,检查这两根线及 PHY 地址。
  4. 换一根确认可用的网线,并确认对端交换机端口已启用。
Harmony 的 PHY 驱动默认可能启用了“自动协商”并等待一段时间。若在 ethernet_init 之后立即读 BMSR,可能因协商未完成而读到 Link Down。建议在初始化后延时 2~3 秒再判断,或使用驱动提供的链路状态回调。

五、从点灯到可通信的最小验证

链路灯亮只是第一步。要确认 MAC 侧也正常工作,可以进一步读取 MAC 的统计寄存器,例如 EMACSTAT 中的接收帧计数。若发送一个 ARP 请求后该计数增加,说明数据通路已经打通。此时再引入 TCP/IP 协议栈,才有稳定的基础。

整个流程可以概括为:工具链版本对齐 → 调试器连接正常 → MCC 配置时钟与 RMII → 生成并编译 → 烧录后观察 Link LED → 读 PHY 寄存器确认链路 → 读 MAC 统计确认数据通路。每一步都有明确的观察点和判断依据,而不是“烧进去看看”。

PIC32 以太网工程链路验证路径 MPLAB X IDE 工程管理 / 下载 / 调试 XC32 编译器 MIPS32 代码生成 / 链接 Harmony 3 + MCC 时钟 / 引脚 / MAC / PHY 配置 MCC 关键配置 SYSCLK = 80 MHz REFCLKO = 50 MHz RMII 模式 PHY 地址 = 0x00 PHY 类型 = LAN8720 MAC 中断优先级 = 4 PIC32MX795F512L + LAN8720A 硬件连接 MAC (RMII) LAN8720A PHY RJ45 + 变压器 RMII MDI 验证与判断 ① REFCLKO 50 MHz 方波 ② BMSR Link 位 = 1 ③ Link LED 常亮 失败 查时钟/复位/MDIO

把上述配置和验证步骤走一遍,得到的不仅是一个亮灯的工程,而是一条可复用的调试路径。后续引入 TCP/IP 协议栈、DHCP 或 HTTP 服务器时,只要物理层这条链路是确定的,问题范围就能迅速缩小到协议栈配置或应用逻辑,而不是在“灯不亮”和“ping 不通”之间反复猜测。