linux网络设备应用与驱动编程学习3——lpc3250以太网控制器

时间:2022-01-23 17:33:18

一、以太网模块内部结构

linux网络设备应用与驱动编程学习3——lpc3250以太网控制器

 

特性:10M或100MbpsPHY器件,完全遵循802.3;独立的发送和接收缓冲区存储器,映射到共用的IRAM或EMC存储器;与外部PHY芯片通过MII或RMII接口连接。

二、操作相关

n         描述符数组

DMA管理器利用存放在存储器中的帧描述符数组和状态数组来工作。描述符充当以太网硬件和设备驱动软件之间的接口。每个帧描述符包含两个32位区域:第一个区域是一个指针,指向包含一帧或一个片段的数据缓冲区,另一个区域是与帧或片段相关的控制字。

软件驱动程序必须将描述符数组或状态数组的基址写入TxDescriptor/RxDexcriptor和TxStatus/RxStatus寄存器中。

n         描述符所有权

软件能过将TxProduceIndex/RxConsumeIndex寄存器加1,能够将描述符所有权和状态所有权状态移交给硬件。硬件则通过更新TxConsumeIndex/RxProduceIndex寄存器将描述符和状态移交给软件。(一个封包对就一个描述符数组,一个描述符数组内可有多个帧)

n         连续的顺序和封包设计

顺序连续表明当以太网模块已完成对描述符/状态的读/写操作时,它下一个将会读/写的描述符/状态是在下一个更高的相邻的存储器地址中的描述符/状态。封包表明当以太网模块对数组中的最后一个描述符/状态完成读/写操作之后,它下一个读/写的描述符/状态将是位于数组基址的第一个描述符/状态。

n         描述符的空/满状态

当所有的描述符被生产者拥有时,描述符数组为空;如果都被消耗者拥有时,描述符数组为满;如果各拥有一部分,则为‘部分满’。消耗索引等于生产索引,则描述符数组为空。如果消耗索引等于生产索引加1,则数组为满。

三、发送过程

1.       建立描述符和数据

即直译描述符的数据指针区和控制字区。

2.       TxDMA管理器读取Tx描述符数组

使能TxEnable位,TxDMA读取TxConsumeIndex确定的描述符。请求数目由TxProduceIndex-TxConsumeIndex来决定。

3.       发送数据

读取描述符后,TxDMA将数据提交给MAC发送,完成之后,TxDMA将状态信息写回状态区域StatusInfo和StatusHashCRC中。

在加载描述符时,TxDMA会查询描述符控制区域的Last位。如果last=0, TxDMA将主机存储器中所有片断集中起来,访问一串帧描述符并将它们发送出去作为以太网线路上的一个以太网帧。last=1,表示它是该帧的最后一个片段,这样,我们就找到了帧结尾。

4.       更新ConsumeIndex

每次当TxDMA向存储器提交状态字时,表明它完成了描述符的发送过程,并让TxConsumeIndex加1。

5.       更新帧发送状态

MII总线上发送了帧信息之后,帧描述符的状态信息字由DMA管理器更新。

6.       发送错误和中断

如果发送过程中出现错误,则TxDMA管理器写相应状态字和中断状态寄存器来报告错误。

四、接收

1. 建立描述符和数据

即直译描述符的数据指针区和控制字区。

       2. RxDMA管理器读取Rx描述符数组

使能RxEnable位,RxDMA读取RxProduceIndex确定的描述符。请求数目由RxConsumeIndex-RxProduceIndex-1来决定。

       3.接收数据

在rxDMA管理器使能之后,读取描述符,接收DMA等待MAC从MII接口,通过接收滤波器返回接收数据。在接收了一个片段之后,开始写片段缓冲区中的帧。RxDMA管理器将状态作息写回statusinfo和statushashcrc中。

       4.更新produceindex

              当rxDMA提交一个数据片段和相关的状态字给存储器时,RxProduceIndex加1.

       5.写接收帧状态

MII总线上接收了帧信息之后,帧描述符的状态信息字由DMA管理器更新。

6.发送错误和中断

如果发送过程中出现错误,则TxDMA管理器写相应状态字和中断状态寄存器来报告错误。

五、其它

lpc3250以太网控制器还有流控制、状态hashCRC计算、接收滤波、功率管理、发送填充等特性。