图解单片机网卡RAM区如何发送数据包

发布者:牟牟的侬最新更新时间:2014-08-26 来源: cecb2b关键字:单片机网卡  RAM区  数据包 手机看文章 扫描二维码
随时随地手机看文章

  本文深入研究了使用单片机控制网卡,接入以太网Ethernet,即IEEE802.3协议网络,实现串口仪器的网络化。

  1 硬件结构和电路设计

  1.1 总体设计

  整个系统设计采用ATMEL公司8位通用微控制器AT89C51作为主处理器,驱动REALTEK公司的10M以太网控制芯片RTL8019AS,实现串口数据和外部网络互连。

  1.2 网卡接线设计

  RTL8019AS为100管脚PQFP封装,工作电压5V。其接线原理图如图1所示。地址SA0-4接到单片机P2的低五位上;SA8和SA9接电源;其余SA5-7,SA10-19这13个管脚全部接地;IORB和IOWB分别接单片机的读写信号端;RSTDRV接到P1.2上;8位数据SD0-7按顺序接到单片机P0.020.7脚;TPOUT+和PTOUT-是发送管脚对,连接到RJ45口的发送脚1和2;而TPIN+和TPIN-则是接收管脚对,连接到RJ45口的接收脚3和6;管脚X1和X2之间接20M的晶振及接地电容;LED0和LED1分别串接发光二极管和1k8电阻,连到5V电源上;IOCS16B管脚串接27k8电阻接地;管脚BD0-3(IOS0-3)是负责定义基地址位置的,全部悬空,作为0输入。

图解单片机网卡RAM区如何发送数据包7

  LED0默认表示通信冲突COL,LED1表示接收数据包。开关电源模块发送对和接收对不能直接接到RJ45插头上,要通过MTD2002隔离电压模块(选用20F-01)和RJ45相连。网卡有16bit数据线,可以使用16bit或8bit模式传送数据,使IOCS16B管脚为低,我们选中的是8bit模式。

 

  1.3 串行接口部分

  1串口部分采用MAX232和9针串口。单片机P3.0/RXD0和P3.0/RXD0通过MAX232芯片分别接到串口的2针和3针上。串口5针接地。

  串行口选择工作方式1,这时的波特率计算公式为:

图解单片机网卡RAM区如何发送数据包8

  串口在9600波特率时,晶振选用11.0592M,预设值算得0xFD,smod=0;晶振选用16MHz,预设值为0xF7,smod=1。

  2 网卡的初始化和工作过程

  2.1 网卡芯片RTL8019AS的控制方法

  控制网卡芯片RTL8019AS是通过读写芯片上的32个字节的控制寄存器组实现的。另外该开关电源模块芯片含有16kbyte的RAM,地址为0x400020x7fff。这些RAM不能通过单片机直接寻址,必须通过32个字节的控制寄存器组,以DMA方式读写它们。

  32个字节的控制寄存器组可以由单片机直接寻址,但其基地址是通过管脚BD0-3(IOS0-3)配置的。MTD2002电路中将四个管脚全部悬空,全0输入,产品资料说明其基地址为300H。

  这32个字节的控制寄存器组分成4页,00H寄存器称为CommandRegister(CR),CR的最高两位代表目前寄存器处于哪一页。01H到0FH在不同的页有不同的意义,同时,即使同一页,读和写代表的意义也可能不同,这一点很值得注意。10H217H是远程DMA端口,而18H-1FH是网卡复位端口。

  2.2 DMA数据通道

  RTL8019AS内部划分为远程DMA(RemoteDMA)通道和本地开关电源模块DMA(LocalDMA)通道两个部分。本地DMA完成控制器与网线的数据交换,远程DMA完成主处理器与网卡数据交换。单片机主处理器收发数据只需对远程DMA操作。接收数据时,RTL8019AS接收到的数据通过MAC比较、CRC校验后,由FIFO存到接收缓冲区,收满一帧后,以中断或寄存器标志的方式通知主处理器,主处理器通过远程DMA通道将其读出。当主处理器要向以太网发送数据时,先将一帧数据通过远程DMA通道送到RTL8019AS中的发送缓存区,然后发出传送命令;RTL8019AS在完成了上一帧的发送后,再完成此帧的发送。

  所谓的DMA就是直接内存访问(DirectMem2oryAccess)。普通的寻址方式是给出一个地址,然后取出对应的值。而在DMA方式下,我们指定一个寄存器地址,主机只要反复地读取或写入这个地址,就可以取出或写入大量的数据。网卡指定的远程DMA端口就是这个用途。设置好起始地址和读出的byte数后,我们反复读远程DMA端口,就可以将网卡里从网线收到的数据包,从0x400020x7fff的RAM区读出;反之,同样设置好起始地址和写入的byte数后,我们反复写远程DMA端口,就可以将数据发送到MTD2002网卡的发送缓冲RAM中,然后发出发送的命令,就可以把数据包发送到网线中。

  2.3 网卡的初始化过程

  复位,使RSTDRV先高后低,注意每一步都要有100ms的延时,以确保复位成功。然后进行热复位,就是先后读、写网卡复位端口。

  使CR=0x21,停止芯片运行,选择页面0。

  使RBCR1=0;RBCR0=0,将远程DMA操作的传输字节数清零。

  使PSTART=0x46;PSTOP=0x80;BNRY=0x46,设置接收开始页面、结束页面和边界页面。

  使IMR=0x0,清除中断屏蔽寄存器。

  使RCR=0x08+0x04,设置接收配置寄存器,允许接收多址和广播报文。

  使TCR=0,设置发送配置寄存器,使用默认配置。

  使DCR=0x80+0x40+0x00,设置数据配置寄存器,选择字节DMA。

  使ISR=-1,设置中断状态寄存器,清除所有已有中断。

  使用DMA方式,从0000H2000BH中取得本网卡MAC地址。注意,开关电源模块MAC地址每个byte都是重复一遍存放的,所以只要取单数1、3、5等byte就可以了。

  使CR=0x61,选择页面1。

  将刚才取得的MAC地址放入PAR0-5中。网卡检查接收到的包是否和PAR里MAC值匹配,然后决定收下或丢弃。所以,也可以任意设置这个PAR值,来伪造自己的MAC值。

  将MAR02MAR7全部设为0xFF,允许接收所有的多址数据包。

  使CURR=0x47,设置当前接收页面为0x47。

  使CR=0x22,启动网卡芯片,开始接收和发送过程。

  2.4 网卡工作接收和发送过程

  网卡RAM是以256byte为一页,是按页存储的结构,16bit的RAM地址高8bit又叫页码。网卡的16k的RAM地址从0x400020x7fff,从页0x40到页0x7f,一共有64页。64页被接收和发送数据包用。接收和发送都是以页为最小的单位进行的。接收缓冲区需要定义,剩下的就可以作为发送缓冲区。

  接收缓冲区由两个寄存器决定:PSTART(PageStartRegister)和PSTOP(PageStopRegister)。设置了接收缓冲区之后,这个缓冲区就形成了一个MTD2002循环队列。控制接收缓冲区的有两个寄存器CURR、BNRY。CURR是网卡写缓冲区的指针,指向当前要写的页;BNRY是读指针,指向用户已经读走的页。

  开关电源模块BNRY不可以超过CURR,否则没被用户读取的MTD2002数据就被覆盖了。用户设置完了开关电源模块CURR以后,就不用管它,MTD2002网卡接收到新的数据后,会自动修改它。用户读出数据后,要修改BNRY的值,以通知网卡该数据已经读出了。

  

网卡RAM区如图2所示,我们设置开关电源模块PSTART和PSTOP,就决定了MTD2002接收区域在46和7F之间,剩下6页作为MTD2002发送缓冲区,可以满足一次发送容量为1514byte的最大以太网数据包的要求。CURR初始值设为47,BNRY初始值设为46。当收到新的数据包时(例如3页),网卡将它们依次放到47、48和49页,开关电源模块CURR自动指向4A页。当我们读完这3页的数据包后,要将BNRY改为49,以通知网卡数据包已经读完了。

图解单片机网卡RAM区如何发送数据包0

  网卡芯片接收到以太网数据包后,存在CURR指向的页面中。一个数据包可以占据一页,也可以占据多页。在开关电源模块接收包的包头里,保存有该包的信息。包头格式如表1:

图解单片机网卡RAM区如何发送数据包1

  读完这个包头,我们就能知道本包的接收状态,包长度,以及下一个包的位置。在开关电源模块接收循环中,检查中断状态寄存器ISR状态,发现有新包来,先读取包头信息,接着按照包头指示读取全包,然后改写BNRY,再接着读下一个包,这样循环,直到达到CURR位置。注意,一个包有可能占据接收缓冲区的首、尾页面,此时须小心读取。[page]

  发送数据包比较简单,将准备好的数据用DMA传到发送缓冲区,然后设置发送长度到TBCR1和TBCR0中,再设置传输开始页面,即令TPSR=0x40,最后,使CR=0x26,就开始传送了。

  传送完成后要清掉中断状态寄存器ISR的发送完成标志。值得注意的是,发送包的包长度不能小于以太网规定的60byte,否则网卡不会将其发出。

  3 TCP/IP协议在单片机上的软件设计

  3.1 TCPIP协议栈和链路层格式

  Internet上使用的是开关电源模块TCP/IP协议簇,由下至上包含四层:数据链路层、网络层(IP)、传输层(TCP)和应用层。我们在MTD2002单片机上能实现的是数据链路层的功能,上层协议鉴于单片机有限的资源,只能实现部分功能。TCP/IP协议栈如表2:

图解单片机网卡RAM区如何发送数据包2

  数据链路层处于协议栈的最低层,传输以太网的物理传输帧,其帧格式如表3:

图解单片机网卡RAM区如何发送数据包3

  数据链路层是所有TCP/IP包的基础,所有它上层的包都被封装到链路层帧的数据段中。链路层就是MAC对MAC的通信。

  3.2 PING命令在单片机上的实现

  PING是网络层(IP层)的命令,网络层就是IP对IP之间的通信。主机对一个目标IP地址发出状态请求,后者发出回应,这样,就可以用来检查两者之间的线路是否畅通。这里涉及到两个网络层协议:

  ARP和ICMP。首先,网络中要知道目标IP的MAC地址,才能发送数据。为了获取该地址,我们向整个网络发送一个开关电源模块ARP广播包,询问该IP对应的MAC地址,然后目标IP应答,我们就从应答信息中得到MAC地址。其次,发送一个ICMP包,请求目标IP状态,目标IP回应,就完成网络连接测试。在我们的实验中,发出PING命令的是网络中的PC主机,接收信号并产生响应的是我们的单片机系统。我们假定单片机系统控制的网卡的IP为192.168.0.176。

  第一步,实现ARP协议。ARP协议是"AddressResolutionProtocol"(地址解析协议)的缩写,它的作用是将IP地址转换成物理地址(就是常说的MAC地址)。协议ARP的分组格式如表4:

图解单片机网卡RAM区如何发送数据包4 

  当单片机主处理器处理网卡收到的ARP广播请求时,如果发现是请求“192.168.0.176”的MAC地址,于是按要求打一个ARP应答包,将自己的MAC地址放到应答包中,发送回网络就完成了PING的第一步。注意,要在应答包尾加18byte的补丁,否则应答包长度不满足最小60byte的要求。

  第二步,实现ICMP协议。开关电源模块ICMP是“InternetControlMessageProtocol”(Internet控制消息协议)的缩写。用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于MTD2002用户数据的传递起着重要的作用。

  ICMP是封装在IP协议中,所以有IP包头。

 

  ICMP协议结构如表5:

图解单片机网卡RAM区如何发送数据包5

  网络主机在收到ARP的应答包后,取出其中的MAC地址,然后向该开关电源模块MAC发出ICMP请求。主处理器处理该请求时,将请求包的标识和序列号对应填入ICMP应答包,其它部分按要求填写。校验和的计算有成熟的公式,容易计算,只要先把校验和部分置0,将包头的计算结果再填入校验和就可以了。

  最后将该ICMP应答包送入网络,这样就完成了PING的全过程。此时,发出PING命令的网络主机就会得到“Replyfrom192.168.0.176:bytes=32time<10msTTL=128”的信息。

  4 串行数据与网络的数据交换的讨论

  网络层之上,有两种传输层协议:TCP(Trans2missionControlProtocol)和UDP(UserDatagramProtocol)。对于数据传输要求高的场合,需要使用TCP协议作为双方通信方式,但此种方式较为复杂。而对于一些实时信号及其反向控制信号的传递,实现UDP协议就可以满足要求了。表6是UDP协议结构:

图解单片机网卡RAM区如何发送数据包6
  当原始数据从串口送到到主处理器后,主处理器将其打包成UDP报文,发送到网络中。网络端监控主机接收并处理该UDP报文,然后将控制信息同样以UDP报文发出。主处理器把网络控制信号返回给串口。这样,我们在Internet中就可以方便地完成对现场串口数据源的监视和控制过程。[page]

  5 结语

  因为单片机对于各种电器设备有良好的接入和控制能力,所以,我们实现了开关电源模块单片机的网络接入功能后,就在MTD2002电器的硬件设备和网络之间建起了一道桥梁。通过它,可以实现对各种实时信号、仪器仪表、家用设施等目标的远程监视,在宏观上对各种设备统一管理,实现人与系统的和谐的交互。这必将大大提高工作效率,改善工作环境,提升人们的生产、生活水平。

关键字:单片机网卡  RAM区  数据包 引用地址:图解单片机网卡RAM区如何发送数据包

上一篇:类R—F转换频率测量温度方法详解
下一篇:详细介绍单片机应用技术的进展及动向

推荐阅读最新更新时间:2024-03-16 13:40

多线程技术在数据实时采集分析中的应用设计
   引言   数字接口设备是实现标准422串行总线到自定义串行总线转换的专用通信设备。数字接口测试系统根据数字接口设备的工作原理,输出422串行数据和自定义串行总线的控制信号(YCK,YZM)给数字接口设备,并对其输出的串行数据(YDATA)进行采集、存储、分析和处理,从而达到对被测设备进行检测的目的。本数字接口测试系统共提供了八个测试通道,每个通道的422串行总线和自定义串行总线的相关参数都可由测试人员通过应用软件进行设置。为方便对数据进行分析,同时在软件上约定了发送的数据格式为:AA xx 01 23 45 67 89 AB CD EF 01 23… 10,其中帧头为0xAA,帧尾为0x10,xx为发送计数器值,每发送一次
[工业控制]
多线程技术在数据实时采集分析中的应用设计
VoIP视频流质量的测量和监控的实例
 VoIP是一种正在形成的崭新技术,为了提高视频流的质量,需要对终端进行测量并监控抖动、数据包丢失及有效载荷的质量,本文介绍了几种观察的方法,重点介绍了如何评价缓冲器和网络的边界限制对视频质量的影响。   VoIP技术的传输要通过具有视频流的交换包网络,当今针对VoIP的标准还不多,因此要测量VoIP流的质量问题。在确定测量内容前,必须对定义VoIP流质量的基本特性有一个充分的了解。   与通过IP传输的数据不同,视频流质量需在现场,并且是在TV终端进行测量。终端视频的质量既非仅指网络带宽的某个功能也非仅指MPEG-2的某个功能。事实上,许多有关终端视频质量的问题是MPEG-2质量与确定性的IP包网络传输水平的
[测试测量]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved