上层的各个协议栈要分别实现对数据的打包、解包、校验以及对下一层相关协议的调用。例如,在 IP 协议栈从以太网驱动收到一个数据包后,经过解包、校验,确认是否为有效的 IP包,如无效则舍弃该包;如有效则进一步判断包内的数据,转而调用 TCP、UDP、ICMP 等协议或使用户自定义的处理服务。而以太网控制芯片的功能是完成 TCP/IP 协议簇分层模型中链路层的相关工作,它处理与双绞线 RJ-45 接口之间的所有物理细节。
0 S3 D5 `6 h- a
0 L9 a; p m1 K. n; I3 m
本篇将要介绍的以太网控制器将实现有关 MAC(媒体访问)子层的控制功能。在此基础上,开发人员可以简便、快速地开发出基于以太网的嵌入式系统应用。因为以太网的上层协议可以根据需求的不同进行选择,物理层可以根据网络速率不同选择特定的媒介物质。下面将详细介绍有关 MAC 层的内容。
0 B H" y4 {1 i& ~, i4 a, o, @, ]
' k$ ~7 m( `- V7 [) b5 s! p5 s) s8 V* l. t
1.2 MAC子层
/ A8 Z9 K5 t3 g$ BMAC 子层在上层协议和以太网网络之间传输和接收数据,其主要功能是确保以太网上每一帧数据的传输都遵循了 IEEE 802.3 规范所规定的介质存取规则。
' c0 H0 K$ X) G2 |8 o
a.基本帧数据格式
" x& q/ Y/ Q7 H( g, l$ H
IEEE 802.3 规范为实现 MAC 定义了一套基本的帧数据格式,如图 4 所示。
) W: A% N( h; o2 k% U0 E' B4 f
: m E/ W2 F8 p
, p- |: v# P1 c" ~: U* f c* x1 V! f" _2 u W5 b
图 10-4 帧数据格式
) ]) l# a3 [- P7 l
各个字段的含义及规定如下。
4 y3 \. S& ?1 X8 b& M# e$ D
• Preamble(PRE):报头,字段中 1 和 0 交替使用,接收方通过该字段知道导入帧,并且该字段提供了同步接收物理层帧接收和导入数据流的方法。
• Start-of-frame delimiter(SFD):帧起始分隔符,字段中 1 和 0 交替使用,结尾是两个连续的 1,表示下一位是目的地址的第一个字节的第一位。
• Destination Address(DA):目标地址,用于识别需要接收帧的目的地。
• Source Address(SA):源地址,用于识别发送帧的源地址。
• Length/Type:长度/类型,表示包含在帧数据字段中的 MAC 数据大小,也可以表示帧的类型。
• Data:数据,是一组 n(46≤n≤1500)字节的任意值序列。
• Frame check sequence(FCS):帧数据校验序列,该序列包括 32 位的循环冗余校验(CRC)值,由发送方生成,通过接收方进行计算以校验帧是否被破坏。
6 U- o8 f* s: g/ A- Y. X0 e
b.帧传输
) J) e7 q6 n6 H: iMAC 层从上层协议接收到发送帧数据的请求,首先按照下面的次序将数据和地址信息保存到 MAC 层的帧数据缓冲区中。
w- ~5 p0 n3 g! I) a9 l9 W
• 插入报头和帧起始分隔符。
• 插入目标地址和源地址。
• 统计来自上层协议数据的数量,插入数量值。
• 插入来自上层协议的数据,如果数据量小于 46 字节,则补齐 46 字节。
• 根据目标地址、源地址、长度/类型和数据产生 CRC 校验序列,并插入校验序列。
. e7 h5 I, A( P3 D' E
一帧完整数据组成后,MAC 层可以开始发送帧数据。有两种发送方式可供选择:半双工(half duplex)和全双工(full duplex)。IEEE 802.3 规范规定所有的以太网 MAC 都要支持半双工方式,即一个时刻只能进行发送或者接收,而不能同时进行发送和接收。全双工方式下发送和接收可以同时进行。
: m; Y/ {) a: R, b6 Z* u. Y1 z
c.帧接收
. Y0 M8 j: X5 b6 Q6 L+ ^3 _! d ~7 x U" ^" h# l
帧接收的过程和发送的过程是相反的。首先检查帧数据中的目标地址和当前地址是否相符,然后检查接收到的帧数据中的数据长度、CRC 校验序列和实际的数据长度、CRC 校验序列是否相符。如果都相符,则将数据交给上层协议进行解析,MAC 层的传输任务完成。
! }# w8 d L e
# [; o# y, O+ U5 e ?- M! \
) _+ m ?* ]" K1.3 媒体无关接口(Media Independent Interface)
9 `& p/ O. @* Z4 e8 @IEEE 802.3 规范提出媒体无关接口(Media Independent Interface,MII)就是为了能够实现 MAC 层和不同的物理层(PHY)之间的逻辑连接,如图 5 所示。; r6 |$ T3 ` L4 C' ]; R
; J7 a+ g: y' y: Y! L7 q0 a8 _
1 j* p6 ]8 Q! w8 W
" }" E/ a( w' @: C1 d2 M5 G9 |
. `- A" r: R# @8 o: c
! f: e$ J" u, |5 W4 g- u2 j3 I$ t/ N" s图 10-5 媒体无关接口
0 V2 G# X, `5 \. F( h3 ]) I# Q& S
MAC 层可以通过媒体无关接口连接不同的物理层。根据对以太网通信速率的要求选择合适物理层接口。针对不同的物理层,媒体无关接口可以以不同的方式实现到 MAC 的逻辑连接。例如在 10Mbit/s 以太网通信中,媒体无关接口使用 1 位来串行发送/接收数据流;在 100Mbit/s以太网通信中,媒体无关接口使用 4 位来串行发送/接收数据流;在 1000Mbit/s 以太网通信中,媒体无关接口使用 8 位来串行发送/接收数据流。
7 N4 v/ X" X, b% B9 v) W0 Q' ^
二、以太网控制器(MAC)的基本框架
) Z8 x; {0 m: { n
下面将要介绍的以太网控制器(MAC)实现了以太网标准的第二层协议——MAC(媒体访问控制)协议,完全符合 IEEE 802.3 和 IEEE 802.3u 规范所规定的 10Mbit/s 和 100Mbit/s 以太网标准。如图 6 所示,使用这个以太网控制器外部连接一块 PHY 芯片(实现了物理层功能的芯片)就可以进行数据链路层的通信,即帧通信。在此基础上可以方便、快捷地开发出更高层次的协议,实现 FTP、HTTP 等协议。
0 Q3 Q3 }& G, V( `/ R# d
! x# f1 r/ C3 t- g. w0 }4 L
( `: \0 F4 l* Y ]
图 6 以太网控制器* C1 T3 W3 B! l
这个以太网控制器具体实现了以下内容。
9 _4 m( m( m: N4 F/ P4 c
• 符合 IEEE 802.3x 规定的全双工帧控制。
• 半双工传输模式下的 CSMA/CD 协议。
• 32 位 CRC 校验序列的自动产生和检查。
• 报头的产生和去除。
• 发送和接收数据包的完全状态控制。
• 满足 IEEE 802.3 规定的 MII(媒体无关接口)。
! g' }/ p0 E9 _9 ?- X5 a
针对以太网控制器需要完成的任务,本节将设计以太网控制器的程序框架,并对各个重要部分进行讲解,如图 7 所示。
' D# ]4 Z6 R" {- d( M! U
% W; c2 H, ]8 p- E/ [
9 n, f& N( r# e% m6 p: w4 F. r' c1 f7 k" V9 v
3 L. |, b- Y3 Q5 W! H7 N
图 10-7 以太网控制器程序框架
1 c2 a- F4 G$ w( u# b2 E% y$ X
以太网控制器的程序框架包括如下几个主要部分。
# L5 @, ^1 G$ M3 |: S% T/ N; x0 l
• 主机接口(Host Interface):主机接口用来连接主机部分,将接收到的数据帧保存到存储器中,同时从存储器中载入需要通过以太网接口传输的数据。主机上可以实现更高层次的以太网协议。
• 数据发送模块(Transmit Module):完成所有与发送数据相关的操作,包括产生报头、添加 CRC 校验序列等。
• 数据接收模块(Receive Module):完成所有与接收数据相关的操作,包括去除报头、CRC 校验。
• 控制模块(Control Module):完成以太网控制器所有功能需要执行的操作。
• 媒体无关接口模块(Media Independent Interface):提供一个与媒体无关的接口,用来连接外部的以太网 PHY 控制芯片。
• 状态显示模块(Status Module):记录以太网控制芯片进行数据传输时各个状态的变化。
• 寄存器模块(Register Module):为以太网控制芯片提供需要的所有寄存器。
, Z+ P ]# {7 p( {! q7 [1 n
$ G8 l! S/ f+ ~5 X8 e0 l6 `) m
本篇到此结束,下一篇带来基于FPGA的以太网控制器(MAC)设计(中),会介绍以太网控制器(MAC)程序的实现,包括顶层程序、媒体无关接口模块(Media Independent Interface Module)、数据发送模块、数据接收模块、控制模块等相关内容。
7 ~& z5 O+ I# N8 O. U V9 ^5 a* c+ I4 D