6.2.7 以太网控制器工作原理
S3C4510B内嵌一个可以以10M/100M的速率工作在半双工或全双工模式下的以太网控制器。在半双工模式下,控制器支持IEEE802.3的CSMA/CD协议;在全双工模式下,控制器支持包括用于流控的暂停操作的IEEE802.3 MAC控制层协议。
以太网控制器的MAC层支持媒体独立接口(Media Independent Interface,MII)和带缓冲的DMA接口(Buffered DMA Interface,BDI)。MAC层由发送模块、接收模块、流控模块、用于存储网络地址的匹配地址存储器(Content Address Memory,CAM)以及一些命令寄存器、状态寄存器、错误计数器寄存器构成。
MII支持在25MHz时钟下以100M速率的发送与接收操作,和在2.5MHz时钟下以10M速率的发送与接收操作。同时,MII遵循ISO/IEC802-3中关于从MAC层中分离出物理层的媒体独立层标准。
图6.2.9为以太网系统的流控框图。

图6.2.9 以太网系统的流控框图
主要特性
S3C4510B以太网控制器的主要特性描述如下:
- 为设备联入以太网提供廉价的解决方案。
- 带猝发模式的BDMA引擎。
- BDMA发送/接收缓冲(均为256字节)。
- MAC发送/接收FIFOs(分别为80字节和16字节),支持在冲突后重新发送,无需DMA请求。
- 数据对准逻辑。
- 端模式变换。
- 支持新/旧传输媒体(与目前的10M网络兼容)。
- 10M/100M的传输速率,提高系统性价比。
- 符合IEEE802.3标准,与现有应用系统兼容。
- 支持媒体独立接口(MII)或7线制接口。
- 用于物理层配置与连接的站管理(Station Management)信号。
- 片内CAM(可存储21个地址)。
- 支持双倍带宽的全双工模式。
- 硬件支持全双工流控暂停操作。
- 支持特定情况下的长数据包模式。
- 支持用于快速测试的短数据包模式。
- 支持填充生成,数据更易于传输并减少传输时间。
MAC功能模块
以太网控制器MAC层的功能模块描述如表6-2-13和图6.2.10。
表6-2-13 MAC功能模块描述
|
功能模块 |
描 述 |
|
媒体独立接口(MII) |
MII为物理层和发送/接收模块之间的接口 |
|
发送模块 |
将要发送的数据从发送缓冲区移到MII。发送模块包括CRC生成电路、奇偶校验电路、前导与后缀生成电路。发送模块同时还包含用于 处理冲突后的回退和数据帧间间隔的定时器。 |
|
接收模块 |
从MII接收数据并存入接收FIFO。接收模块完成逻辑功能:计算与校验CRC值;对从MII接收的数据进行奇偶生成和检测最大与最小数据包长度。接收模块同时还包含一个匹配地址存储器(CAM)模块,用于存储网络目的地址,根据该目的地址决定接收或丢弃数据包。 |
|
流控模块 |
辨别MAC控制包,并支持用于全双工连接的暂停操作。流控模块同时支持生成暂停控制包,并提供用于暂停控制的定时器和计数器。 |
|
MAC控制(命令)与状态寄存器 |
控制可编程选项,包括禁止或使能当某条件发生时通知系统的各种信号。状态寄存器保持各种用于错误处理的状态信息,以及用于网络管理的错误计数器累加统计信息等。 |
|
回环电路 |
提供独立于MII和物理层的MAC层测试。 |

图6.2.10 MAC层流控功能模块
媒体独立接口(Media Independent Interface,MII)
发送和接收模块均通过MII进行操作,其接口特性描述如下:
- 独立于传输媒体。
- 支持多生产商互操作。
- 支持到MAC层和到物理层接口设备的连接。
- 支持10M或100M的数据传输能力。
- 数据与分隔符的传输和参考时钟同步。
- 提供独立的4位数据宽度发送与接收通道。
- 使用TTL电平信号,与通用数字CMOS ASIC处理器电平兼容。
- 支持到物理层和到站管理设备的连接。
- 提供简单的管理接口。
- 具有驱动有限长度屏蔽电缆的能力。
物理层(Physical Layer Entity,PHY)
物理层完成发送与接收数据的编码/解码。其编码/解码(用于10BASE-T的曼切斯特编码、用于100BASE-X的4B/5B编码以及用于100BASE-T4的8B/6T编码)方式对MII无影响。MII对原始数据进行接收时,以前导字段开始,到CRC字段结束。同时,MII对原始数据进行发送时,也以前导字段开始,到CRC字段结束。MAC层可生成填充数据并传送到PHY。
带缓冲的DMA接口(Buffered DMA Interface,BDI)
带缓冲的DMA接口支持通过系统总线的读/写操作,带有两个8位的总线数据收发器,同时可选择奇偶校验功能。数据收发器通过系统接口进行初始化。MAC层控制器通过响应BDI的准备好信号从BDI接收数据并发送出去,或将接收到的数据发送给BDI,由帧结束信号标识各数据包的边界。
MAC发送模块(MAC Transmit Block)
MAC发送模块负责数据发送,与802.3标准的CSMA/CD协议兼容。MAC发送模块由如下几部分构成:
- 发送FIFO和发送控制器。
- 前导与后缀发生器。
- 填充发生器。
- 并行CRC发生器。
- 开始逻辑与计数器。
- 回退与重发定时器。
- 发送状态机。
图6.2.11为MAC发送功能模块图。

图6.2.11 MAC发送功能模块图
发送FIFO与读/写控制器(Transmit FIFO and Read/Write Controllers):发送FIFO的大小为80字节,每一个字节数据附加一个奇偶校验位,即每个字节为9位长度,其中,前64个字节数据可以被打包存储和发送,并在发生碰撞时进行重发,无需系统更多的干预。如果没有碰撞发生,则进行数据包发送,剩余的16个字节由系统处理,以避免因为FIFO不发送而丢失。
当系统接口设置了相应控制寄存器的发送使能位时,发送状态机就从BDI请求数据,然后由系统控制器从系统存储器中获取数据。
FIFO控制器将数据存储在发送FIFO中,然后通过一个握手信号通知发送状态机,FIFO中的数据有效,可以开始发送操作。如果FIFO未满,FIFO控制器向BDI请求更多的数据。发送状态机连续的发送数据,直到检测到最后一个字节的帧结束信号,然后追加经过计算的CRC值到数据包的末尾(若发送控制寄存器的CRC除去位被置位,则不追加),状态寄存器的包发送位被置位,若中断使能同时产生中断。
模块中的写FIFO控制器与计数器和发送状态机的读FIFO控制器与计数器根据各自的计数值协同工作,尽管他们由不同的时钟源驱动。
FIFO控制器将数据和校验位存储在FIFO中,并对数据进行奇偶校验,如果校验错误,FIFO控制器就设置一个错误状态位,若对应的中断使能同时产生中断。
前导与后缀发生器(Preamble and Jam Generator):一旦控制寄存器中的发送使能位被置位,且FIFO中有8个字节的数据,发送状态机发出Tx_en信号启动发送,开始发送前导与起始帧分隔符。
填充发生器(PAD Generator):如果发送一个短的数据包,MAC会生成填充字节将短数据包扩展到64字节的最小限制,填充字节由“0”组成。有一个控制位可以禁止填充字节的生成。
并行CRC发生器(Parallel CRC Generator):数据包中所有要发送的数据,从目的地址域到其后的所有数据域都可以生成CRC。用户也可通过设置发送控制寄存器的对应位禁止CRC生成。该功能可以用于测试,例如,为测试接收器的错误检测功能,可强制发送CRC错误的数据。该功能也可用在某些需要端到端CRC校验的网桥与交换机应用场合。
回退与重发定时器(Back-off and Retransmit Timers):当检测到网络上有碰撞时,发送器模块就停止数据的发送并向网络发送一个特定的阻塞信号,通知所有的节点网络有碰撞。之后,发送器等待一段时间后再重发数据,如果连续16次的重发失败,发送状态机就置错误标志位,并在中断使能的情况下产生中断通知系统由于网络的过渡阻塞使数据包发送失败。发送状态机清除FIFO,MAC准备下一个数据包的发送。
发送数据奇偶校验器(Transmit Data Parity Checker):FIFO中的数据要进行奇校验检测。当数据准备发送时,发送状态机进行奇偶校验,如果检测到奇偶错误,发送数据奇偶校验器作如下操作:
- 停止数据的发送。
- 设置发送状态寄存器中的奇偶错误位。
- 如果中断使能则产生中断。
发送状态机(Transmit State Machine):发送状态机是发送模块的中央控制逻辑,控制着各种信号的传输、定时器、处理状态寄存器中的错误。
MAC接收模块(MAC RECEIVE BLOCK)
MAC接收模块负责数据的接收,与802.3标准的CSMA/CD协议兼容。
当接收到一个数据包时,接收模块首先检测诸如CRC错误、对齐错误、长度错误等错误条件,也可以通过设置控制寄存器的相应位禁止错误检查。接收模块根据CAM的状态和目的地址,决定接收或拒绝数据包。MAC接收模块由以下几个部分构成:
- 接收FIFO,FIFO控制器和计数器。
- 接收BDI状态机。
- 开始逻辑与计数器。
- 用于地址识别的CAM块。
- 并行CRC校验器。
- 接收状态机。
接收模块的主要部件如图6.2.12所示。

图6.2.12 MAC接收功能模块
接收FIFO控制器(Receive FIFO Controller):接收FIFO控制器一次接收一个字节的数据,并根据接收到的字节数更新计数器的值。在FIFO接收数据时,CAM模块根据自身存储的地址对数据包的目的地址进行检测,如果CAM能识别该地址,FIFO就继续接收数据包,如果CAM不能识别,接收模块就丢弃数据包并清除FIFO。
地址CAM和地址识别(Address CAM and Address Recognition):CAM模块完成地址识别。它将接收到的数据包的目的地址与自身存储的地址进行比较,如果地址匹配,接收状态机就继续接收数据。CAM模块按6个字节存储一个地址的方式组织,共有32字(128字节)的大小,最多可存储21个地址(126字节)。
CAM的地址单元0、1和18用于发送暂停控制包。因此,用户要发送一个暂停控制包,必须将目的地址写入CAM0,源地址写入CAM1,长度/类型、操作码和操作数写入CAM18。同时,必须对MAC发送控制寄存器的发送暂停控制位置位,此外,CAM19和CAM20可用于构造一个由用户定义的控制帧。
接收状态机(Receive State Machine):在MII模式下,接收模块从MII的RxD[3:0]接收数据,数据传输与25MHz(100M速率)的接收时钟或与2.5MHz(10M速率)的接收时钟同步。在7-线模式下,传输速率为10MHz,接收模块从RxD_10接收数据。
接收模块检测到数据包的前导与起始帧分隔符(SFD)后,接收状态机按字节对数据进行处理,生成奇偶位并存储到接收FIFO。如果CAM模块接受数据包的目的地址,接收FIFO就将数据包的其余部分存储。在接收结束后,接收模块就通过设置接收状态寄存器的对应位标识数据包接收完毕。在接收过程的任何错误都将复位FIFO,同时接收状态机等待当前数据包的结束,然后进入空闲状态等待下一个前导信号和起始帧分隔符SFD。
BDMA接口接收状态机(BDMA Interface Recevie State Machine):BDMA接口接收状态机产生Rx_rdy信号请求接收FIFO中的数据,数据包的最后一个字节数据通过Rx_EOF信号标识。如果在接收过程中发生任何错误,或在最后发生CRC错误,BDMA接口接收状态机发出Rx_toss信号指示接收到的数据包应该丢弃。
流控模块(Flow Control Block):流控模块具有如下功能:
- 识别由接收模块接收到的MAC控制帧。
- 发送MAC控制帧,即使发送器暂停。
- 用于暂停操作的定时器与计数器。
- 命令与状态寄存器(CSR)接口。
- 可选择MAC控制帧通过,进行软件处理。
流控模块中的接收逻辑按如下方式识别MAC控制帧:
- 长度/类型域必须为MAC控制帧规定的特定值;目的地址必须被CAM识别;包括CRC在内的数据包长度必须为64字节;CRC必须有效;数据帧必须包含一个有效的暂停操作码和操作数。
- 如果长度/类型域不是MAC控制帧规定的特定值,MAC不作响应,数据包被当做普通包处理。如果CAM不能识别目的地址,数据包就被MAC丢弃;如果包括CRC在内的数据包长度不是64字节,MAC也不进行操作,然后数据包被标识为MAC控制帧,在允许通过的情况下,传送到软件处理。
用户可通过设置发送状态寄存器中的控制位,进行全双工暂停操作或其他的MAC控制功能,即使发送器自身处于暂停状态。两个定时器和两个对应的命令与状态寄存器(CSR)与暂停操作相关。
命令与状态寄存器(CSR)接口在发送与接收控制寄存器和状态寄存器内提供控制位与状态位,这些位可用于初始化MAC控制帧的发送、使能或禁用MAC的控制功能,以及读取流控计数器的值。
控制位可选择将MAC控制帧完全在控制器内处理,或将MAC控制帧传送到软件处理。
带缓冲DMA接口(Buffered DMA Interface)
带缓冲DMA(BDMA)控制模块(BDMA Control Blocks)
BDMA引擎控制一个发送缓冲区和一个接收缓冲区。BDMA发送缓冲区在数据包被发送时保持数据和状态信息;BDMA接收缓冲区在数据包被接收时保持数据和状态信息。每一个FIFO都有一个控制模块用于控制数据从缓冲区的移入和移出。
图6.2.13为BDMA控制模块图。

图6.2.13 BDMA控制模块图
总线仲裁器(Bus Arbiter):总线仲裁器决定发送或接收BDMA缓冲控制器中的哪一个有较高的优先级访问系统总线,优先级也可以改变。总线仲裁器在以下情况向系统管理器发出总线请求信号(nREQ):
- 当缓冲区中的数据大于一次接收的数据时。
- 当缓冲区中的剩余空间大于一次发送的数据时。
- 当EOF(帧结束)标志被存入缓冲区时。
当接收到系统管理器的应答信号后,总线仲裁器根据优先级决定系统总线的访问权。
BDMA总线控制逻辑(BDMA Bus Control Logic):BDMA控制器的功能模块提供对系统总线进行读、写操作的总线控制逻辑,该控制逻辑支持如下操作:
- 猝发尺寸控制,以优化系统总线的使用。
- 发送起始控制(基于发送缓冲区大小的1/8),使发送能力与系统总线的能力匹配。
- 大、小端字节交换功能,支持大、小端存储格式的数据传输。
- 发送、接收数据对齐部件满足按字对齐的要求。
存储数据结构(Memory Data Structure):以太网控制器有三种数据结构用于交换控制信息和数据,分别为:
- 发送帧描述符(Transmit Frame Descriptor)。
- 接收帧描述符(Receive Frame Descriptor)。
- 帧数据缓冲(Frame Data Buffer)。
每一个帧描述符由如下元素构成:
- 帧起始地址
- 所有者位
- 发送器控制域
- 状态域
- 帧长度
- 下一个帧描述符指针
以下为发送帧描述符的数据结构:

[0]填充模式选择(P)
0 = 填充模式 1 = 无填充模式
[1]CRC模式选择(C)
0 = CRC模式 1 = 非CRC模式
[2]当前帧发送完毕后MAC发送中断使能控制(T)
0 = 禁止 1 = 使能
[3]小端模式(L)
0 = 大端模式 1 = 小端模式
[4]帧数据指针递增/递减(A)
0 = 递减 1 = 递增
[6:5]部件对齐控制(WA)
00 = 无无效字节 01 = 一个无效字节
10 = 两个无效字节 11 = 三个无效字节
[31]所有者位(O)
0 = CPU 1 = BDMA
[30:0]帧数据指针(Frame Data Pointer)
被发送帧数据的地址。
[15:0]帧长度(Frame Length)
发送帧的大小。
[31:16]发送状态(Tx Status)
该发送帧的发送状态域由MAC在发送后更新。
[31:0]下一个帧描述符指针(Next Frame Descriptor Pointer)
下一个帧描述符的地址。
接收帧描述符的数据结构如下:

[31]所有者位(O)
0 = CPU 1 = BDMA
[30:0]帧数据指针(Frame Data Pointer)
被接收保存的帧数据地址。
[15:0]帧长度(Frame Length)
接收帧的大小。
[31:16]接收状态(Rx Status)
该接收帧的接收状态域由MAC在接收完毕后更新。
[31:0]下一个帧描述符指针(Next Frame Descriptor Pointer)
下一个帧描述符的地址。
数据帧(Data Frame):帧起始地址的最高位,所有者位,控制描述符的所有者。当所有者位为“1”时,描述符属BDMA控制器所有,当所有者位为“0”时,描述符属CPU所有,描述符的所有者同时拥有相应的数据帧,描述符的帧起始地址指向该数据帧。
当接收到数据帧时,由软件设置BDMA模块中的最大帧尺寸寄存器的值为系统帧缓冲尺寸(典型值为:1536和2048)。软件同时设置接收帧描述符的起始地址寄存器,使其指向一个帧描述符链。
然后,BDMA引擎开始设置BDMA接收控制寄存器(BDMARXCON)中的BDMA接收使能位,当接收到一个数据帧时,数据帧被拷贝到由接收帧起始地址规定的存储器中。接收的数据帧被写入帧数据缓冲区,直到数据帧的结束或帧长度超过设定的最大帧尺寸。
如果成功接收到整个数据帧,由帧描述符中的状态位指示,否则,就设置状态位指示错误发生,同时所有者位被清除并可能产生中断。接着,BDMA控制器拷贝下一个帧描述符寄存器的值到发送帧描述符起始地址寄存器,如果下一个帧描述符地址为空,BDMA控制器停止工作,所有后续的帧都被丢弃。否则,描述符被读入,BDMA控制器按上述步骤开始处理下一个帧。
当BDMA控制器读取一个描述符时,若描述符的所有者位没有设置,BDMA控制器可以有两种处理方式:
- 跳到下一个帧描述符
- 产生中断并停止BDMA的工作。
发送帧描述符包含如下内容“
- 一个指向帧数据的4字节指针。
- 部件对齐控制位[6:5]
- 帧数据指针递增/递减控制位[4]
- 小端控制位[3]
- 发送后中断使能位[2]
- 无CRC位[1]
- 无填充位[0]
在发送过程中,发送帧描述符中两字节的帧长度移入BDMA的内部发送寄存器,发送后,发送状态保存到发送帧描述符。然后BDMA控制器更新下一个帧描述符地址寄存器。
当发送帧描述符起始地址寄存器指向第一个帧缓冲使,发送器就开始将帧数据发送到发送缓冲存储器。
以太网控制器特殊功能寄存器(Ethernet Controller Special Registers)
S3C4510B使用的特殊功能寄存器可分为两大类:
- BDMA控制与状态寄存器。
- MAC控制与状态寄存器。
BDMA控制与状态寄存器(BDMA Control and Status Registers)
所有包含存储器地址的寄存器都必须按字对齐格式保存地址。表6-2-14为BDMA控制与状态寄存器描述。
表6-2-14 BDMA控制与状态寄存器
|
寄存器 |
偏移地址 |
操作 |
功能描述 |
复位值 |
|
BDMATXCON |
0x9000 |
读/写 |
BDMA发送控制寄存器 |
0x00000000 |
|
BDMARXCON |
0x9004 |
读/写 |
BDMA接收控制寄存器 |
0x00000000 |
|
BDMATXPTR |
0x9008 |
读/写 |
发送帧描述符起始地址寄存器 |
0xFFFFFFFF |
|
BDMARXPTR |
0x900C |
读/写 |
接收帧描述符起始地址寄存器 |
0xFFFFFFFF |
|
BDMARXLSZ |
0x9010 |
读/写 |
接收帧最大尺寸寄存器 |
未定义 |
|
BDMASTAT |
0x9014 |
读/写 | |