这是一个基于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描述符链