最近在做一些关于S32K148开发板的使用,研读了部分该开发板关于ENET模块的官方文档。
2 Ethernet MAC (ENET)
2.1 Chip-specific ENET information
S32K148有一个ENET模块实例。S32K1xx系列的其他产品没有ENET模块。
注意:
•在使用ENET_MDIO或ENET_TMRx之前,对应的引脚需要配置GPIO_PDDR。
•通过设置PORT_PCRn寄存器的DSE字段,使能ENET传输盘的驱动强度。
•仅在STOPx模式下支持通过magic packet唤醒,在VLPS模式下不支持。这个唤醒独立于EIMR[wakeup]位域。
•对于RMII模式,MII_RMII_TX_CLK在IO信号输入多路复用表被称为RMII_REF_CLK。
在ENET运行期间,不能改变系统频率,因为这会导致FIFO欠运行状态。
2.2 Introduction
MAC- net核心配合10/ 100mbit /s MAC,实现三层网络加速功能。这些功能旨在加速各种常见网络协议(如IP、TCP、UDP和ICMP)的处理,为客户端应用程序提供线速服务。
2.3 Overview
核心实现符合IEEE802.3-2002标准的双速度10/100mbit /s以太网MAC。MAC层提供了对10/ 100mbit /s半双工或全双工以太网局域网的兼容性。
MAC操作是完全可编程的,可以用于网络接口卡(NIC),桥接,或交换应用程序。核心根据IETF RFC 2819实现RMON (remote network monitoring)计数器。
核心还实现了硬件加速块,以优化提供TCP/IP、UDP和ICMP协议服务的网络控制器的性能。加速块在硬件中执行关键功能,而这些功能的实现通常需要大量的软件开销。
核心实现了可编程的嵌入式fifo,可以在接收路径上提供缓冲,以实现无损流控制。
先进的电源管理功能可与magic包检测和可编程的下电模式。
一个统一的DMA (uDMA),位于ENET模块内部,优化ENET核心和SoC之间的数据传输,并支持一个增强的缓冲区描述符编程模型,以支持IEEE 1588功能。
可编程以太网MAC与IEEE 1588集成标准IEEE 802.3以太网MAC与时间戳模块。IEEE 1588标准为工业自动化应用的分布式控制节点提供精确的时钟同步。
Ethernet MAC features
•
实现了完整的802.3规范的序言/SFD生成,帧填充生成,CRC生成和检查
•支持零长度
前导码
•可动态配置,支持10/ 100mbit /s的操作
•支持10/ 100mbit /s全双工和可配置的半双工操作
•符合AMD magic packet detection with interrupt for node remote power management
•通过以下方式与商业以太网PHY设备进行无缝接口:
•4位媒体独立接口(MII),工作在2.5/25 MHz。
•4位非标准MII- lite (MII不含CRS和COL信号),工作在2.5/25 MHz。
•工作在50 MHz的2位减少MII (RMII)。
•简单的64位FIFO用户应用界面
•CRC-32检查在全速与可选的转发帧检查序列(FCS)字段发送给客户端
•CRC-32的生成和附加在传输或转发用户应用程序提供的FCS可选的每帧基础上
•全双工模式:
•实现自动暂停帧(802.3 x31A)生成和终止
•半双工模式:提供全碰撞支持,包括干扰、回退和自动重传
•支持vlan标签帧,符合IEEE 802.1Q标准
•可编程MAC地址:在传输时插入;在接收时丢弃目的地址不匹配的帧(广播帧和暂停帧除外)
•可编程混杂模式支持省略MAC目的地址检查接收
•基于64条目哈希表对接收进行组播和单播地址过滤,减少更高层次的处理负载
•可编程帧最大长度提供支持任何标准或专有帧长度
•用于IEEE 802.3基本和强制性管理信息库(MIB)包和远程网络监控(RFC 2819)的帧流量和错误(对齐、CRC、长度)和暂停帧的统计指标
•简单的握手用户应用FIFO接口与完全可编程的深度和阈值水平
•在用户界面上为接收到的帧提供独立的状态字,提供帧长度、帧类型、VLAN tag、错误信息等信息
•多个内部环回选项
•用于PHY设备配置和管理的MDIO主接口支持两个可编程的MDIO基址,以及标准(IEEE 802.3条款22)和扩展(条款45)MDIO帧格式
•支持传统的FEC缓冲区描述符
![](https://i-blog.csdnimg.cn/blog_migrate/1c518f457e76d2550f6b2c805bcab42c.png)
Figure 57-1. Ethernet MAC-NET core block diagram
2.4 内存映射/寄存器的定义
NET寄存器必须用32位访问进行读写。非32位访问将以错误终止。保留位应该用0写入,读时忽略。未使用的寄存器读0,写没有作用。下表显示了以太网注册组织。
Table 57-1. Register map summary
![](https://i-blog.csdnimg.cn/blog_migrate/9a06bf9206aaf2eb96a031a31f68030b.png)
下面只简单介绍几个寄存器,详细及所有寄存器见芯片手册。
中断事件寄存器(ENET_EIR)
当在EIR中设置了一个位的事件发生时,如果在中断掩码寄存器(EIMR)中也设置了相应的位,就会发生中断。将1写入EIR位会清除它;写0没有影响。这个寄存器在硬件重置时被清除。
注意:
TxBD[INT]和RxBD[INT]必须设置为1,以允许在增强模式下设置相应的EIR寄存器标志,
ENET_ECR [EN1588] = 1。遗留模式不需要启用这些标志。
中断掩码寄存器(ENET_EIMR)
IMR控制允许哪些中断事件生成实际的中断。硬件重置清除这个寄存器。如果在EIR和EIMR寄存器中设置了相应的位,则产生一个中断。中断信号保持断言,直到1被写入EIR字段(写入1以清除)或0被写入EIMR字段。
接收描述符激活寄存器(ENET_RDAR)
RDAR是一个命令寄存器,由用户编写,用来指示接收描述符环已经被更新,也就是说,驱动程序产生了空的接收缓冲区,并且设置了空位。
发送描述符主动寄存器(ENET_TDAR)
TDAR是一个命令寄存器,用户写它是为了表明传输描述符环已经被更新,也就是说,驱动程序已经在缓冲区描述符中设置了就绪位生成了传输缓冲区。当ECR[ETHEREN]从set转换到cleared或设置ECR[reset]时,TDAR寄存器在重置时被清除。
以太网控制寄存器(ENET_ECR)
ECR是一个读/写用户寄存器,尽管硬件也可能改变这个寄存器中的字段。它控制着以太网MAC的许多高级功能,包括通过EN1588字段的传统FEC支持
MII管理框架寄存器(ENET_MMFR)
除非MSCR被编程为零,否则写入MMFR会触发对PHY设备的管理帧事务。
如果在写MMFR期间MSCR从零变为非零,MII帧将用先前写入MMFR的数据生成。这允许在MSCR为零的情况下,以任意顺序编程mfr和MSCR。
如果在帧生成过程中写入MMFR寄存器,则帧内容将被更改。软件必须使用EIR[MII]中断指示,以避免在帧生成过程中写入MMFR寄存器。
2.5 以太网MAC帧格式
最小长度为64字节;最大长度为1518字节,不包括序言和开始帧分隔符( SFD)字节
以太网帧由以下字段组成:
•7字节序言
•开始帧分隔符(SFD)
•两个地址字段
•长度或类型字段
•数据段
•
帧检查序列(CRC值)
![](https://i-blog.csdnimg.cn/blog_migrate/8d8996b7ef511aa763e24aa47ba1b553.png)
Figure 57-2. MAC frame format overview
可选择地,MAC帧可以被vlan标记,在MAC源地址和类型/长度字段之间插入一个额外的四字节字段。VLAN标签由IEEE P802.1q规范定义。vlan标记帧的最大长度为1522字节,不包括前导字节和SFD字节。
Table 57-3. MAC frame definition
![](https://i-blog.csdnimg.cn/blog_migrate/3a9c7695c5df25c27f749268552d1cea.png)
帧长度定义:不带前导符和SFD的完整帧的长度,单位为八进制。如果帧包含至少64个字节且不超过程序设定的最大长度,那么帧就是有效长度。
有效载荷长度:length/type字段表示帧有效载荷段的长度。最有效的字节首先发送/接收。
•如果length/type字段设置为小于46的值,则填充有效负载,以满足最小帧长度要求(64字节)。对于带vlan标签的帧,小于42表示填充帧。
•如果length/type字段被设置为一个大于程序帧最大长度的值(例如1518)它被解释为类型字段。
目的和源地址:48比特位MAC地址。最低有效字节首先发送/接收,MAC地址的前两个最低有效位区分MAC帧,详细说明在MAC地址检查。
注意:
虽然IEEE规范定义了最大帧长度,但MAC核心提供了为帧最大长度编写任意值的灵活性。
暂停帧Pause Frames
接收设备产生一个暂停帧来指示发送设备的拥塞,发送设备应该停止发送数据。暂停帧由长度/类型设置为0x8808表示。在该类型后面的暂停帧的前两个字节定义了一个始终设置为0x0001的16位操作码字段。16位暂停量定义在帧有效负载字节2 (P1)和3 (P2)中。P1暂停量程字节是最有意义的。
在暂停帧中找不到有效载荷长度字段,并且暂停帧总是用42字节(0x00)填充。
如果接收到暂停值大于零的暂停帧(XOFF条件),则
一旦当前帧传输完成,MAC就停止传输数据。MAC停止传输在暂停量程中定义的数据。一个暂停量子分数是512位的次数。
如果接收到暂停值为零的暂停帧(XON条件),则允许发送端立即发送数据(详情请参阅全双工流控制操作)。
Magic packets,
是一个单播、多播或广播包,它在有效负载部分携带一个已定义的序列。
Magic packets
只有在特定条件下才会被接收和检查。
解码
Magic packets的定义序列由一个同步流组成,该同步流由6个连续的0xFF字节组成,然后是被唤醒节点的16个连续单播MAC地址序列。这个序列可以位于Magic packets有效载荷的任何地方。Magic packets由标准以太网头、可选填充和CRC组成。
2.6 IP及更高层次的帧格式
例如,IP数据报指定以太网帧的有效负载部分。TCP数据报指定IP数据报中的有效负载部分。
Ethernet types
IP数据报在以太网帧的有效负载段中携带。以太网帧类型/长度字段区分几种数据报类型。
Table 57-5. Ethernet type value examples
![](https://i-blog.csdnimg.cn/blog_migrate/9872c0c4318c976458a399f245eadc82.png)
IPv4 datagram format
下图显示了IP Version 4 (IPv4)报头,它位于IP数据报的开头。它是用32位的词组成的。发送/接收的第一个字节是第一个单词(换句话说,版本/IHL字段)的最左边的字节。
IP报头可以包含更多选项,如果需要,这些选项总是被填充,以保证报头后面的有效负载与32位边界对齐。IP报头后面紧跟着有效负载,它可以包含进一步的协议报头(例如,TCP或UDP,由协议字段值表示)。完整的IP数据报在以太网帧的有效负载段中传输。
Table 57-6. IPv4 header format
![](https://i-blog.csdnimg.cn/blog_migrate/b72dad1d75aba8f9d735a8f5d3b5cc34.png)
Table 57-7. IPv4 header fields
![](https://i-blog.csdnimg.cn/blog_migrate/924fa54ceb75a3eb8b7f209702f435b5.png)
User Datagram Protocol (UDP) datagram format
当协议标识符为17时,在IP头之后发现用户数据报协议头。数据报的有效载荷在UDP报头之后。头字节顺序遵循上面为IP头给出的约定。
Table 57-11. UDP header format
![](https://i-blog.csdnimg.cn/blog_migrate/68d9b4c39f345979eb8373c791f8e35e.png)
Table 57-12. UDP header fields
![](https://i-blog.csdnimg.cn/blog_migrate/0ab1739d925d093f403ad43bf5ad683d.png)
TCP datagram format
当协议标识符为6时,在IP报头后面会找到一个TCP报头。TCP有效负载紧跟在TCP报头之后。
Table 57-13. TCP header format
![](https://i-blog.csdnimg.cn/blog_migrate/f0275abda75e95d26f58f553b86b85da.png)
Table 57-14. TCP header fields
![](https://i-blog.csdnimg.cn/blog_migrate/6d4c9e0a5df54ddccce42aba3bfaebd4.png)
详细内容请见文档《S32K1xx Series Reference Manual——Supports S32K116, S32K118, S32K142, S32K142W, S32K144,S32K144W, S32K146, and S32K148》。