TCPIP协议栈设计_第1页
TCPIP协议栈设计_第2页
TCPIP协议栈设计_第3页
TCPIP协议栈设计_第4页
TCPIP协议栈设计_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

TCP IPTCP IP 协议栈设计协议栈设计 作者姓名 专业名称 指导老师 摘要摘要 随着信息时代的信息大爆炸的到来 以及互联网络硬件 软 件的迅猛发展 网络用户呈指数增长 简单的传递内部少量信息 的方案已经不能够很好地满足现实的市场需求 越来越多的嵌入 式产品有了与 Internet 互连 进入互连网这个浩瀚的信息库的 要求 嵌入式 Internet 技术是一种将嵌入式设备接入 Internet 的技术 本论文简略的介绍了以太网控制芯片 RTL8019AS 的结构特性 和以太网的帧协议 用 PHILIPS 的 51 单片机 P87C52X2 控制 RTL8019AS 实现以太网通讯的硬件设计方案 并采用 C51 语言实 现嵌入式以太网协议 将 TCP IP 协议嵌入到单片机中 并进行 了系统的调试与验证 取得了满意的效果 本设计中的硬件设计简单易行 通俗易懂 能在很短的时间 内完成 且价格廉价 关键词关键词 RTL8019AS TCP IP 协议 51 单片机 以太网帧协议 AbstractAbstract Along with the information time information big detonation arrival as well as the internet hardware the software swift and violent development the network user assume the exponential growth The simple transmission interior few information plan already could not satisfy the realistic market well the demand more and more inserts the type product had has interlocked with Internet enters interlocks the net this vast database request Inserts the type Internet technology is one kind inserts the type equipment to turn on Internet the technology This paper brief introduction ethernet control chip RTL8019AS structure characteristic and ethernet frame agreement Controls the RTL8019AS realization Ethernet communication with PHILIPS 51monolithic integrated circuits P87C52X2 the hardware design proposal And realizes inserts the type Ethernet agreement with the C51 language inserts the TCP IP agreement to the monolithic integrated circuit in and has carried on the system debugging and confirmation has obtained the satisfactory effect In this design the hardware design simple and easy to realize easy to understand can complete in the very short time also the price is inexpensive Keywords RTL8019AS TCP IP agreement C51monolithic integrated circuit Ethernet frame agreement 目录目录 摘要摘要 I ABSTRACT II 目录目录 III 前言前言 1 1 硬件设计硬件设计 2 1 1 RTL8019AS 以太网控制器简介 2 1 1 1 芯片特性 2 1 1 2 内部结构 3 1 1 3 寄存器描述 4 1 1 4 内部 RAM 地址空间分配 7 1 1 5 I O 地址分配 8 1 2 PHILIPS 单片机 P87C52X2 8 1 3 接口电路设计 8 1 3 1 RTL8019AS 的工作方式选择 9 1 3 2 单片机口地址与 RTL8019AS 口地址间的映射关系10 2 协议简介协议简介 12 2 1 TCP IP 协议简介 12 2 2 以太网 ETHERNET 协议 14 2 2 1 协议简介 14 2 2 2 各层协议的封装格式 15 2 2 3 以太网数据帧的分用 18 3 程序设计程序设计 21 3 1 RTL8019AS 的以太网驱动程序 21 3 2 发送帧 35 4 软件的调试与验证软件的调试与验证 38 4 1 调试与验证步骤 38 4 2 实验仿真结果 40 结论结论 41 致谢致谢 42 参考文献参考文献 43 前言前言 越来越多的人已经认识到 PC 时代的到来 越来越多的嵌入式产品 走到了现实应用的前台 嵌入式产品从出生到繁荣一直秉承着与应用 紧耦合这个宗旨 过去他们基本上都是独立的工作 最多是通过 485 CAN 总线之类的互相交换信息 但随着信息时代的信息大爆炸的 到来 以及互联网络硬件 软件的迅猛发展 网络用户呈指数增长 这些简单的传递内部少量信息的方案已经不能够很好地满足现实的市 场需求 越来越多的嵌入式产品有了与 Internet 互连 进入互连网这 个浩瀚的信息库的要求 嵌入式 Internet 技术是一种将嵌入式设备接 入 Internet 的技术 利用该技术可以将 Internet 从 PC 机延伸到 8 位 16 位 32 位单片机 并实现基于 Internet 的远程数据采集 远程控 制 自动报警 上 下载数据文件 自动收发 E mail 等功能 大大扩 展 Internet 的范围和嵌入式产品触及的领域 在做毕业设计之前要做 的准备工作 学习 TCP IP 协议的知识 查阅相关资料了解 RTL8019AS 的详细情况 以及熟悉以前学过的单片机和 C 语言 广泛搜集相关资 料 为以后的设计工作打下基础 接着在指导老师的指导下 进行硬 件测试和可行性分析 选择设计的最佳方案 然后程序调试 顺利完 成论文的编写 通过指导老师的悉心指导和自己的努力 完成了毕业 设计的各项任务 基本实现了本次设计各项功能 论文正文主要包括 4 个部分 安排如下 第 1 部分简要介绍 RTL8019AS 单片机的基本信息以及硬件电路的 设计 第 2 部分是 TCP IP 协议的简单介绍 并着重阐述了以太网 Ethernet 协议的情况 第 3 部分给出了实现 51 单片机来控制 RTL8019AS 的驱动程序 第 4 部分主要是对本设计的软硬件的调试 给出了实验结果 最后论文对课题内容及成果进行了总结 1 1 硬件设计硬件设计 1 1 RTL8019AS 以太网控制器简介以太网控制器简介 RTL8019AS是台湾Realtek公司生产的ISA接口以太网控制器 是 一种高度集成以太网控制器 它能够简单的解答即插即用NE2000兼容 适配器 这种适配器具有二重和功率下降特性 通过三电平控制特性 RTL8019AS 是已制的对网络设备GREEN PC 理想的选择 全二重功能能 够模拟传播和接收在双绞线到全二重以太网交换机 这个特性不仅强 带宽从10 到20MBPS 而且避免了由于以太网频道争夺特性导致的读出 多路存取协议的问题 微软公司的即插即用功能能减轻用户较差的营 业收入而注意适配器资源 如IRQ 输入输出 和存储器地址等等 然 而 为了特殊的应用而得不到即插即用功能的兼容性 RTL8019AS 支 持JUMPER 和JUMPERLESS 选项 为了提供完全解决即插即用方案 RTL8019AS 在集成10BASET 收 发器 BNC和AUI 接口之间的自动检测功能 此外 8 条IRQ 总线和16 条基本地址总线为大资源情况下提供了宽松的环境 RTL8019AS 支持16k 32k 和64k 字节BROM 和闪存接口 它仍然 提供页面模式功能 这种功能能支持在仅16k 字节内存系统空间下的 4M 字节的BROM 此外 BROM 的无用命令被用来释放BROM 内存空间 RTL8019AS 用16k 字节SRAM 设计在单片芯片上 它的设计不仅提 供了更多友好的功能 而且节省了SRAM 存储资源 1 1 1 芯片特性芯片特性 100 pin PQFP RTL8019AS 软件兼容 支持 pnp 自动检方式 RTL8019AS 唯一的 支持以太网 II 和 IEEE802 3 10Base5 10Base2 10BaseT 软件兼容 8 位和 16 位的 NE2000 支持 jumper 和 jumperless 模式 支持微软 jumper 和 jumperless 模式的即插即用配置 支持 full duples 以太网到两倍频带宽 支持三种平下降方式 睡眠模式 功率下降有内部时钟运行 功率下降有内部时钟停止 改善效率的内置数据先取功能 支持 UTP AUI 和 BNC 自动检测 RTL8019AS 唯一的 支持 10BaseT 的自动极性改正 支持 8 条 IRQ 总线 支持 16 条 I O 基本地址选项 和额外 I O 地址输入输出完全解码方式 RTL8019AS 唯一的 支持到 BROM 的 16k 32k 64k 和 16k page 方式 到 256 页有 16k 字节 页 支持 BROM 删除程序后释放内存 支持存储器瞬时读写 RTL8019AS 唯一的 16kSRAM RTL8019AS 唯一的 使用 9346 64 16 bit EEPROM 存储资源配置和 ID 参数 为了制造便利有规划空白 9346 的能力 支持可编程输出的 4 诊断 LED 1 1 2 内部结构内部结构 RTL8019AS 内部可分为远程 DMA 接口 本地 DMA 接口 MAC 介质访问 控制 逻辑 数据编码解码逻辑和其他端口 内部结构如图 1 1 所示 图 1 1 远程 DMA 接口是指单片机对 RTL8019AS 内部 RAM 进行读写的总线 即 ISA 总线的接口部分 单片机收发数据只需对远程 DMA 操作 本地 DMA 接口是把 RTL8019AS 与网线的连接通道 完成控制器与网线的数 据交换 MAC 介质访问控制 逻辑完成以下功能 当单片机向网上发送数 据时 先将一帧数据通过远程 DMA 通道送到 RTL8019AS 中的发送缓存 区 然后发出传送命令 当 RTL8019AS 完成了上帧的发送后 再开始 此帧的发送 RTL8019AS 接收到的数据通过 MAC 比较 CRC 校验后 由 FIFO 存到接收缓冲区 收满一帧后 以中断或寄存器标志的方式通知 主处理器 FIFO 逻辑对收发数据作 16 字节的缓冲 以减少对本地 DMA 请求的频率 1 1 3 寄存器描述寄存器描述 RTL8019AS 中的寄存器根据地址和功能能够概略的分为两组 一组 对NE2000 另外一组对即插即用 第一组 NE2000 寄存器 这组寄存器包括寄存器的4 个页面 它们在CR 寄存器中通过PS0 和PS1 被选择 每一页面包括16 个寄存器 这些寄存器除了和NE2000 兼容外 RTL8019AS 为软件结构和为了增强特性还定义了其它一些寄存 器 各个寄存器的功能 CR 指令寄存器 00H Type R W 这个寄存器用来选择寄存器页面 使能够或者使不能够远程DMA 操作和命令操作 ISR 中断状态寄存器 07H type r w in page0 这个寄存器反映NIC 状态 主机读它来决定中断的原因 通过对 相应的位写1 来清除该位 它必须在上电源后清除 IMR 中断屏蔽寄存器 0FH Type w in page0 Type R in page2 所有的位斗时相应的IST 寄存器位 POWER UP 0 设置某一位会使 相应的中断打开 DCR 数据结构寄存器 0EH Type 2 in page0 Type R in page2 TCR 传输配置寄存器 ODH Type W in page0 Type R in page2 TSR 传输状态寄存器 04H Type R in page0 这个寄存器表明数据包传输的状态 RCR 接收结构寄存器 0CH Type W in page0 Type R in page2 RSR 接收状态寄存器 OCH Type R in page0 CLDA0 1 当前局部DMA 寄存器 01H 和02H type R in page0 通过读这两个寄存器来得到当前DMA 地址 PSTART 页面开始寄存器 01H Type 2 in page0 Type R in page2 该寄存器用来设置接收缓冲器的开始页面地址 PSTOP 页面停止寄存器 02H Type W in Page0 Type R in Page2 该寄存器设置接收缓冲器停止页面寄存器地址 在8 位方式下 PSTOP寄存器不应该超过0X60 在6 位方式下阿PSTOP 寄存器应该不超 过0 x80 BNRY 边界寄存器 03H Type R W in page0 这个寄存器是用来放置接收缓冲器的重写 它代表性的作用是作 为接收缓冲器 最后页面的指针 TPSR 传送页面开始寄存器 04H Type W in page0 用来设置传送数据包开始页面地址 TBCR0 1 传输字节计算寄存器 05HType W in page0 用来设置传输数据包的字节计数 NCR 冲突数寄存器 05H type R in page0 用来记录在数据包传送过程重的冲突节点数 FIFO 先进先出寄存器 06H Type R in Page0 这个寄存器允许主机检查在loopback 后的FIFO 内容 CRDA0 1 当前远程DMA 寄存器 08H Type R in Page0 这个两个寄存器包括当前远程DMA 地址 RSAR0 1 远程起始地址寄存器 08H Type W in Page0 这两个寄存器设置远程DMA起始地址 RBCR0 1 远程字节数寄存器 0AH Type W in Page0 设置远程DMA数据字节数 CNTR0 帧同步错误计数寄存器 0DH Type R in Page0 CNTR1 CRC错误数记录寄存器 0EH Type R in Page0 CNTR2 遗失数据包数记录寄存器 0FH Type R in Page0 PAR0 5 实际地址寄存器 01H 06H Type R W in Page1 这些寄存器包括以太网节点地址且用来对目标地址数据包进行比 较来确定接收或者拒绝接收 CURR 当前页面寄存器 07H Type R W in Page1 这个寄存器指出首先接收缓冲器页面地址 这个页面用来对数据 包的接待 MAR0 7 多点地址寄存器 08H 0FH Type R W in Page1 这些寄存器提供被CRC 逻辑变位无用的多点地址的滤波位 第二组 即插即用 PNP 寄存器 自动配置端口 三个8 位I O 口定义为PNP 读写操作端口 他们叫做自动配置端 口 如表1 1 表1 1 自动配置端口 即插即用寄存器通过要求的寄存器的首写地址访问 这个所要求 的寄存器在以下各段 对地址端口 中叫 寄存器索引 跟随在 READ DATA 端口的读数据或者WRITE DATA 端口的写数据 写数据到 ADDREES 端口可能由任何一个WRITE DATA 或者READ DATA 访问同一个 索引寄存器 在每一个访问之前而不需要对ADDRESS 端口写数据 地址端口仍然是初始密码的写目的地址 这个密码然后会被描述 即插即用寄存器分为卡片寄存器和逻辑装置寄存器 根据即插即 用的具体应用 一个PNP 卡片可能包括一个以上的逻辑装置 卡片寄 存器对于每一个卡片来说是唯一的 然而 逻辑装置寄存器对于每一 个在卡片上的逻辑装置来说是重复的 此外 所有卡片寄存器都是卡 片控制寄存器 而逻辑装置寄存器可被分为逻辑装置控制寄存器和机 构寄存器 RTL8019AS内部寄存器很多 在这里就不一一列出 本设计中主要 应用到的寄存器有 CR 命令寄存器 TSR 发送状态寄存器 ISR 中断状态寄存 器 RSR 接收状态寄存器 RCR 接收配置寄存器 TCR 发送配 置寄存器 DCR 数据配置寄存器 IMR 中断屏蔽寄存器 NCR 包发送期间碰撞次数 FIFO 环回检测后 查看FIFO内容 CNTR0 帧同步错总计数器 CNTR1 CRC错总计数器 CNTR2 丢包总计数器 PAR0 5 本节点MAC地址 MAR0 7 多播地址匹配 1 1 4 内部内部 RAM 地址空间分配地址空间分配 RTL8019AS内部有两块RAM区 一块16K字节 地址为 0 x4000 0 x7fff 一块32字节 地址为0 x0000 0 x001f RAM按页存储 每256字节为一页 一般将RAM的前12页 即0 x4000 0 x4bff 存储区 作为发送缓冲区 后52页 即0 x4c00 0 x7fff 存储区作为接收缓冲 区 第0页叫Prom页 只有32字节 地址为0 x0000 0 x001f 用于存储 以太网物理地址 要接收和发送数据包就必须通过DMA读写RTL8019AS内部的16KB RAM 它实际上是双端口的RAM 是指有两套总线连接到该RAM 一套总 线RTL8019AS读或写该RAM 即本地DMA 另一套总线是单片机读或写该 RAM 即远程DMA 1 1 5 I O 地址分配地址分配 RTL8019AS 具有 32 位输入输出地址 地址偏移量为 00H 1FH 其 中 00H 0FH 共 16 个地址 为寄存器地址 寄存器分为 4 页 PAGE0 PAGE1 PAGE2 PAGE3 由 RTL8019AS 的 CR Command Register 命令寄存器 中的 PS1 PS0 位来决定要访问的页 但与 NE2000 兼容的寄存器只有前 3 页 PAGE3 是 RTL8019AS 自己定义的 对于其他兼容 NE2000 的芯片如 DM9008 无效 远程 DMA 地址包括 10H 17H 都可以用来做远程 DMA 端口 只要用其中的一个就可以了 复位端口包括 18H 1FH 共 8 个地址 功能一样 用于 RTL8019AS 复位 1 2 PHILIPS 单片机单片机 P87C52X2 P87C52X2是80C51核心的8位单片机 其内部包含256字节RAM 32 个I O口 3个16位定时 计数器 一个6中断源4优先级嵌套中断结构 一个可用作多机通信 I O扩展或全双工UART的串行I O口以及片内振 荡器和时钟电路 此外 芯片的低静态功耗设计提供非常宽的操作频 率 甚至可低至0Hz 有两种由软件选择的节电模式 空闲模式和掉电 模式 空闲模式冻结CPU 但RAM 定时器 串口和中断系统仍然工作 掉电模式保存RAM的内容 但是冻结振荡器 导致所有其它的片内功能 停止工作 由于设计是静态的 时钟可停止而不会丢失用户数据 当 CPU唤醒时 可从时钟停止处恢复程序的执行 1 3 接口电路设计接口电路设计 本设计采用周立功单片机公司的嵌入式以太网网卡模块和单片机 教学实验箱DP 51PRO组成实验硬件平台 以太网控制器RTL8019AS 构成以太网卡接口具体电路原理图如图1 2所示 其中RTL8019AS 的 数据线SD0 SD7 与8051 的AD0 AD7 P0 口相连 地址线A0 A4 与 8051 的A0 A4 P0 口锁存后的信号连接读写信号经GAL16V8 产生 RTL8019AS 的基地址为0 x5000 按照下图电路连接后当访问地址的范 围为0 x5000 0 x501F时 8051实现对RTL8019AS 读写操作 选用RTL8019AS 的原因 它是一种NE2000 类型的兼容网卡芯片 与其它网络芯片如DM9008 DP83901A 等兼容 软件移植性好 与51 单片机接口简单 不用转换芯片如PCI ISA 桥 价格低 货源好 较 长一段时间内不会停产 相对51单片机而言RTL8019AS 的带宽充裕 图1 2 1 3 1 RTL8019AS 的工作方式选择的工作方式选择 1 RTL8019AS支持3种工作方式 1 即插即用方式 I O 地址和中断都由操作系统管理 用户不必 过多干预 当然这种方式要耗费系统资源多一些 2 跳线方式 网卡的I O 地址和中断都由跳线决定 3 免跳线方式 网卡的I O 和中断由外接的E2PROM 93C46 中的 内容决定 在这三种方式里 我们的设计使用是第二种 跳线工作方式 第 一种方式对于51系列单片机来说无法实现 未用第三种方式又可以省 掉一片颗93C46芯片 不但减少了连线 而且降低了成本 RTL8019AS 的引脚悬空时输入状态为低电平 因为芯片引脚内部已经接了一个 100k 的下拉电阻 2 I O 地址 RTL8019AS 的第65 脚JP 决定网卡的工作方式 本设计中JP 脚 接高电平 VCC 即使用跳线方式 此时可以省掉93C46 芯片 此 时 RTL8019AS 的I O 地址由引脚85 84 82 81 IOS3 IOS0 决定 本设计中因为IOS3 IOS0 都悬空 选择的基地 址为0300H 3 中断 芯片的中断由引脚80 79 78 IRQS2 IRQS0 引脚决定 全部 悬空时 选择IRQ0 考虑到单片机的资源比较紧张 我们的单片机程 序设计中没有使用中断方式而使用的查询方式 4 网络接口类型 由74 77 PL0 PL1 引脚决定 使用自动检测 设计中 64 脚AUI悬空 使用RJ45 接口 5 BROM 设计中未用BROM 引脚72 71 69 68 67 BS4 BS0 悬空即可 6 总线模式 RTL8019AS 的IOCS16B 引脚通过一个27K 的电阻拉低 使得 RTL8019AS 工作在8位数据总线的模式 1 3 2 单片机口地址与单片机口地址与 RTL8019AS 口地址间的映射关系口地址间的映射关系 1 RTL8019AS 的基地址与口线的关系 SA0 SA19为网卡的地址线 我们使用RTL8019AS 的基地址为 0300H 031FH 转换为二进制如表1 2 表1 2二进制表 可以看到 从A19 A5 全部地址线除A9 A8 接高电平外 其余 全接地 即是固定的000000000011000 2 MCU口线与RL8019AS口线的连接关系 设计中使用单片机地址线的A0 A4 分别接到RTL8019AS 的地 址线SA0 SA4上 两者的对应关系如表1 3 表1 3对应关系表 3 单片机的I O地址与RTL8019AS的I O地址之间的映射关系 单片机对RTL8019AS寻址的口地址0 x5000 可以得到如下当单片 机的口地址为0 x5000时 将选中网卡的I O地址空间 映射关系如表 1 4 表1 4 映射关系表 为了方便操作 在程序里用宏定义reg00 reg1f来对300H 31FH端 口 以简化对地址的操作 define Reg00 XBYTE 0 x5000 300H define Reg01 XBYTE 0 x5001 31FH define Reg02 XBYTE 0 x5002 define Reg1f XBYTE 0 x501F 31FH 其中 Reg01 Reg0f 分别对应RTL8019AS 内部的寄存器 Reg10对 应RTL8019AS进行DMA读写 2 2 协议简介协议简介 2 1 TCP IP 协议简介协议简介 TCP IP TransmissionControlProtocol InternetProtocol的简 写 中文译名为传输控制协议 互联网络协议 协议是Internet最基本 的协议 简单地说 就是由底层的IP协议和TCP协议组成的 1990 年以前OSI 开放式系统七层模型在数据通信和互联网文献中 占据主导地位但随着互联网技术的发展这种模型并没有成为最终的标 准而TCP I P 协议族却越来越流行并在实际的使用中得到不断的测试 和完善以至于在商用体系结构中成为占据主导地位的协议族我们针对 TCP IP 协议族在实验中提供了一个简单实例 TCP IP 协议是一套把因特网上的各种系统互连起来的协议组 保 证因特网上数据的准确快速传输 参考开放系统互连 OSI 模型 TCP IP 通常采用一种简化的四层模型 分别为 应用层 传输层 网 络层 链路层 图 2 1 图2 1 TCP IP 协议族参考模型 1 链路层 也称数据链路层或网络接口层 通常包括操作系统中 设备的以太网驱动程序和计算机中的物理接口 网络芯片 物理接口实现数字信号与模拟信号的相互转化 发送数据时将数 字比特流转化为模拟信号 接收数据正好相反 以太网驱动程序是链路层物理接口与网络层交互的软件接口 网 络层数据必须先交付给以太网的驱动程序 由它将网络层数据打包并 交付给物理接口 完成数据发送 反之 以太网驱动程序在接收到数 据时 要按照应用层可以接收的形式进行处理并交付 2 网络层 又称作互联网层 处理分组在网络中的活动 例如分 组的选路 在 TCP IP 协议族中 网络层协议包括 IP 协议 网际协议 ICMP 协议 Internet 互联网控制报文协议 以及 IGMP 协议 Internet 组管理协议 IP 协议提供了一种不可靠的 无连接的服务 即 IP 不提供差错 检验和跟踪 只是尽最大可能发送数据 不可靠的意思是不能保证 IP 数据报能完全正确地到达目的地 任何要求的可靠性必须由上层来提 供 如 TCP 协议 无连接的意思是 IP 并不维护任何关于后续数据报 的状态信息 因为每个数据报的处理都是相 互独立的 可以不按发送顺序接收 如果一信源向相同的信宿发送两 个连续的数据报 先是 A 然后是 B 每个数据报都是独立地进行 路由选择 可能选择不同的传输路线 因此 B 可能在 A 到达之前先 到达 ICMP 协议通常被认为是 IP 层的一个组成部分 分为差错报文和 查询报文两类 在 IP 数据报内部被传输 我们所涉及的是查询报文 如 PING 既是一个 ICMP 的查询报文 用来测试主机的可达性 3 运输层 主要为两台主机上的应用程序提供端到端的通信 运输层具有几种责任 1 创建进程到进程 程序到程序 的通信 TCP 和 UDP 都使用端 口号来完成 2 在运输层提供流控制和差错控制机制 TCP 提供全面的差错检验 机制 而 UDP 不提供流控 提供的差错检验机制的水平也较低 3 为应用程序提供连接机制 TCP 协议中 发送端建立与接收端 的连接 将上层协议传来的数据分为可运输的块并编号 逐个发送 接收端等待接收属于同一进程 由端口号标识 的所有 同单元 并交付给应用程序 UDP 协议不用建立连接 只从进程接收 数据 并不可靠的交给应用程序 在TCP IP协议族中 有两个不同的传输协议 TCP 传输控制协议 和UDP 用户数据报协议 TCP是一个面向连接的 可靠的运输协议 它使用滑动窗口协议完 成流控制 使用确认分组 超时和重传来完成差错控制 因此它为IP 服务添加了面向连接和可靠性的特点 TCP可以在两台主机之间提供高 可靠性的数据通信 它所做的工作包括把应用程序交给它的数据按照 对方主机的窗口分成合适的小块交给下面的网络层 确认接收到的分 组 设置发送最后确认分组的超时时钟等 由于运输层提供了高可靠 性的端到端的通信 因此应用层可以忽略所有这些细节 UDP则为应用层提供一种非常简单的服务 它只是把数据报分组从 一台主机发送到另一台主机 但并不保证该数据报能到达另一端 因 此任何必需的可靠性必须由应用层来提供 这两种运输层协议分别在 不同的应用程序中有不同的用途 这一点将在后面看到 4 应用层 负责处理特定的应用程序细节 几乎各种不同的TCP IP 实现都会提供下面这些通用的应用程序 2 2 以太网 以太网 Ethernet 协议 协议 2 2 1 协议简介协议简介 TCP IP 协议是一个比较复杂的协议集 在此 我们仅介绍其与编 程密切相关的部分 以太网上 TCP IP 协议的分层结构及其报文格式 我们知道 TCP IP 协议采用分层结构其分层模型及协议如表 2 1 表 2 1TCP IP 协议分层模型及协议 协议分为四层模型 程序中只涉及到了下面的三层 下面对这三 层协议的功能作一简要介绍 ARP Address Resolution Protocol 完成IP 地址到物理地址之 间的动态映射 对映射方法的要求就是高效 因为TCP IP 协议是为了 互联不同种类计算机而发明的 它的体系结构是分层的 ARP协议提供 的逻辑地址到物理地址的映射是为了保证层和层之间的独立性 使得 改变物理层的实现不会影响到网络层 IP 协议是TCP IP 协议中最核心的协议 因为所有TCP UDP ICMP 以及IGMP 数据都以IP数据报格式传输 IP 仅提供最好的传输服务 但不能保证数据报能成功到达目的地 任何要求的可靠性都需要上层 协议提供 TCP 和UDP 是IP 协议的上层协议 同属运输层 但两者提供的服 务不同 TCP 向应用层提供一种面向连接的 可靠的字节流服务 UDP 是一个简单的面向数据报的运输层协议 不提供可靠性 它只把应用 程序传给IP 层的数据发送出去 但并不保证它们的可达性 2 2 2 各层协议的封装格式各层协议的封装格式 当FTP 或HTTP 等应用数据使用TCP 协议传送数据时 数据被送入 协议栈中 然后逐个通过每一层直到被当作一串比特流送入网络 其 中每一层对收到的数据都要增加一些首部信息 TCP 传给IP 的数据单 元称作TCP 报文段或为简称TCP 段 IP 传给网络接口层的数据单元称 作IP 数据报 通过以太网传输的比特流称作帧 以太网数据帧的物理 长度必须在46 1500 字节之间 UDP TCP 使用首部中16 位的端口号表示不同的应用程序 由于UDP TCP ICMP 等协议都要向IP 传送数据 因此IP 必须在 其首部中加入表明数据所属的标识 而网络接口也要接收和发送IP ARP RARP 数据因此也必须在以 太网的帧首部中加入指明数据来源的类型域 这就是数据报文的封装 由下图可知应用层数据被逐层封装 直到数 据链路层 我们的设计中在发送数据时就要遵循这种思路 将待发送 数据逐层封装成以太网帧 下面就是本设计所涉及到的应用最广泛的以太网数据报文的分层 封装如图2 2所示 图图2 22 2 以太网协议 由于RTL8019AS 是一种10M 的网络芯片 所以下面所论 述的以太网均是指10MBPS 的以太网 不是100M 1000M 的以太网 以太网协议有两种 一种是IEEE802 2 IEEE802 3 还有一种是以太 网的封装格式 作为单片机来讲 实现一种就可以了这里介绍以太网 的封装格式 这里介绍以太网的封装格式 以太网的物理传输帧的封 装格式如下表2 2 表 2 2 以太网的物理传输帧的封装格式 前导字节由芯片本身产生 用于同步收发两方的时钟 以及指定 传输速率 我们不必理会 目的地址 DA 以太网数据帧传输的目的地址 为 48 位 6 字 节 二进制地址 如果数据全为 1 则该目的地址是以太网上的所有 网卡 源地址 SA 以太网数据帧传输的源地址 48 位 表明该帧的数 据的出发点 即发送端的网卡地址 为 6 个字节 帧格式 TYPE 类型字段 表明该帧数据的类型 不同协议的类 型字段不同 例如 IP 包的数据类型为 0800H ARP 包的数据类型 为 0806 具体的数据类型后面还有涉及 数据段 以太网规定整个数据包的最大长度不能超过 1514 字节 因此该段数据不能超过 1500 字节 校验及填充位 以太网规定数据包必须大于 60 字节 因此除去 必需的 DA SA 和 TYPE 14 字节外 还必须传输 46 字节的数据 当 数据段的数据不足 46 字节时 可以填充任何数值已补足 46 字节 另外以太网的冲突退避算法由硬件自动执行 也无须我们了解 因此 由以上介绍可知 真正需要我们要处理的数据段只有目的地 址 源地址 帧类型以及数据段四个段 最小为 60 字节 最大为 1514 字节 由于我们的设计是使用网络芯片 而不是使用网卡 这样也就简 化了接口电路 方便了操作 对网络芯片进行物理地址的设置后 它 可以接收三种地址的数据 发给自已地址的数据 广播地址的数据 多播地址的数据 在发送数据包时 必须将数据按照以太网的帧格式 进行封装 前导序列和以太网数据帧后的校验和由芯片自动添加 在 接收数据时 RTL8019AS 也会在接收数据最前面自动添加 接收状态 下一页指针 以太网帧长度 以字节为单位 三个数据成员 共 4 字 节 因此接收的数据帧并不是真正的以太网帧格式 但这样做会方便 对数据的操作 由于以太网帧 ARP 帧 IP 帧 TCP 帧 UDP 帧都有 固定的数据格式 所以可以依据其各自的帧格式定义成结构类型的数 据 例如 根据以太网的封装格式以及接收数据的特点 可以定义如 下关于以太网数据的数据结构 struct ethernet uchar RecStatus 接收状态 uchar NextPage 下一个页 uint length 以太网长度以字节为单位 uint DestMacId 3 目的网卡地址 uint SourceMacId 3 源网卡地址 uint NextProtocal 下一层协议 uchar packet 1518 包的内容 其中 前 4 个字节的数据是由 RTL8019AS 在接收数据后自动添加 的 这四个字节的数据在对接收的数据帧进行处理时 作用很大 2 2 3 以太网数据帧的分用以太网数据帧的分用 目的主机收到以太网数据帧时 数据就开始从协议中由数据链路 层向上升 同时会被剥离其中各层协议所加的首部 这部分工作是由 用户程序来完成的 RTL8019AS 仅负责把数据接收进其内部的数据缓 冲区 图 2 3 主程序可以按照以太网数据帧分用的思路进行编制 这部分程序 框架如下 if 有新数据包 if RxdNetBuff EtherFrame NextProtocal 0 x0806 这是 对 ARP 数据包的处理 表示收到一个 arp 请求包 if RxdNetBuff ArpFrame Operation 0 x0001 表示这是一个 ARP 请求 处理 arp 请求数据包 else if RxdNetBuff ArpFrame Operation 0 x0002 表示这是一个 ARP 回答 处理 ARP 应答数据包 else if RxdNetBuff EtherFrame NextProtocal 0 x0800 表示是一个 IP 数据包 else if RxdNetBuff IcmpFrame type 0 是一个 ping 的应答包 对 ping 应答处理 break case 6 表示是 tcp 协议 tcp 数据包处理 break case 17 表示是 udp 协议 udp 数据包处理 break default 即将单片机作为服务器端 初始化完成后使其处于监听状态 当 RTL8019AS 接收数据报后 会将数据放进芯片内部 RAM 这是由以太 网驱动程序负责的 主程序中通过读取 RTL801AS9 的寄存器判断是否 有新的数据报进入接收缓冲区 如果有 则程序会按照所接收数据帧 以太网首部中的帧类型分别进行处理 例如帧类型为 0 x0806 时 表明所接收到的数据报是一个 ARP 数据 报 这时主程序再判断 ARP 数据报的操作类型并作出相应处理 对于 IP 数据报 处理过程类似 数据帧将会根据 IP 协议的上层协议值分 别进行处理 3 3 程序设计程序设计 3 1 RTL8019AS 的以太网驱动程序的以太网驱动程序 所谓驱动程序是指一组子程序 它们屏蔽了底层硬件处理细节 同时向上层软件提供硬件无关接口 驱动程序可以写成子程序嵌入到 应用程序里 如DOS下的I O端口操作和ISR 也可以放在动态链接库里 用到的时候再动态调入以便节省内存 本论文所有程序采用C51语言编制 可读性强 移植性好 开发简 易 1 RTL8019AS 内部RAM 结构介绍 RTL8019AS有两块RAM 一块16k字节的RAM 地址为0 x4000 0 x7FFF 该地址为芯片内的存储地址 网卡芯片用它来存储转发数据 一块 32 字节RAM 地址为0 x0000 0 x001F 芯片内部地址空间的布如图3 1 所示 图3 1 由图3 1可见 可用的RAM空间仅有上面提到的两部分 从0 x00 0 xFF 的内存为Prom 是Ne2000兼容的网卡都有的 实际上 与其它地 址如0 x0020 0 x00ff 存储的内容是重复的 其中0 x00 0 x0B 工作于8位 DMA 模式 用于存放本节点MAC地址 奇偶地址内容是重复放置的 如 MAC地址52544C19F823存放在0 x00 0 x0B 中为 525254544C4C1919F8F82323 单地址和双地址内容是重复的 但为了 同时适应8 位和16 位的DMA 操作 一般使用偶数地址的内容 Prom 只保存上电时从93C46 中读出的MAC 地址 如果有93C46 的话 由于我们的设计中没有使用网卡和93C46 因此也可以不使用从地 址0 x0000 0 x0001F 的32 字节的Prom 而物理地址不是由Prom而是 PAR0 PAR5 寄存器决定的 因此不使用93C46 时可在程序中指定物理 地址 地址为0 x4000 0 x7FFF的16K存储区是分页的 每256个字节称为一 页 共有64页 程序设计中使用这块RAM 存储接收或发送的数据包 由于RTL8019AS 接收或发送的数据是按页存储的 如果某页没有完全 填满数据 则下包数据也不能继续使用该页 只能使用新的页 并且 数据是按页连续存放的 芯片页地址0 x40 0 x7f 代表的RAM空间是 0 x4000 0 x7fff 另外这16K 的RAM 可由用户进行配置 一部分用来存 放接收的数据包 一部分用来存储待发送的数据包 2 芯片的DMA操作和内部寄存器 芯片内部有一块双端口 16K字节的RAM 要接收和发送数据包都 必须对这块RAM 进行读写 并且需要通过DMA 方式进行读和写 双端 口是指两套总线连接该RAM 控制器通过总线A 对芯片内部的RAM进行 DMA 读写操作 为了区分主机和芯片硬件两个接口端 这种DMA 又称 Local DMA 而8051 通过总线B对芯片内部RAM进行DMA 读写操作 这 种DMA操作又称Remote DMA 实际上芯片内部有一些总线仲裁逻辑 负 责两套总线的管理 使它们能同时对RAM读写 而不产生冲突 DMA 操作的示意图如图3 2 图中虚线框内的部分为Remote DMA 对应8051对芯片的读写操作 remote DMA 需要主机的参与 主机只需 设定好读写的起始起址和长度后就可以读写芯片RAM 且每操作一次 RAM 地址自动加1 与普通的RAM 操作相比 处理速度要快很多 左边 部分是Local DMA 对应芯片对内部RAM 进行读写的总线 RTL8019AS 的local DMA 操作是由芯片本身完成的 只要主机给定待发送的数据 的起始页地址和数据长度并启动发送命令以后 数据的发送给可由硬 件收发电路负责完成 另外地址总线也没有画出 图3 2 8051侧的Remote DMA操作要比芯片的Local DMA操作慢很多 所以 在单片机的Remote DMA过程中不需要等待时序 8051 侧的Remote DMA 操作和芯片的Local DMA 操作可以同时进行 互不影响 但芯片的 Local DMA 操作优先级高 优先级高的含义是 Local DMA 和Remote DMA 同时请求控制总线时 Local DMA 获得 优先控制权 Local DMA 可以中断Remote DMA 反之不可以 在Remote DMA 过程中可被Local DMA 中断 Local DMA 传输完毕 之后可以继续被中断的RemoteDMA 操作 以完成Remote DMA 的传输 关于DMA 操作涉及的寄存器以及操作方法可以参考表3 1 下面 先给出NE2000 兼容的芯片中共有的寄存器列表 表3 1 寄存器列表 由表可见NE2000 兼容芯片中寄存器分为4 页 由于第四页寄存 器各种类型的芯片不同 此处未列出 只给出前三页 其中第0 页包 含地址复用的寄存器 即同一地址但读或写时的意义不同 第一页的 寄存器读写时意义相同 在对某一寄存器进行操作时 首先要明确该寄存器所属的页位置 并选定该页 然后才能对相应的寄存器进行操作 程序中使用的页选 择函数如下 函数原型 void page uchar pagenumber 参数说明 pagenumber 要选中的页 返回值 无 说明 该函数用来选中由参数所指定的页 void page uchar pagenum uchar data temp temp reg00 reg00 为命令寄存器CR 前面已经定义 reg00 temp pagenumber 6 图3 3 由图3 3可见 Local DMA 和Remote DMA 操作分别需要使用的寄 存器 Remote DMA 侧读写芯片RAM 时所用的寄存器包括两组 RSAR0 RSAR1 指定Remote DMA 操作的起始地址 RBCR0 RBCR1 指定读写RAM 的字节数 Local DMA 分为两类 Local DMA 发送寄存器 包括TPSR TBCR0 TBCR1 TPSR 指定发送页的地址 TBCR0 TBCR1 指定发送的字节个数 Local DMA 接收寄存器PSTART PSTOP CURR BNRY PSTART PSTOP指定接收数据的起始页和终止页 其中PSTART 指定 从这一页开始做为接收缓冲区 而PSTOP 指定从该页开始的页不能做 为接收缓冲区 例如当PSTART 0 x4c PSTOP 0 x80 时芯片使用地址 范围为0 x4c00 0 x7fff 的空间来存储接数据 CURR 是芯片写RAM 的指针 它指向当前正在写的页的下一页 BNRY 是读指针 指向最后一个已经读取的页 RTL8019AS 以太网控制器以存储器 16K 双口RAM 为核心 本地和 远端控制器并发操作 这种体系结构满足了数据带宽的需要 RTL8019AS 拥有控制 状

温馨提示

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

评论

0/150

提交评论