单片机以太网通信模块的软件设计课题_第1页
单片机以太网通信模块的软件设计课题_第2页
单片机以太网通信模块的软件设计课题_第3页
免费预览已结束,剩余29页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于单片机以太网通信模块的软件设计第1章绪论1.1选题的目的与意义随着信息技术的飞速发展,In ternet应用己经深入到生活的方方面面。传统的 互联网应用以PC为中心,现在已开始转向以嵌入式设备为中心,许多嵌入式设备尝 试着接入In ternet。嵌入式系统己经广泛地渗透到航空、汽车电子、工业生产、通 信、消费电子以及人们日常生活的方方面面。IA (Internet Applianee)概念现在甚为流行,这表明互联网应用进入嵌入式互联网的时代己经来临。中国计算机学会(China Computer Federation )于1999年6月举行了 “嵌入 式系统及产业化在中国的发展前景”研讨会,

2、专家们探讨了嵌入式系统在当今计算 机工业中的地位及其网络化问题,认为下一代网络设备中嵌入式设备将大大增加, 互联网上传输信息的70%各会来自小型嵌入式系统。随着嵌入式系统更广泛的应用以及网络的进一步普及,嵌入式系统接入网络已 成为嵌入式系统应用的一个重要方向和必然结果。嵌入式Web服务器是嵌入式系统网络化应用的重要方面。把嵌入式系统作为 Web服务器与In ternet相连接很适合于 远程监控和生产过程控制等系统,通过特定的手段采集数据,利用远程浏览器通过 访问嵌入式Web服务器就可以直接监控现场设备的运行,提高生产效率和管理水平。在嵌入式系统上实现WEB服务器,不仅克服了嵌入式系统用户界面死

3、板甚至无界面 的缺点,同时也为嵌入式系统的远程应用提供了一种人机可交互的方便的操作方式, 从而使嵌入式MCI以 WEB艮务器的方式提供给客户端。在嵌入式系统网络化应用日趋流行的今天,设计和实现微处理器的网络接入是 一个很有现实意义的问题,可以实现基于 In ternet的远程数据采集、远程控制、自 动报警、上传/下载数据文件、自动发送 E-mail等功能,同时也为IST (Internet Sensor Technology网络传感器技术)、HVAC(家庭环境自动控制)、局部环境自动监 测、智能小区管理、网络自动抄表等技术的应用与发展提供技术保证。8051系列微处理器被广泛应用于从军事、自动控

4、制到PC机上的键盘上等各种应 用系统中,很多制造商都可提供 8051内核系列单片机,像Intel、Philips、Atmel、 Siemens等。这些制造商给51系列单片机加入了大量的性能和外部功能,像I2C总线接口、模拟量到数字量的转换、看门狗、PWM输出等,更加丰富了 8051单片机的功能和外围接口。不少芯片的工作频率达到40MHz工作电压下降到1.5V,由于这些功能都是基于同一个内核,使得 8051单片机很适合作为厂家产品的基本构架。同 时由于基于8051系列微处理器的硬件系统价格低廉,因此对于那些需要开发低成本产品的项目来说是一种不错的选择。而伴随着In ternet遍布于全世界的每个

5、角落,对于大量低端的以8051系列微处理器为核心的小型嵌入式设备来说,把其作为一个简单的WEB服务器,借助于In ternet来传送各种测量和控制信息,可以使人们在任何时候,任何地方实时监控 现场设备和数据,还可以在远方对现场设备进行诊断和软件升级,具有快速、方便、 可靠的特点。因此单片机如何控制以太网网卡控制器进行数据传输,如何嵌入TCP/IP协议使其连接到互联网,这些都具有深远的意义。1.2本课题在国内外的发展现状近几年来,国外投入嵌入式In ternet研究的公司逐渐增多,参与研究的公司规 模差异也越来越大,大的如 Philips、Microsoft、NEC Motorola 等公司,小

6、的则 是一些刚刚成立的高科技公司。下面主要介绍一些国外公司在嵌入式In ternet领域的研究状况。1)iReady公司致力开发各种TCP/IP堆栈处理器硅片解决方案。它己成功开发TCP/IP堆栈技术,这种独特的技术可提供全面的传送卸载支持,确保以太网网络可 以发挥极高的性能。多家公司已获许可使用iReady的硬件加速TCP/IP堆栈技术,有关公司包括 Toshiba、Seiko Instruments 、Sony 及 Agilente Seiko 公司在此基 础上推出IC芯片S7600A芯片,将TCP/IP协议栈用硬件方法予以实现。2) Accelerated Technologies 公司

7、开发的 Nucleus Plus 实时核心软件,提供 了完整的TCP/IP协议栈,包括全部源程序(称为 Nucleus Net,价格约为14995美 元)。3)美国 EmWar公 司提出嵌入式微互联网 EMI( Embedded nternet Tech no logy)运行技术,即嵌入式微型网络技术,将串口设备接入In ternet,实现基于In ternet的远程数据采集、智能控制、上传/下载数据文件等功能。松下电工的家庭网络中间 件,核心技术即采用的EmWar公司开发的EMIT构架。4)在工业测控领域,1999年成立的“工业以太网协会” (IEA )正在积极致力于工业以太网现场总线的研究

8、开发,美国OPT022公司采用嵌入式In ternet技术,研制开发了“以太网I/O系统” -SNAPI/O系统,成功应用于工业控制过程、楼宇智能 化监控等多项工程中。此外,惠普公司应用IEEE1451.2标准,生产的嵌入式以太网控制器具备10-BaseT接口,运行FTP/HTTP/TCP/UD协议,应用于传感器、驱动器 等现场设备。而国内嵌入式In ternet技术的研究才刚刚起步,有一些公司也正在积极研究嵌 入式In ternet技术,但成果没有国外的丰硕,且大多停留在理论阶段。对工业控制 网络领域的理论研究主要局限于现场总线网络上,对建立工业以太网控制网络还未 进入到实质研究阶段。在产品

9、开发方面,北京英贝多公司研发出了基于芯片的微型 In ternet网关和瘦服务器,为迎接In ternet向嵌入式领域发展的第三阶段做好基础 性准备。另外武汉力源公司也推出了专用网络接口芯片PS2000以及一款用于连接电子设备和In ternet网络的集成电路 Webchip,其内部固化了 MCINET协议,该协议 与EmGatewayffi OSGI协议兼容。这种应用系统通过 Web chip网络芯片与 Gateway 连接,再接入In ternet。目前国内己经有基于该芯片的相关应用开发。可见,如何 通过互联网共享以“微控制器” (MCU, Micro Con troller Unit )

10、为中心的小型嵌入 式设备相关的信息,也即如何使 MCU成为Web服务器是当今嵌入式研究领域中的一 项重要内容。1.3本课题要解决的主要问题本文主要是针对以RAT8019AS单片机为硬件平台的中低档嵌入式系统,用C5l编程语言开发一个适合小型系统使用的轻型嵌入式TCP/IP协议。具体的工作主要有:(1) RTL8O19AS的驱动编程,为TCP/IP协议栈的开发提供易用的接口。(2) 从实际成本出发,本文采用低档单片机直接控制网卡芯片,在单片机中实现 TCP/IP协议的方案。(3) 在本文对网络协议做了详细的阐述,特别是本设计中需要进行设计的几个协 议,IP协议、ARP协议、UDP协议。 精简TC

11、P/IP协议的编程,这是本课题的重点所在。(5)联机调试,完成各层协议的测试。第2章TCP/IP协议TCP/IP协议即传输控制协议/网际协议是发展至今最成功的通信协议,它被成功应用于当今所构筑的最大的开放式网络系统In ternet之上就是其成功的明证In ternet最初的设计是为了满足美国国防部的需要, 今天In ternet已经发展得更加 商业化,更加面向消费者,尽管基本目的发生了改变,但其最初的所有质量标准(也就是开放式、抗毁性和可靠性)依然是必需的。这些特性包括可靠传输数据、自动检 测和避免网络发生错误的能力。TCP/IP是一个开放式的通信协议,开放性意味着在 任何组合间,不管这些设

12、备的物理特征有多大差异,都可以进行通信。本章主要介绍了 TCP/IP协议分层模型及其工作原理,并按照由下向上的顺序介 绍了 TCP/IP协议族中最重要的一些协议如 ARR IP、ICMR UDP TCP HTTP等。其中结合本课题的需要,重点介绍了 IP协议和TCPW议如同OSI参考模型,TCP/IP也是一种分层模型。它是由基于硬件层次上的四个概念性层次构成,即应用层、传输层、IP层和数据链路层。图2.1给出了 TCP/IP的层次之间的传递对象概念性层次概念性层次结构图报文或字节流传输协议分组IP数据包特定网络帧图2.1 TCP/IP概念性层次结构2.1 TCP/IP分层模型的工作原理TCP/

13、IP协议是一个大的协议族,其中一些常用协议在TCP/IP分层模型中所处的 位置如表2.1所示。数据包在TCP/IP在协议栈中流动的时候,也是由上至下或由下至上,逐层进行 传输的。在TCP/IP参考模型中,每个实体和另一个系统的同层实体按协议进行通讯,而一个系统内实体和上下层间的通讯,则通过接口进行表2.1协议在TCP/IP分层模型中的位置应用层HTTP FTP Tel net E-mail DNS 等传输层TCPUDPIP层IP ICMP ARP数据链路层介质访问控制协议MAC,以太网协议物理层网路接口芯片不同系统间同层实体间的数据传输过程如图2.2所示图2.2数据包在TCP/IP分层模型中的

14、传输过程在整个协议层次结构中,通信协议使用了复用和分解的技术。发送方在报文中 加入报文的类型、选用的协议等附加信息,在接收方收到分组后,参考附加信息对 收到的分组进行分解,根据其中的协议类型选择相应的协议进行处理,图2.3是IP包的去复用过程。UDPW议TCPW 议ICMP协议IGMP协议ip模块到达的ip数据包图2.3 IP数据报的去复用过程2.2数据链路层协议数据链路层(Data Link Layer)是TCP/IP协议族的最底层,它负责接受IP数据报并把数据报通过选定的网络发送出去,或者从网络上接收物理帧,抽取出IP数据报,交给IP层。数据链路层一般可再细分为介质访问控制子层MAC口逻辑

15、链路控制子层LLGMAC子层的协议实现一般是由MAC接口芯片来完成的;而LLC子层的实现一般是由网络接 口芯片的驱动程序来完成的。除此之外,数据链路层典型的协议就是地址解析协议 ARP(Address Resolution Protocol) 。以太网的网络接口层支持的是 48位以太网地址,而网络层支持的是 32位的IP 地址。ARP协议的功能是为32位IP地址到对应的48位以太网物理地址之间提供动 态映射,将上层的仲地址与底层的物理地址进行绑定,它形成了只能使用IP地址的上层协议软件与只能使用物理地址的下层设备驱动程序软件之间的分界线。以 太 网 首 部位功能描述48以太网目的地址48以太网

16、源地址16以太网帧类型(ARP-0X0806IP-X0800 )以太网ARP字段16硬件类型(以太网-1)16协议类型(ARP-0X0806IP-X0800 )8硬件地址的长度(以字节数计算,ARP请求或应答为6)8协议地址的长度(以字节数计算,ARP请求或应答为4)16操作码(ARP请求1,ARP应答2)6发送端以太网地址4发送端的协议地址(IP地址)6目的端以太网地址4目的端的协议地址(IP地址)图2.4 ARP报文格式图当某主机要向以太网中另一台主机发送IP数据时,它首先根据目的主机的IP地址在ARP高速缓存中查询相应的以太网地址,ARP高速缓存是主机维护的一个IP 地址到相应以太网地址

17、的映射。如果查到匹配结点,贝U相应的以太网地址被写入以 太网帧首部,数据包被加入输出队列等候发送。如果查询失败,APF会先广播一个询问目的主机硬件地址的APR报文,等到收到回答后再将数据包发送出去。 APR包格式 如图2.4所示。2.3 IP层协议IP层主要提供传输层数据分片、封装和路由功能以及控制报文的生成与传送服 务。IP层是TCP/IP协议族的核心。IP层的主要协议是网际协议IP(InternetProtocol)和网络控制报文协议 ICMP(I nternet Con trol Message Protocol) 。IP协议提供了一种不可靠的、尽最大努力传送的、无连接分组传送服务。所谓

18、 不可靠,指的是不能保证正确传送,分组可能丢失、重复、延迟或不按序传送,而 且服务不检测这种情况,也不通知发送方和接收方。所谓无连接,是指每个分组都 是独立处理的,可能经过不同的路径,有的可能丢失,有的可能到达。所谓尽最大 努力传递,指的是协议栈软件尽量传送每个分组,只有当资源用尽或底层网络出现 故障时,才会出现不可靠服务。2.3.1 IP首部结构IP数据报的首部格式如图2.5所示。普通的IP首部长为20个字节,除非含有 选项字段。015 16314位版本4为首部长度 8位服务类型(TOS)16位总长度(字节数)20字节16位标识3位标志13位偏移8位生存时间(TTL )8位协议16位首部效验

19、和32位源IP地址32位目的IP地址选项(如果有)数据图2.5 IP数据报的首部格式IP数据报首部各数据域的含义分析如下: IP版本号:目前的协议版本号是 4,因此IP有时也称为工Pv40 IP协议的 下一个版本是Ipv6,这也是当今互联网界研究的热点。首部长度:指明IP首部中32bit字的数目,包括任何选项。由于它是一个 4 比特的字段,因此IP首部最长为60个字节。.服务类型:TOS(Type of Service)指服务是否是最小时延,最大吞吐量,最 高可靠性,或最小费用之中的一种。目前大多数TCP/IP栈的实现都不支持TOS特 性。总长度:总长度字段是指整个IP数据报的长度,以字节为单

20、位。利用首部 长度字段和总长度字段,就可以知道 IP数据报中数据内容的起始位置和长 度。由于该字段长16比特,所以IP数据报最长可达65535字节。标识:标志字段唯一的标志主机发送的每一份数据报, 通常每发送一份报文, 它的值就会加1。标志和片偏移:这两个数据域主要用于 IP数据报的分片。生存时间TTL:生存时间字段 TTL(time-to-live) 设置了数据报可以经过的 最多路由器数,它指定了数据报的生存时间。协议字段:该字段表明IP数据报所采用的上层协议的类型。IP数据报的去 复用就是根据该协议字段进行的。首部校验和:首部检验和字段是根据 IP首部计算的检验和码。为了计算一 份数据报的

21、IP检验和,首先把检验和字段置为0。然后,对首部中每个16bit 进行二进制反码求和(整个首部看成是由一串16bit的字组成),结果存在检 验和字段中。它不对首部后面的数据进行计算。当收到一份IP数据报后,同样对首部进行校验。由于接收方在计算过程中包含了发送方存在首部中的 校验和,因此,如果首部在传送过程中没有发生任何错误,那么接收方计算 的结果应该为全1。如果不是全1(即校验和错误),那么IP就丢弃收到的数 据报,但是IP层并不生成差错报文,而是由上层协议去发现数据报的丢失 并进行重传。232 ICMP协议简介最初设计的ICMP仅仅为了路由器向主机报告投递出错原因,但发展到现在ICMP 在两

22、台主机上的协议软件之间能提供了通信,因此产生了多种ICMP报文。尽管每个ICMP报文有自己的格式,但它们都以相同的三个字段开始:比特整数的报文类型 (TYPE)字段用来标识报文;一个 8比特的代码(CODE字段提供有关报文类型的进一 步信息,以及一个16比特校验(CHECKSU字段。各种报文类型如下图2.6所示。类型字段ICMP报文类型0回送应答3目的地不可达4源站抑制5重定向8回送请求11数据报超时12数据报参数错13时间戳请求14时间戳应答17地址掩码请求18地址掩码应答图2.6 ICMP报文类型2.4传输层协议传输层(Transport Layer):传输层为其上层运行的应用层协议提供不

23、同层次的 端到端的通信服务。TCP/IP协议模型定义了两个传输层协议:传输控制协议TCP(Transmission Control Protocol) 和用户数据报协议 UDP(User Datagram Protocol)。UDP提供无连接的、开销最小的、快速但不可靠的端到端通信服务。主要应用于 三个领域:1) 依赖广播方式传输的 TCP/IP控制应用,例如域名解析服务DNS引导协议BOOTP 口动态主机配置协议DHCP等;2) 有规则重传信息的面向网络的服务,例如路由信息协议RIP和简单网络控制协议SNM等;3) 对一传输实时性和效率要求高且对分组丢失不敏感的Web多媒体业务。TCP为应用

24、层协议提供了面向连接的、可靠的服务。应用于数据传输量大且可靠 性要求高的业务,例如远程通信网络协议Telnet、文件传输协议FTP简单邮件传输协议SMT味口超文本传输协议HTTP等。TCP全权负责确保所有数据段都已安全正确 地到达了目的端,并且能重组成正确的序列。TCPW议包括:面向连接的服务、分组确认、差错检测、分组重传、分组排序和流量控制。2.4.1 UDP 首部UDPW议首部(包含UDP伪首部)的各字段如图2.7所示。32位源IP地址UDP伪首部32位目的IP地址08位协议16位UDP长度16位源端口号16位目的端口号16位UDP长度16位UDP效验和数据填充字节(0)图2.7 UDP首

25、部格式UDP首部各字段的含义:源、目的端口号:端口号是用来区分同样使用 UDP协议的不同发送进程和接收 进程的。 UDP长度:UDP勺长度字段指的是UDP首部和UDP数据的总长度。 UDP校验和:UDP勺校验和不同于仲校验和,它覆盖 UDP首部和UDP数据,但 校验算法跟IP校验是相同的。242 TCP首部TCP数据被封装在一个IP数据包内。首部的数据格式如下图 2.8所示,如果不 计任选字段,它通常是20个字节。015163116位源端口号16位目的端口号32位序列号32位确认序号4位首部长度保留(6位)URGACKPSHPSTSYNFIN16位窗口大小16位效验和16位紧急指针选项数据图2

26、.8 TCP首部格式TCP首部各字段的含义和功能:端口号:源端口号和目的端口号,用于寻找发端和收端的应用进程。这两个端口值加上IP首部中的源端IP地址和目的端IP地址组成四元组,可以唯一确定一个TCP连接。序号:TCP序号用来标志从TCP发端向TCP收端发送的数据字节流,它表示在 这个数据报文端中的第一个数据字节。序号是32bit的无符号数,序号计满后回绕到0开始计数。当建立一个新的TCP连接时,在发送出去的同步包中,序 号字段包含由这个主机选择的该连接的初始序号ISN(I ni tial Seque neeNumber),该主机要发送的第一个数据字节的序号为工SN加I。确认序号:确认序号包含

27、发送确认的一端所期望收到的下一个序号,确认序号 应该是上次已成功收到的数据字节序号加1。只有ACK标志为1时,确认序号字段才有效。今首部长度:该字段给出TCP首部中32bit字的数目。 6个标志位:这6个标志位用处很大。1) URG紧急指针有效。2) ACK确认序号有效。3) PSH接收方应该尽快将这个报文段交给应用层。4) RST重建连接。5) SYN同步序号用来发起一个连接。6) FIN发端完成发送任务。窗口大小:该字段TCP的滑动窗口协议中用到。标志着当前可用的数据发送、 接收缓冲区的大小。校验和:校验和覆盖了整个 TCP报文段,是一个强制性的字段,一定由发端计 算和存储,并由收端进行验

28、证。紧急指针:紧急指针是一个正的偏移量,和序号字段的值相加表示紧急数据的 最后一个字节的序号。TCP的紧急方式是发送端向另一端发送紧急数据的一种 方式。2.5应用层协议应用层(Application Layer):应用层功能有许多不同的形式,包含所有产生网 服务请求的高层协议,为希望通信的进程提供端到端的、与网络无关的传输服务。HTTP协议(Hypertext Transfer Protocol,超文本传输协议)是用于从 WWW(WorldWide Web)服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少由于HTTP协议是基于请求/响应模式的(相当于客户机/服务器

29、模式)。一个客户 机与服务器建立连接后,发送一个请求给服务器,请求方式的格式为:统一资源标 识符(URL)、协议版本号,后边是 MIME通用In ternet邮件扩充)信息包括请求修饰 符、客户机信息和其它可能的内容。第3章网络接口芯片的驱动在OSI网络模型中,数据链路层的逻辑链路控制子层(LLC)的部分工作是由网络 接口芯片驱动程序来做的,其它部分则集成在网络接口芯片中由硬件实现。本章首 先分析了 RTL8019AS的内部RAM结构,然后在此基础上分复位和初始化,数据包的 接收以及数据包的发送三个部分,重点分析了RTL8019AS的驱动程序的编写过程,并给出了相应的程序编制流程图。驱动程序封

30、装了网络接口芯片的底层操作,为以 后协议栈程序的编写带来了很大的方便。3.1 RTL8019AS的内部RAM吉构RTL8029AS和RTL8019AS勺内核其实是一样的,都是NE200C兼容的寄存器结构, 都有一样大小的RAM读取和操作的方法都是一样的。事实上对RTL8029AS勺驱动跟 RTL8019AS勺驱动除了 PCI接口配置部分不同外,其余 NE2000兼容的寄存器部分的 驱动都是一样的。下面只对 RTL8019ASS行讨论。D15D0PROMALIASEDPROM8K*16BUFFER RAMALIASEDPROMALIASEDBUFFER RAM0000H001FH4000H7FF

31、FH8000HC000H图3.1 RTL8019AS 的内部 RAM 结构图RTL8019AS有两块 RAM 一块16k字节的RAM的地址为0x40000x7fff,块 32字节的RAM勺地址为0x00000x00lf。其内部RAM勺存储是分页的,每 256个字 节称为一页。RTL8019AS勺内部RAM分布如图3.1所示。其16位内部RAM地址的高 8位表示的是RAM的页地址,例如:0x40000x40ff是一页,我们称该页为第 0x40 页。整个RAM空间的利用情况如表3.1所示:表3.1 RTL8019AS内部RAM 的利用情况页码地主范围附注00x0000-0x00ff可以使用0x01

32、-0x3F0x0100-0x3fff空,不能使用0x40-0x7F0x4000-0x7fff可以使用0x80-0xFF0x8000-0xffff跟 0x0000-0x7fff 的内容是一样的(不要使用它)其中,第0页的内存又叫Prom是Ne2000兼容的网络接口芯片都有的。Prom 实际上只有32字节,地址范围为 0x00000x00IF,其它地址0x00200x00FF存储 的内容跟0x00000x00lf部分是完全重复的。RTL8019A内部RAM勺0x00000x00仆 地址段存储的内容为:表 3.2 RTL8019AS 的内部 RAM 的 0x00000x001F 段的内容地址内容地址

33、内容0x0000以太网地址第1个字节0x0001以太网地址第1个字节0x0002以太网地址第2个字节0x0003以太网地址第2个字节0x0004以太网地址第3个字节0x0005以太网地址第3个字节0x0006以太网地址第4个字节0x0007以太网地址第4个字节0x0008以太网地址第5个字节0x0009以太网地址第5个字节0x000A以太网地址第6个字节0x000B以太网地址第6个字节0x000C-0x001F其他内容(不同公司生产芯片的定义可能不同)我们可以发现以太网地址被重复存储。这主要是为了适应RTL8019AS勺8位和16位的两种数据总线宽度。我们一般使用 8位的数据总线,一次传输一个

34、字节,而16位宽度的数据总线是一次传输2个字节,适合使用16位的单片机或DSP乍为处理对于己经做在网卡上的 RTL8019A睐说,它的prom是网卡在复位的时候从网卡 上的EEPRO一般使用93C46)里读出来的。网卡上的EEPRO一般是用来存储本网卡 的物理地址及其它一些配置信息的。因此可以直接读取RTL8019AS勺Prom来获得本地的物理地址。但是本地的物理地址最终是由RTL8019AS中的寄存器MARpMARIMAR2 MAR3 MAR4 MAR缺定,而不是 93C4Q也不是prom。而这几个寄存器的内容需要用户自己编写程序写入。一般可以读出Prom里的物理地址,然后写入到这 6个寄存

35、器里。如果没有使用93C46那么Prom也是可以不使用的,这时要在RTL8019AS 的初始化程序中指定一个物理地址。在本课题中,我虽然预留了 EEPROM(93C4的位 置,但为了节省资源没有使用,而是将本地的物理地址放在了RTL8019AS的驱动程序中,在其初始化的时候予以配置。RTL8019AS勺RAM中从0x4000到0x7fff共16k字节的这段内存是网络接口芯片用来作为接收和发送数据包的缓冲区用的。 该16k字节的RAMS际上是双端口的RAM 可以同时被网络接口芯片内部的本地总线读写,也可以被外部用户 (比如CPU读写, 相互之间不影响。但其内部的本地总线的读写优先级要比外部用户读

36、写的优先级高。BlDIRECnONAL PORTDMA SIGNALS图3.2 RTL8019AS内部RAM 的总线仲裁逻辑所谓16kB的双端口 RAM就是说有两套总线连结到该 RAM 一套总线A是网络接 口芯片的本地总线读写16kB的双端口 rain,另一套总线B是主处理器用来读写这 16k双端口 RAM的。总线A又叫Local DMA,总线B又叫Remote DMA在图3.2中,虚线框住的部分为 RemoteDMA也就是处理器对 RTL8019AS勺RAM 进行读写的总线,对8019来说就是ISA总线。没有框住的部分(左边的部分),就是 LocalDMA即网络控制器对其本身的 RAM进行读

37、写的总线。其中的地址总线没有画出 来,只画了数据总线。实际在 RAM的内部还有一些总线仲裁的逻辑,这里也没有画 出来。所谓总线仲裁的逻辑就是为了实现两套总线都能进行对RAM的读写而不互相 冲突,而进行的一些判断、控制逻辑。RTL8019AS勺Local DMA读写网卡RAM勺优先级比处理器读写其RAM勺优先级要 高的意思是:1 当两者都要请求控制总线时,Local DMA优先获得控制权。2. 高优先级的Local DMA可以中断RemoteDMA而RemoteDMA不能中断Local DMA3. 在RemoteDMA也就是处理器对网卡 RAMS写的过程进行中可以被 Local DMA 中断。L

38、ocal DMA中断Remote DMA然后进行Local DMA的数据传输,Local DMA传 输完毕之后继续刚才被中断的 Remote DMA以完成Remote DMA勺传输。Remote DMA 被打断多久的时间取决于 FTI, FT0的取值,其中FT1和FT0是RTL8019AS勺DCR配 置寄存器的位。在本课题中,主处理器用的是单片机,单片机的总线要比 RTL8019AS勺DMA总 线慢很多。RTL8019AS勺DMA总线大概在10Mhz而单片机的总线大概1Mhz所以在 Remote DMA勺过程中不需要特别的等待时序。3.2 RTL8019AS驱动过程3.2.1 RTL8019A

39、S 的复位及初始化RTL8019AS在进行具体操作之前,需要进行一系列的系统复位及初始化工作。其具体过程如下:1. 对RTL8019ASS行复位:这是RTL8019AS区动程序需要做的第一个内容,由 于我们将RTL8019AS设置为跳线模式,而不是即插即用的模式,RTL8019AS.PD中介 绍的PLUG and PLA丫的一些过程,我们不需要做,因为单片机的资源有限,能够减少的操作都尽量减少。对RTL8019AS勺复位端口(仆H)的读或写都将复位RTL8019AS RTL8019AS内部将执行复位过程,读写是随意的。2. 选择寄存器页面:向命令寄存器 CR(00H)写入21H,选择寄存器页面

40、0,以进 行后面的操作。3 .设置数据结构寄存器 DCR(0EH为49耳4 .设置方式状态寄存器TCR(0DH为00H5. 设置接收状态寄存器 RCR(0CH为1FH6. 划分缓冲区为接收缓冲区和发送缓冲区,并建立接收缓冲环。具体的工作是 设PSTAR1和PSTOF寄存器的值。7. 设置CR为61H,选择页面1。8. 设置RTL8019AS的物理地址寄存器,把 PAR0(0IH)-PARS(06H股置为合适的 物理地址。9. 设置当前页面寄存器 CURR(07H为PSTART+,即4DH10. 清除组播地址寄存器,即 MAR(08H)-MAR(OF为00H11. 设置CR为21H,选择寄存器页

41、面0。12. 清除中断状态寄存器ISR(07H)为OFFH13. 设置中断屏蔽寄存器IMR(0FH)为0FFH,即屏蔽掉所有的中断。14. 设置发送配置寄存器 TCR(0DH为00耳15. 设置CR为22H,芯片进入工作状态。驱动程序提供给上层协议的复位及初始化函数是In it8019()。3.2.2 RTL8019AS的数据包接收程序的编写RT18019AS的16k字节RAM地址范围为0x40000x7fff,共有64页,这64 页RAM是被用来接收和发送数据包的。一般把前面的12页用来存放发送的数据包,后面的52页用来存放接收的数据包。当然也可以配置成前面52页用来接收,而后面的12页用来

42、发送。或者也可以不使用那么多的缓冲区,比如只用32页来作为缓冲区,前面的6页用来发送,接下来的26页用来接收,而把空出来的 32页给单片 机使用,用来存储别的数据。ST-NIC8Uill«rILF 帕血 linrs:图3.3 RTL8019AS数据包接收缓冲示意图RT18019AS勺16k的RAM中哪些页被用来做接收缓冲区,哪些页被用来做发送缓 冲区由两个寄存器决定:PSTART(page start register)页起始寄存器PSTOP(page stop register) 页终止寄存器在设置了接收缓冲区之后,那么接收到的第一个数据包放在哪里呢 ?这是由CURR 寄存器决定的

43、。控制接收缓冲区操作的有两个寄存器:当前指针寄存器CURR 口边界指针寄存器BNRYCURR! RTL8019ASf缓冲区的指针,指向此时要写的页。BNIW是 读指针,指向用户已经读走的页。我们可以通过判断CURR旨针和BNRY旨针的距离确定是否收到新数据包,当 CURR和BNRY不等时说明收到新数据包。这里收到的数 据包中,在正常的以太包前面还有 4个字节的附加信息,尾部还有 4个字节的CRC 校验码。前4个字节的格式如下:Receive StatusNext Packet Poi nterReceive Byte Count 0Receive Byte Cou nt 1图3.4以太包前面4

44、个字节的含义第一个字节表示接收包的状态,其内容和RSR接收状态寄存器的值完全一样。第二个字节表示下一个包的存放页地址,读取该数据包后要根据该值更新BNRY寄存器。后两个字节表示数据包的大小。在接收一个数据包的时候要先读出这4个字节,通过第一字节的接收状态判断数据包接收是否正确,如果是正确接收的数据包,则 根据Receive Byte count 的值修改远程 DMA计数器RBCR、RBCR0勺值,读出整个 数据包。最后根据Next Packet Pointer 的值更新BNRY寄存器,以进行下一个包的 接收。对于数据包的接收,驱动程序提供给上层协议的接口函数有两个。一个是判断 有无数据包到达的

45、函数 B00L Packet Available(),如果有包到达则返回1,如果没有则返回0值。另一个重要的接口函数是 unsigned int Read Packet(void*buf),该函数的参数是指向接收缓冲区的指针,返回值是接收到数据包的大小,如果读取 失败则返回0值。Read Packet函数的工作流程如图3.5所示。图3.5数据包接收流程在读取数据包的时候可以根据编程的需要,读出包末尾的4字节CRC校验码或者不读出,而直接废弃掉。323 RTL8019AS的数据包发送程序的编写数据包的发送部分也提供两个接口函数,一个是 Send Packet Ready()用来查 询RTL801

46、9AS是否已将前面的数据包发送完,如果是则返回1,否则返回0值。该函 数实现起来很简单,只是查询一下状态寄存器即可。另一个发送函数Send Packet(void*buf ,int len)有两个参数,一个是指向发送缓冲区的数据指针,另一个是需要发送的数据包的长度。发送的过程分两步,首先将数据从系统内存通过RemoteDMA传到RTL8019AS勺发送存储区,然后进行 Local DMA#数据传到FIFO并 发送出去,其流程如下。图3.6数据包的发送流程第4章 精简TCP/IP协议的设计与实现4.1 TCP/IP协议的设计结构TCP/IP协议的设计是本课题的重点与难点所在。协议是用 C51语言

47、编程实 现的,采用的是Keil公司的KeilC51编译器。本章将重点给出TCP/IP协议的总 体设计及各个协议的实现过程。TCP/IP协议是一个由许多协议组成的协议族, TCP/IP协议具有很强的灵活 性、可扩展性和适应性,可以满足各种网络环境下的不同需求。 下面就是我设计 的TCP/IP协议所支持的协议及该协议栈的性能指标。 ARP协议:ARP协议用来做IP地址到物理地址的映射工作。如果把嵌入式 系统作为一个 Web!务器的话,远端的客户机只是知道服务器的冲地址, 这就需要ARP协议的支持来获得对应的服务器物理地址。 IP协议:IP协议是TCP/IP协议的基础。IP协议和UDP协议、TCP协

48、议结 合紧密,本协议的IP协议完成IP包的分解与复用,不支持IP分包功能, 支持主机路由选择。 ICMP协议:ICMP协议用来实现检测目的站的可达性和状态的功能。给客 户端提供一个检测网络状态的手段。 UDP协议:UDP协议提供不可靠的快速连接。在协议栈中实现这一功能主要是满足我们的协议栈用在工业以太网时的需求。局域网内通信不像跨路由器的远程通信,网络环境良好,丢包的现象较少发生。可靠性问题可以由UDF协、议之上的应用层的软件来保证。 TCP协议:TCP协议提供一种可靠的数据通讯。TCPW议是TCP/IP协议栈中必不可少的,也是最为复杂的一种协议。我们要实现的应用层的HTTP协议就是基于TCP

49、W议而实现的。本课题协议的设计就是基于 TCP/IP协议参考模型进行的,如图4.1所示。TCP/IP参考模型精简TCP/IP协议结构图4.1精简TCP/IP协议结构与TCP/IP参考模型的对比从图中可以看出,TCP/IP协议中各个模块分工明确,分别完成各自的功能, 所以在协议编程时可以有一个清晰的思路。设计协议时,只需按照要求调用驱动程序提供的封装好的标准接口函数即可,底层的细节问题这里无需考虑。TCP/IP协议栈与应用层程序的接口设计成类似于 Socket API标准的一种API接口,将 整个TCP/IP协议的内部实现封装起来,并提供给一个方便易用的编程接口。由于整个TCP/IP协议栈比较复

50、杂,在设计过程中需要编写很多的函数,这 就需要作一个系统的规划。在协议栈软件的设计中,在纵向层面上贯穿始终的有 两条主线:数据包的接收与协议解包过程,数据的协议打包与发送过程。下面我 将以软件流程图的方式分别讲述一下它们的工作过程。图4.2数据的协议打包与发送流程处理TCP包处理UD电处理ICMP包1V亠VT接收流程结束系统初始化NYY处理广播包N是否ARF包NN丢弃该包Y3处理ARP包是 TCP包 ?还是UD电?还是ICMP包?缓冲区是否有数据?是否广播包是否本地IP包图4.3数据包的接收与解包流程TCP/IP协议中一些很重要的参数是作为协议的全局参数 (可以是全局变量, 也可以是全局常量)

51、来定义的。通过修改这些全局参数,可以灵活的改变协议的 某些重要特性,比如设定本地IP地址、网关地址、网络掩码,修改发送、接收 数据缓冲区的大小,改变协议栈各种定时器的定时间隔等。这些修改可以动态的进行,就是在协议运行的过程中进行动态的设置。当然也可以静态的进行设置, 修改完后再重新编译协议即可。下面列举一些重要的全局参数,它们的定义都包 含在协议的头文件tcpip.h中。本地IP地址:#defi neMYIP_1192 /Local IP Address#defi neMYIP_2168#defi neMYIP_30#defi neMYIP_41子网掩码:#defi ne SUBMASK_1

52、#defi ne SUBMASK_2#defi ne SUBMASK_3#define SUBMASK 4255 /sub net mask2552550网关地址:#defi ne GWIP_1192 sta ndard gateway#define GWIP 2168 /used if Remote IP#defi ne GWIP_3#defi ne GWIP_4发送缓冲区的最大值:0 /is no part of our100 /local sub net#define MAX_TCP_TX_DATA_SIZE 512 接收缓冲区的最大值:#define MAX_TCP_RX_DATA_S

53、IZE 256 以太帧中的协议类型:#define FRAME_ARP 0x0806#define FRAME_IP 0x0800全局 Socket 状态变量 Socket Status :这一个字节的全局状态变量包含 4个状态位和4的错误标志位,分布如图4.4所示:Bit7SOCKERRBit6SOCKERRBit5SOCKERRBit4SOCKERRBit3SOCK_TX_BUF.RELEASEDBit2SOCK_DATAAVAILABLEBit1SOCK.CONNECTEDBit0SOCKACTIVE图4.4 Socket Status标志位分布图4.2 ARP协议的实现ARP协议功能是

54、进行IP地址与以太网地址之间的转换。因为我们在向对方 主机发送数据的时候,知道对方的IP地址,但可能并不知道其以太网物理地址, 而要想发送基于以太网的IP包就必须知道目的物理地址,这个任务就是由ARP协议来完成的。ARP的具体工作包括发送ARP青求和响应对方的ARP青求,以及 动态的维护一个ARP高速缓存。当TCP/IP协议的IP包发送之前需要填充IP头部和以太协议头部,即需要 填充目的物理地址,这时IP协议模块就会查询系统的 ARP高速缓存,看是否有 对应于目的IP地址的物理地址,如果有则直接将之填充到协议头部中。如果没 有找到,则会调用ARP协议模块以广播的形式发送 ARP即请求,同时打开

55、一个 ARP定时器,如果在规定的时间内没有响应的话,则将IP包以广播的形式发送出去。如果在规定的时间内收到对方的 ARP应答包的话,如果目的IP地址跟本 机IP地址一致,则取出ARP应答包的源物理地址填充到,等待发送包的目的物理地址字段。同时还要把该IP地址、物理地址对添加到系统 ARP高速缓存中。 如果收到一份目的端为本机的 ARP青求包后,ARP协议模块会把本机硬件地址填 充进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为2,然后调用网络接口芯片驱动程序提供的发送函数将该ARP应答包发送出去。ARP青求、应答包的头部格式如下,其中ETH_DATA_OF是以太帧的数据段相对偏移量。/ARP头部定义#define ARP_HARDW_OFSETH_DATA_OFS+0 / 硬件类型#defi ne ARP_PROT_OFSETH_DATA_OFS+2 / 协议类型#defi ne ARP_HLEN_PLEN_OFS ETH_DATA_OFS+4 /硬件地址长度#defi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论