这是一个基于lwIP的以太网驱动程序框架实现。这个驱动程序采用了分层设计,将底层硬件操作与上层协议栈隔离,让开发者能够轻松地将其移植到不同的硬件平台。
核心组件和功能
1. 网络接口结构(struct ethernetif)
struct ethernetif
{
struct eth_addr *ethaddr;
/* Add whatever per-interface state that is needed here. */
};
这是驱动程序的核心数据结构,用于存储网络接口相关的状态信息。
2. 硬件初始化函数[[low_level_init()]]
- 设置MAC地址和MTU值
- 配置DMA传输描述符
- 创建信号量管理机制
- 启动以太网任务
3. 数据发送函数[[low_level_output()]]
- 处理链式pbuf结构
- 管理DMA传输描述符
- 实现流量控制和错误处理
4. 数据接收函数[[low_level_input()]]
- 分配pbuf缓冲区
- 从硬件读取数据
- 处理DMA描述符链
- 管理接收缓冲区
5. 网络接口初始化[[ethernetif_init()]]
- 设置网络接口基本参数
- 配置输出回调函数
- 调用底层初始化函数
工作流程
sequenceDiagram
participant 应用层
participant 网络接口
participant DMA控制器
participant MAC控制器
participant 信号量
Note over 网络接口,DMA控制器: 初始化阶段
网络接口->>信号量: 创建二进制信号量
网络接口->>MAC控制器: 配置MAC地址
网络接口->>DMA控制器: 初始化Tx/Rx描述符链
Note over 应用层,MAC控制器: 数据发送流程
应用层->>网络接口: 发送数据包
网络接口->>信号量: 等待获取信号量
信号量-->>网络接口: 获得信号量
网络接口->>DMA控制器: 复制数据到Tx缓冲区
DMA控制器->>MAC控制器: 发送帧
MAC控制器-->>DMA控制器: 发送完成中断
DMA控制器-->>网络接口: 发送确认
网络接口->>信号量: 释放信号量
Note over MAC控制器,DMA控制器: 数据接收流程
MAC控制器->>DMA控制器: 接收帧
DMA控制器->>信号量: 触发接收信号量
信号量-->>网络接口: 通知新数据
网络接口->>DMA控制器: 获取Rx描述符链
DMA控制器-->>网络接口: 提供接收数据
网络接口->>应用层: 传递接收到的数据
网络接口->>DMA控制器: 释放Rx描述符链