[以太网芯片] 沁恒 CH32V307 以太网 MAC 与 LWIP 移植实战要点

[复制链接]
24|1
LOVEEVER 发表于 2026-9-18 15:20 | 显示全部楼层 |阅读模式
【前言】
CH32V307 直接集成了以太网 PHY 和 MAC,做联网设备时能省掉外部 PHY 和一堆外围器件。但 LWIP 移植过程中有几步容易卡住,这里按实际顺序把要点列出来。

一、硬件层面的确认
1. CH32V307 的以太网速率不高,走的是内部 PHY,引脚要按数据手册接好网络变压器和 RJ45。
2. 先确认 PHY 能被正确识别。通过 MAC 的 MII 接口读 PHY 的 ID 寄存器,能读到正确值说明链路没问题。

二、LWIP 移植的核心三件事
1. sys_arch.c:实现信号量、邮箱、互斥量、线程创建。如果用无操作系统的 NO_SYS 模式,这部分可以简化,直接在裸机主循环里调用 lwip_periodic_handle 和收包处理函数。
2. ethernetif.c:实现网卡初始化、收发包、中断处理。收发建议用 DMA 描述符,避免逐字节搬运。
3. lwipopts.h:内存池大小是最容易出问题的地方。PBUF_POOL_SIZE 和 MEM_SIZE 设太小会在高负载下丢包,设太大又会挤占有限的 SRAM。建议先用中等配置跑通再逐步调优。

三、几个容易踩的坑
1. 中断优先级配错:以太网中断如果优先级低于 SysTick,会出现收包延迟累积。建议放在较高的抢占优先级。
2. 描述符对齐:DMA 描述符必须按 4 字节对齐,用结构体数组的时候一定要加对齐属性。
3. 字节序转换:在网络字节序和主机字节序之间转换时不要漏掉 htons 和 ntohs。
4. 收发缓冲区长度:以太网帧最小 60 字节,实际分配时建议按 1536 字节算,避免边界溢出。
5. 时钟配置:MAC 的时钟源必须配置正确,否则 PHY 读写会随机失败,表现为时通时不通。

四、调试建议
1. 先用固定 IP、关掉 DHCP,能 ping 通再开协议栈的其它功能。
2. 抓包工具比串口打印高效得多,遇到协议栈卡住优先抓包看有没有收到 ARP 应答。
3. 可以用板子上的 LED 指示链路状态和收包计数,比串口输出更直观。

以上是 CH32V307 以太网加 LWIP 的实际移植经验,希望对大家有帮助。
星辰大海不退缩 发表于 2026-9-18 20:25 | 显示全部楼层
LWIP移植先配好MAC与PHY时钟及RMII引脚,注意收发描述符对齐与缓存一致性,再对接sys_arch,调试时先从ping通入手。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

423

主题

3520

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部
0