《第05章2以太网接口》由会员分享,可在线阅读,更多相关《第05章2以太网接口(31页珍藏版)》请在金锄头文库上搜索。
1、实时嵌入式系统实时嵌入式系统以太网接口及应用网络层次模型网络层次模型以太网层次模型以太网层次模型以太网层次功能以太网层次功能n n物理层:定义了数据传输与接收所需要的物理层:定义了数据传输与接收所需要的光与电信号,线路状态,时钟基准,数据光与电信号,线路状态,时钟基准,数据编码电路等。并向数据链路层设备提供标编码电路等。并向数据链路层设备提供标准接口。准接口。n n数据链路层:提供寻址机制,数据帧的构数据链路层:提供寻址机制,数据帧的构建,数据差错检查,传输控制。向网络层建,数据差错检查,传输控制。向网络层提供标准的数据接口等功能。提供标准的数据接口等功能。MAC 帧物理层MAC 层IP 层以
2、太网 V2 MAC 帧目的地址源地址类型数 据FCS6624字节46 1500IP 数据报以太网的以太网的 MAC 帧格式帧格式10101010101010 10101010101010101011前同步码帧开始定界符7 字节1 字节8 字节插入在帧的前面插入的 8 字节中的第一个字段共 7 个字节,是前同步码,用来迅速实现 MAC 帧的比特同步。第二个字段是帧开始定界符,表示后面的信息就是MAC 帧。 为了达到比特同步,在传输媒体上实际传送的要比 MAC 帧还多 8 个字节以太网接口的构成以太网接口的构成n n从硬件的角度看,以太网接口电路主要由从硬件的角度看,以太网接口电路主要由MACMA
3、C控制器和物理层接口(控制器和物理层接口(Physical LayerPhysical Layer,PHYPHY)两大部分构成。)两大部分构成。n n嵌入式网络应用的两种方案嵌入式网络应用的两种方案n n处理器加以太网接口芯片。芯片如处理器加以太网接口芯片。芯片如处理器加以太网接口芯片。芯片如处理器加以太网接口芯片。芯片如RTL8019RTL8019RTL8019RTL8019、RTL8029RTL8029RTL8029RTL8029、RTL8139RTL8139RTL8139RTL8139、CS8900CS8900CS8900CS8900、DM9000DM9000DM9000DM9000等,
4、其内等,其内等,其内等,其内部结构也主要包含这两部分。部结构也主要包含这两部分。部结构也主要包含这两部分。部结构也主要包含这两部分。n n自带自带自带自带MACMACMACMAC控制器的处理器加物理层接口芯片。如控制器的处理器加物理层接口芯片。如控制器的处理器加物理层接口芯片。如控制器的处理器加物理层接口芯片。如DP83848DP83848DP83848DP83848、BCM5221BCM5221BCM5221BCM5221、ICS1893ICS1893ICS1893ICS1893等。等。等。等。物理层芯片物理层芯片DP83848系统框图系统框图LPC1768的以太网接口的以太网接口n nLP
5、C1700LPC1700系列处理器的以太网模块包含一个全特系列处理器的以太网模块包含一个全特性的性的10Mbps10Mbps或或100Mbps100Mbps的以太网介质访问控制器的以太网介质访问控制器(MACMAC),采用),采用DMADMA硬件加速器可以提供最优化硬件加速器可以提供最优化的性能。的性能。n n在在LPC1700LPC1700系列处理器的以太网模块中有系列处理器的以太网模块中有16KB16KB的的专用专用SRAMSRAM数据缓存。用于保存收发的以太网数数据缓存。用于保存收发的以太网数据帧。该缓冲区可由以太网据帧。该缓冲区可由以太网DMADMA控制器使用。从控制器使用。从而大大减
6、轻了而大大减轻了CPUCPU对数据收发的开销。对数据收发的开销。n n以太网模块与片外以太网物理层接口采用以太网模块与片外以太网物理层接口采用MIIMII(介质独立接口)或(介质独立接口)或RMIIRMII(简化的(简化的MIIMII)协议,)协议,和片上的和片上的MIIMMIIM(MIIMII管理)串行总线。管理)串行总线。LPC1768的以太网接口的以太网接口LPC1768的以太网的以太网RMII引脚和引脚和MIIM引脚引脚引脚名称引脚名称引脚名称引脚名称类型类型类型类型引脚描述引脚描述引脚描述引脚描述 ENET_TX_EN ENET_TX_EN ENET_TX_EN ENET_TX_EN
7、输出输出输出输出发送数据使能发送数据使能发送数据使能发送数据使能 ENET_TXD1:0 ENET_TXD1:0 ENET_TXD1:0 ENET_TXD1:0输出输出输出输出发送数据,发送数据,发送数据,发送数据,2 2 2 2位位位位 ENET_RXD1:0 ENET_RXD1:0 ENET_RXD1:0 ENET_RXD1:0输入输入输入输入接收数据,接收数据,接收数据,接收数据,2 2 2 2位位位位 ENET_RX_ER ENET_RX_ER ENET_RX_ER ENET_RX_ER输入输入输入输入接收错误接收错误接收错误接收错误 ENET_CRS ENET_CRS ENET_CR
8、S ENET_CRS输入输入输入输入载波侦听载波侦听载波侦听载波侦听/ / / /数据有效数据有效数据有效数据有效ENET_REF_CLK/ENET_REF_CLK/ENET_REF_CLK/ENET_REF_CLK/ENET_RX_CLKENET_RX_CLKENET_RX_CLKENET_RX_CLK输入输入输入输入参考时钟参考时钟参考时钟参考时钟引脚名称引脚名称引脚名称引脚名称类型类型类型类型引脚描述引脚描述引脚描述引脚描述 ENET_MDC ENET_MDC ENET_MDC ENET_MDC输出输出输出输出MIIMMIIMMIIMMIIM时钟时钟时钟时钟 ENET_MDIO ENET
9、_MDIO ENET_MDIO ENET_MDIO输入输入输入输入/ / / /输出输出输出输出MIMIMIMI数据输入和输出数据输入和输出数据输入和输出数据输入和输出帧描述符与状态字帧描述符与状态字n n以太网以太网DMA控制器将每个以太网帧用一对控制器将每个以太网帧用一对描述和状态字来表示。描述符中包含了对描述和状态字来表示。描述符中包含了对应帧的数据起始地址以及数据长度。状态应帧的数据起始地址以及数据长度。状态字则保存了字则保存了DMA控制器处理该帧后(发送控制器处理该帧后(发送或接收)的结果。或接收)的结果。n n针对发送和接收分别对应有不同描述符与针对发送和接收分别对应有不同描述符与
10、状态字队列。所以状态字队列。所以DMA控制器一共维护控制器一共维护4个个循环队列。发送描述符及状态字队列,接循环队列。发送描述符及状态字队列,接收描述符及状态字队列。收描述符及状态字队列。接收描述符与状态字队列接收描述符与状态字队列接收描述符控制字段作用接收描述符控制字段作用接收状态字位段说明接收状态字位段说明发送描述符与状态字队列发送描述符与状态字队列描述符与状态字队列描述符与状态字队列n n描述符队列是用户程序和以太网描述符队列是用户程序和以太网DMA控制控制器间数据交换的桥梁。器间数据交换的桥梁。n nDMA控制器将描述符及状态字队列维护为控制器将描述符及状态字队列维护为循环队列。队列的
11、状态分为三种:满,半循环队列。队列的状态分为三种:满,半满,空。满,空。n n循环队列的操作通过循环队列的操作通过“队头队头”和和“队尾队尾”实现。实现。描述符与状态字队列描述符与状态字队列n n以太网队列中的以太网队列中的“队头队头”称为生产者称为生产者(producer),负责将数据装入队列,负责将数据装入队列,“队队尾尾”称为消费者称为消费者(consumer),负责将数据,负责将数据从队列取出。从队列取出。发送队列发送队列发送数据发送数据DMA控制器控制器CONSUMER 用户程序用户程序PRODUCER接收队列接收队列接收数据接收数据DMA控制器控制器PRODUCER 用户程序用户程
12、序CONSUMER循环队列工作原理循环队列工作原理n n为了实现循环队列的操作,以太网为了实现循环队列的操作,以太网为了实现循环队列的操作,以太网为了实现循环队列的操作,以太网DMADMA控制器提控制器提控制器提控制器提供了供了供了供了4 4个描述符及状态字索引寄存器。由个描述符及状态字索引寄存器。由个描述符及状态字索引寄存器。由个描述符及状态字索引寄存器。由DMADMA维维维维护的护的护的护的TxConsumeIndexTxConsumeIndex,RxProduceIndexRxProduceIndex和软件和软件和软件和软件驱动维护的驱动维护的驱动维护的驱动维护的TxProduceInd
13、ex,RxConsumeIndexTxProduceIndex,RxConsumeIndex。复位值均为复位值均为复位值均为复位值均为0 0。每操作一个元素,索引加。每操作一个元素,索引加。每操作一个元素,索引加。每操作一个元素,索引加1 1。发送队列发送队列发送数据发送数据DMA控制器控制器TxConsumeIndexTxConsumeIndex 用户程序用户程序TxProduceIndexTxProduceIndex接收队列接收队列接收数据接收数据DMA控制器控制器RxProduceIndexRxProduceIndex 用户程序用户程序RxConsumeIndexRxConsumeInd
14、ex循环队列工作原理循环队列工作原理n n在以太网数据收发时,软件驱动程序通过在以太网数据收发时,软件驱动程序通过在以太网数据收发时,软件驱动程序通过在以太网数据收发时,软件驱动程序通过ConsumeIndexConsumeIndex和和和和ProduceIndexProduceIndex的关系就可以判断的关系就可以判断的关系就可以判断的关系就可以判断循环队列的状态。循环队列的状态。循环队列的状态。循环队列的状态。n n当当当当ConsumeIndexConsumeIndex= = ProduceIndexProduceIndex时,队列为空。时,队列为空。时,队列为空。时,队列为空。n n当
15、当当当(ProduceIndex+1)%(ProduceIndex+1)%队列长度队列长度队列长度队列长度= = ConsumeIndexConsumeIndex时,队列满。时,队列满。时,队列满。时,队列满。n n循环队列索引的翻转循环队列索引的翻转循环队列索引的翻转循环队列索引的翻转(WRAP AROUND)(WRAP AROUND)问题:在两问题:在两问题:在两问题:在两个索引加个索引加个索引加个索引加1 1后,超出了队列的范围时,索引应该从后,超出了队列的范围时,索引应该从后,超出了队列的范围时,索引应该从后,超出了队列的范围时,索引应该从队头重新开始索引。由队头重新开始索引。由队头重
16、新开始索引。由队头重新开始索引。由DMADMA硬件维护的两个索引硬件维护的两个索引硬件维护的两个索引硬件维护的两个索引由硬件解决翻转,由软件维护的两个索引需要软由硬件解决翻转,由软件维护的两个索引需要软由硬件解决翻转,由软件维护的两个索引需要软由硬件解决翻转,由软件维护的两个索引需要软件解决翻转问题。件解决翻转问题。件解决翻转问题。件解决翻转问题。循环队列工作原理循环队列工作原理接收队列接收队列接收数据接收数据DMA控制器控制器RxProduceIndexRxProduceIndex 用户程序用户程序RxConsumeIndexRxConsumeIndex接收数据接收数据接收数据接收数据接收数
17、据接收数据队列满队列满队列空队列空翻转翻转接收数据接收数据以太网接收数据举例以太网接收数据举例控制字控制字PACKET0x7FE01411PACKET0x7FE01419PACKET0x7FE01409PACKET0x7FE01325状态字状态字描描述述符符队队列列状状态态字字队队列列17控制字控制字17控制字控制字17控制字控制字17数据包缓冲区数据包缓冲区RxProduceIndex=RxConsumeIndex=RxDescriptorNumber=3001 2 31 2 307状态字状态字07状态字状态字12状态字状态字07F0,共共8字节字节F1,共共8字节字节F2,共共3字节字节F
18、0,共共8字节字节0队列翻转队列翻转RxDescriptorRxStatusLPC1700以太网接口寄存器以太网接口寄存器n nLPC1700LPC1700系列处理器以太网模块的寄存器分系列处理器以太网模块的寄存器分为为4 4大类,包括大类,包括MACMAC寄存器类寄存器类1717个寄存器、个寄存器、控制寄存器类控制寄存器类1717个寄存器、接收滤波器类个寄存器、接收滤波器类5 5个寄存器,以及模块控制寄存器类个寄存器,以及模块控制寄存器类5 5个寄存个寄存器,共计器,共计4444个寄存器。个寄存器。n n详见表详见表5.285.28应用举例应用举例n n本以太网接口实例实现本以太网接口实例实
19、现LPC1700以太网接口以太网接口的初始化,实现以太网接入及以太网数据的初始化,实现以太网接入及以太网数据收发。收发。n n初始化内容:初始化内容:DP83848芯片初始化,以太网芯片初始化,以太网接口初始化,以太网缓冲区初始化。接口初始化,以太网缓冲区初始化。以太网接口初始化流程以太网接口初始化流程n n1 1 1 1、使能以太网引脚,打开、使能以太网引脚,打开、使能以太网引脚,打开、使能以太网引脚,打开EMACEMACEMACEMAC控制器控制器控制器控制器n n2 2 2 2、利用、利用、利用、利用MAC_MAC1 MAC_MAC1 MAC_MAC1 MAC_MAC1 和和和和 MAC
20、_COMMAND MAC_COMMAND MAC_COMMAND MAC_COMMAND 寄存器复位以太网模寄存器复位以太网模寄存器复位以太网模寄存器复位以太网模式式式式n n3 3 3 3、初始化、初始化、初始化、初始化MACMACMACMAC控制寄存器,设置控制寄存器,设置控制寄存器,设置控制寄存器,设置 MAC_MAC1 MAC_MAC1 MAC_MAC1 MAC_MAC1 、 MAC_MAC2 MAC_MAC2 MAC_MAC2 MAC_MAC2 、 MAC_MAXF MAC_MAXF MAC_MAXF MAC_MAXF 、MAC_CLRT MAC_CLRT MAC_CLRT MAC_
21、CLRT 、 MAC_IPGRMAC_IPGRMAC_IPGRMAC_IPGR等寄存器等寄存器等寄存器等寄存器n n4 4 4 4、使能、使能、使能、使能RMIIRMIIRMIIRMII接口,复位接口,复位接口,复位接口,复位RMIIRMIIRMIIRMII逻辑逻辑逻辑逻辑n n5 5 5 5、利用利用利用利用write_PHY()write_PHY()write_PHY()write_PHY()和和和和read_PHY()read_PHY()read_PHY()read_PHY()函数操作函数操作函数操作函数操作DP83848DP83848DP83848DP83848:复:复:复:复位、检查
22、芯片和链路状态、位、检查芯片和链路状态、位、检查芯片和链路状态、位、检查芯片和链路状态、n n6 6 6 6、利用利用利用利用MAC_IPGTMAC_IPGTMAC_IPGTMAC_IPGT和和和和MAC_SUPPMAC_SUPPMAC_SUPPMAC_SUPP寄存器配置速率和双工模式寄存器配置速率和双工模式寄存器配置速率和双工模式寄存器配置速率和双工模式n n7 7 7 7、利用利用利用利用MAC_SAMAC_SAMAC_SAMAC_SA寄存器设置寄存器设置寄存器设置寄存器设置MACMACMACMAC地址地址地址地址n n8 8 8 8、设置收发设置收发设置收发设置收发DMADMADMADM
23、A描述符描述符描述符描述符n n9 9 9 9、利用利用利用利用MAC_RXFILTERCTRLMAC_RXFILTERCTRLMAC_RXFILTERCTRLMAC_RXFILTERCTRL寄存器设置接收滤波寄存器设置接收滤波寄存器设置接收滤波寄存器设置接收滤波n n10101010、利用利用利用利用MAC_INTENABLEMAC_INTENABLEMAC_INTENABLEMAC_INTENABLE和和和和MAC_INTCLEARMAC_INTCLEARMAC_INTCLEARMAC_INTCLEAR寄存器使能寄存器使能寄存器使能寄存器使能EMACEMACEMACEMAC中断和清除中断标
24、志中断和清除中断标志中断和清除中断标志中断和清除中断标志n n11111111、接收和发送使能接收和发送使能接收和发送使能接收和发送使能以太网接口接收发送缓冲区分配以太网接口接收发送缓冲区分配n nrx_descr_init()函数及函数及tx_descr_init()函数用函数用于接收与发送缓冲区的初始化。代码如下。于接收与发送缓冲区的初始化。代码如下。以太网接口接收发送缓冲区分配以太网接口接收发送缓冲区分配48字节字节0x7FE0 000048字节字节38字节字节34字节字节41500字节字节31500字节字节接收描述符接收描述符接收状态字接收状态字发送描述符发送描述符发送状态字发送状态字
25、接收缓冲区接收缓冲区发送缓冲区发送缓冲区用户程序的以太网帧表示用户程序的以太网帧表示以太网帧接收以太网帧接收以太网帧发送以太网帧发送LPC1768以太网驱动程序的层次结构以太网驱动程序的层次结构硬件无关硬件无关硬件无关硬件无关以太网功能:以太网功能:以太网功能:以太网功能:ethernet_initethernet_initethernet_initethernet_init, , , , ethernet_pollethernet_pollethernet_pollethernet_poll, , , , ethernet_sendethernet_sendethernet_sendethe
26、rnet_send 帧操作:帧操作:帧操作:帧操作:frame_sendframe_sendframe_sendframe_send, , , , frame_getframe_getframe_getframe_get, , , , frame_processframe_processframe_processframe_process硬件相关硬件相关硬件相关硬件相关帧与内存交换:帧与内存交换:帧与内存交换:帧与内存交换:CopyFromFrame_EMACCopyFromFrame_EMACCopyFromFrame_EMACCopyFromFrame_EMAC, , , ,CopyToF
27、rame_EMACCopyToFrame_EMACCopyToFrame_EMACCopyToFrame_EMAC帧操作:帧操作:帧操作:帧操作:Init_EMACInit_EMACInit_EMACInit_EMAC;CheckFrameReceivedCheckFrameReceivedCheckFrameReceivedCheckFrameReceived, StartReadFrameStartReadFrameStartReadFrameStartReadFrame, ReadFrameBE_EMACReadFrameBE_EMACReadFrameBE_EMACReadFrameBE_EMAC, EndReadFrameEndReadFrameEndReadFrameEndReadFrame;RequestSendRequestSendRequestSendRequestSend, WriteFrame_EMACWriteFrame_EMACWriteFrame_EMACWriteFrame_EMAC