电子科学与技术单片机TCPIP论文初稿.doc_第1页
电子科学与技术单片机TCPIP论文初稿.doc_第2页
电子科学与技术单片机TCPIP论文初稿.doc_第3页
电子科学与技术单片机TCPIP论文初稿.doc_第4页
电子科学与技术单片机TCPIP论文初稿.doc_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

这是一份论文初稿直接交给老师会被骂个半死 谨记这是一份论文初稿直接交给老师会被骂个半死 谨记 摘要摘要 TCP IP 协议是目前网络上应用最广泛的网络传输协议 如果单片机能够用此协议 传输数据 那就意味着单片机控制的电子产品也能进入互联网 这将带来一系列好处 能进行远程控制 能够获得数据共享 对于实现基于 51 单片机的 TCP IP 数据传输 需要以单片机为载体 熟悉 TCP IP 协议栈 熟悉 keilc 编程 熟悉电子线路知识 通 过对 TCP IP 协议的研究和参考 uIP 协议栈 在单片机上对 uIP 进行了移植 最终实现 了计算机以 TCP IP 协议的通信方式对单片机进行了监控 设计过程中主要是构架 TCP IP 协议栈 编写网卡驱动程序 编写应用程序 此通信协议的特点是代码和 RAM 使用量较小 可用在对通信速度要求不高的电子设备上 因为以单片机为载体 所以 此通信协议无需太强调对速度的提高 反而应该把重点放在减少多余的功能 来减少 对 RAM 的使用 设计过程并没让单片机接入互联网 控制单片机是通过上位机在局域 网内对其进行连接的 关键词 关键词 嵌入式 单片机 TCP IP 协议 1 Abstract TCP IP is the most widely used protocol at the present network transport protocol If single chip can transmit data thought this protocol that means those electronics controlled by single chip can connect to the Internet This will get a series of benefits for remote controlling for data sharing and so on For realizing the TCP IP data transmission on single chip Need to be familiar with single chip familiar with TCP IP protocol stack and Keilc programming familiar with knowledge of electronic circuits For researching the TCP IP protocol and referencing the uIP protocol stack than transplanted the uIP on single chip Finally completed the computer communicating to single chip used by TCP IP This design is mainly on finishing the TCP IP protocol stack writing the driver of net chip writing application programs This communication protocol is characteristic of less code and RAM usage can using in the low speed requirements of the electronic Because of taking single chip as the carrier this protocol shouldn t be stressed on the speed of communication instead it should be focused on reducing redundant functions for reducing the use of RAM The design is not accessing the Internet it is controlled by computer using the 2 connection by LAN Keywords embedded system single chip TCP IP 目录目录 1 绪论绪论 1 2 TCP IP 协议协议 2 2 1 TCP IP 简介 2 2 2 TCP IP 的分层体系结构 2 2 3 TCP IP 协议族 3 2 4 IP 地址 子掩码 5 3 UIP 介绍介绍 6 3 1 U I P 协议栈及其体系结构 6 3 2 协议栈接口 7 3 2 1设备驱动程序接口 7 3 2 2应用程序接口 9 3 3 UIP 协议栈提供的主要接口汇总 9 4 UIP 在单片机上移植在单片机上移植 10 4 1 了解UIP 的的主循环代码架构并改写MAIN函数 10 4 2 仿照 UIP 1 0 UNIX TAPDEV C 写网卡驱动程序 12 3 2 1以太网的帧结构 12 4 2 2以太网的芯片 RTL8019 介绍 13 4 3 设置配置文件UIPOPT H UIP CONF H 17 5 基于基于 51 单片机的单片机的 TCP IP 协议通信协议通信 18 5 1 硬件原理图设计 18 5 2 主要代码文件说明 19 5 3 计算机以 TCP IP 协议通信方式监控单片机 20 6 6 结论 结论 21 3 参考文献参考文献 22 致谢致谢 22 附录附录 23 1 绪论绪论 现在互联网开始向物联网发展 几乎所有电子产品都有入网的必要性 一旦电子 产品能入网 就能做到对远在千里之外的电子产品进行控制 这将解决在某些恶劣环 境下由人亲自操作电子设备而带来的危险 而单片机自带的串行通信又因传输距离太 短而阻碍其应用范围 而且 TCP IP 已成为当今计算机网络最成熟 应用最广的互联协 议 Internet 采用的就是 TCP IP 协议 网络上各种各样的计算机上只要安装了 TCP IP 协议 它们之间就能相互通信 所以只要在单片机上实现居于 TCP IP 协议的通信 就 能让单片机控制的电子设备进入互联网 实现远程操作 数据共享 这里研究的 TCP IP 协议栈可在各种 8 位 CPU 上运用 设计过程在保留协议的基本构架的基础上尽 可能进行精简 以提高传输速度 并且对数据缓存进行压缩 以减少对单片机 RAM 的 使用 在国外已有专门机构对在嵌入式设备上实现 TCP IP 进行研究 例如由瑞典计算 机科学学院 网络嵌入式系统小组 的 Adam Dunkels 开发的 uIP uIP 协议栈是专门为嵌 入式系统而设计的协议栈 其源代码由 C 语言编写 并完全公开 还有 uC IP mew kip 是为为控制其设计的一个 TCP IP 协议栈 代码基于 BSD 很像所有其它栈 但对非 常小的覆盖范围功能有所减少 它当前为 Linux 和 DOS 目标而建 在国内 ZLIP 是专门 为 51 单片机设计的嵌入式 TCP IP 协议栈 可以在有操作系统和没有操作系统情况下运 4 行 具有代码量适中 运行速度快 用户接口简单 兼容 BSD socket 接口的特点 实 现了 TCP UDP ICMP ARP 协议 ZLWeb 实现了 HTTP 协议 支持多 TCP 连接 多 UDP 连接同时运行 可以用于 51 单片机 TCP IP 上网解决方案 但目前不管国内还是国 外在单片机 TCP IP 协议的研究上 都存在以下的问题 数据传输速度慢 对 RAM 的使 用量都大于单片机自带 RAM 要在单片机上实现 TCP IP 协议需要对计算机网络知识有 所了解 清楚理解 TCP IP 协议在计算机网络的位置和作用 深入了解 TCP IP 协议栈的 构成 对单片机结构功能熟悉 能驱动一般的以太网卡 掌握 C 编程 本文主要对 uIP 移植到单片机上进行研究 难点是了解 TCP IP 协议栈的构成和对网卡的驱动 在实现 计算机通过网络对单片机控制的电子设备进行监控的功能时还要对计算机进行相应的 配置 2 TCP IP 协议协议 2 12 1 TCP IPTCP IP 简介简介 TCP IP Transmission Control Protocol Internet Protocol 的简写 中文译 名为传输控制协议 因特网互联协议 又叫网络通讯协议 这个协议是 Internet 最基 本的协议 Internet 国际互联网络的基础 简单地说 就是由网络层的 IP 协议和传输 层的 TCP 协议组成的 TCP IP 定义了电子设备 比如计算机 如何连入因特网 以及 数据如何在它们之间传输的标准 TCP IP 是一个四层的分层体系结构 高层为传输控 制协议 它负责聚集信息或把文件拆分成更小的包 低层是网际协议 它处理每个包 的地址部分 使这些包正确的到达目的地 TCP IP 已成为当今计算机网络最成熟 应用最广的互联协议 Internet 采用的就是 TCP IP 协议 网络上各种各样的计算机上只要安装了 TCP IP 协议 它们之间就能相互 通信 运行 TCP IP 协议的网络是一种采用包 分组 交换网络 TCP IP 协议是由 100 多个协议组成的协议集 TCP 和 IP 是其中两个最重要的协议 TCP 和 IP 两个协议分别 属于传输层和网络层 在 Internet 中起着不同的作用 5 2 22 2 TCP IPTCP IP 的分层体系结的分层体系结构构 TCP IP 是一个分层体系结构 最高层 应用层为协议的最高层 在该层应用程序与协议相配合 发送或接 收数据 TCP IP 协议集在应用层上有远程登录协议 Telnet 文件传输协议 FTP 电子邮箱协议 SMTP 域名系统 DNS 等 它们构成了 TCP IP 的基本应用程序 高层 即传输层 其主要协议有 UDP user data protocol 和传输控制协议 TCP Transmission Control Protocol TCP 协议是在 IP 协议提供的服务基础上 支持面向连接的 可靠地传输服务 是负责聚集信息或把文件拆分成更小的包 这些 包通过网络传送到接收端的 TCP 层 接收端的 TCP 层把包还原为原始文件 UDP 协议时 直接利用 IP 协议进行 UDP 数据报的传输 因此 UDP 协议提供的是无连接 不保证数据 完整到达目的地的传输服务 由于 UDP 不使用很繁琐的流控制或错误恢复机制 只充 当数据报的发送者和接收者 因此 UDP 比 TCP 简单得多 低层 是网际协议 IP Internet Protocol 它处理每个包的地址部分 使 这些包正确的到达目的地 网络上的网关计算机根据信息的地址来进行路由选择 即 使来自同一文件的分包路由也有可能不同 但最后会在目的地汇合 TCP IP 使用客户 端 服务器模式进行通信 TCP IP 通信是点对点的 意思是通信是网络中的一台主机与 另一台主机之间的 TCP IP 与上层应用程序之间可以说是 没有国籍的 因为每个客 户请求都被看做是与上一个请求无关的 正是它们之间的 无国籍的 释放了网络路 径 才使每个人都可以连续不断的使用网络 许多用户熟悉使用 TCP IP 协议的高层 应用协议 包括万维网 www world wide web 的超文本传输协议 HTTP 文件传 输协议 FTP 远程网络访问协议 Telnet 和简单邮件传输协议 SMTP 这些协议通 常和 TCP IP 协议打包在一起 使用模拟电话调制解调器连接网络的个人电脑通常是 使用串行线路接口协议 SLIP 和点对点协议 P2P 这些协议压缩 IP 包后通过拨号 电话线发送到对方的调制解调器中 与 TCP IP 协议相关的协议还包括用户数据报协 议 UDP 它代替 TCP IP 协议来达到特殊的目的 其他协议是网络主机用来交换路由 信息的 包括 Internet 控制信息协议 ICMP 内部网关协议 IGP 外部网关协议 EGP 边界网关协议 BGP 6 2 32 3 TCP IPTCP IP 协议协议族族 之所以说 TCP IP 是一个协议族 是因为 TCP IP 协议包括 TCP IP UDP ICMP RIP TELNET FTP SMTP ARP TFTP 等许多协议 这些协议一 起称为 TCP IP 协议 以下是协议族中一些常用协议英文名称和用途 TCP Transport Control Protocol 传输控制协议 IP Internet Protocol 因特网协议 UDP User Datagram Protocol 用户数据报协议 ICMP Internet Control Message Protocol 互联网控制信息协议 SMTP Simple Mail Transfer Protocol 简单邮件传输协议 SNMP Simple Network manage Protocol 简单网络管理协议 FTP File Transfer Protocol 文件传输协议 ARP Address Resolution Protocol 地址解析协议 TCP IP 协议簇分为四层 IP 位于协议簇的第二层 对应 OSI 的第三层 TCP 位于协议簇的第三层 对应 OSI 的第四层 TCP 和 IP 是 TCP IP 协议簇的中间两层 是整个协议簇的核心 起到了承上启 下的作用 1 IP 网际协议 IP 是 TCP IP 的心脏 也是网络层中最重要的协议 IP 层接收由更低层 网络接口层例如以太网设备驱动程序 发来的数据包 并把该数据包发送到更高层 TCP 或 UDP 层 相反 IP 层也把从 TCP 或 UDP 层接收来 的数据包传送到更低层 IP 数据包是不可靠的 因为 IP 并没有做任何事情来确认数据 包是按顺序发送的或者没有被破坏 IP 数据包中含有发送它的主机的地址 源地址 和接收它的主机的地址 目的地址 高层的 TCP 和 UDP 服务在接收数据包时 通常假设包中的源地址是有效的 也可以这样说 IP 地址形成了许多服务的认证基础 这些服务相信数据包是从一个有 效的主机发送来的 IP 确认包含一个选项 叫作 IP source routing 可以用来指定 一条源地址和目的地址之间的直接路径 对于一些 TCP 和 UDP 的服务来说 使用了该 7 选项的 IP 包好像是从路径上的最后一个系统传递过来的 而不是来自于它的真实地点 这个选项是为了测试而存在的 说明了它可以被用来欺骗系统来进行平常是被禁止的 连接 那么 许多依靠 IP 源地址做确认的服务将产生问题并且会被非法入侵 2 TCP 如果 IP 数据包中有已经封好的 TCP 数据包 那么 IP 将把它们向 上 传送 到 TCP 层 TCP 将包排序并进行错误检查 同时实现虚电路间的连接 TCP 数据包中包 括序号和确认 所以未按照顺序收到的包可以被排序 而损坏的包可以被重传 TCP 将它的信息送到更高层的应用程序 例如 Telnet 的服务程序和客户程序 应用程序轮流将信息送回 TCP 层 TCP 层便将它们向下传送到 IP 层 设备驱动程序和 物理介质 最后到接收方 面向连接的服务 例如 Telnet FTP rlogin X Windows 和 SMTP 需要高度 的可靠性 所以它们使用了 TCP DNS 在某些情况下使用 TCP 发送和接收域名数据库 但使用 UDP 传送有关单个主机的信息 3 UDP UDP 与 TCP 位于同一层 但它不管数据包的顺序 错误或重发 因此 UDP 不 被应用于那些使用虚电路的面向连接的服务 UDP 主要用于那些面向查询 应答的服 务 例如 NFS 相对于 FTP 或 Telnet 这些服务需要交换的信息量较小 使用 UDP 的 服务包括 NTP 网络时间协议 和 DNS DNS 也使用 TCP 欺骗 UDP 包比欺骗 TCP 包更容易 因为 UDP 没有建立初始化连接 也可以称 为握手 因为在两个系统间没有虚电路 也就是说 与 UDP 相关的服务面临着更大 的危险 4 ICMP ICMP 与 IP 位于同一层 它被用来传送 IP 的的控制信息 它主要是用来提供 有关通向目的地址的路径信息 ICMP 的 Redirect 信息通知主机通向其他系统的更 准确的路径 而 Unreachable 信息则指出路径有问题 另外 如果路径不可用了 ICMP 可以使 TCP 连接 体面地 终止 PING 是最常用的基于 ICMP 的服务 5 TCP 和 UDP 的端口结构 TCP 和 UDP 服务通常有一个客户 服务器的关系 例如 一个 Telnet 服务进程 开始在系统上处于空闲状态 等待着连接 用户使用 Telnet 客户程序与服务进程建立 8 一个连接 客户程序向服务进程写入信息 服务进程读出信息并发出响应 客户程序 读出响应并向用户报告 因而 这个连接是双工的 可以用来进行读写 两个系统间的多重 Telnet 连接是如何相互确认并协调一致呢 TCP 或 UDP 连 接唯一地使用每个信息中的如下四项进行确认 源 IP 地址 发送包的 IP 地址 目的 IP 地址 接收包的 IP 地址 源端口 源系统上的连接的端口 目的端口 目的系统上的连接的端口 端口是一个软件结构 被客户程序或服务进程用来发送和接收信息 一个端 口对应一个 16 比特的数 服务进程通常使用一个固定的端口 例如 SMTP 使用 25 Xwindows 使用 6000 这些端口号是 广为人知 的 因为在建立与特定的主机或 服务的连接时 需要这些地址和目的地址进行通讯 2 42 4 IPIP 地址 子掩码地址 子掩码 目前 在 Internet 里 IP 地址是一个 32 位的二进制地址 为了便于记忆 将它 们分为 4 组 每组 8 位 由小数点分开 用四个字节来表示 而且 用点分开的每个 字节的数值范围是 0 255 如 202 116 0 1 这种书写方法叫做点数表示法 IP 地址可确认网络中的任何一个网络和计算机 而要识别其它网络或其中的计算 机 则是根据这些 IP 地址的分类来确定的 一般将 IP 地址按节点计算机所在网络规 模的大小分为 A B C 三类 默认的网络屏蔽是根据 IP 地址中的第一个字段确定的 以下只对 C 类进行详述 C 类地址的表示范围为 192 0 0 1 到 223 255 255 255 默认网络屏蔽为 255 255 255 0 C 类地址分配给小型网络 如一般的局域网 它可连接的主机数量是 最少的 采用把所属的用户分为若干的网段进行管理 C 类网络用前三组数字表示网络 的地址 最后一组数字作为网络上的主机地址 一个 C 类地址是由 3 个字节的网络地址和 1 个字节的主机地址组成 网络地 址的最高位必须是 110 即第一段数字范围为 192 223 每个 C 类地址可连接 254 台主机 Internet 有 2097152 个 C 类地址段 32 256 256 有 532676608 个地址 9 32 256 256 254 RFC 1918 留出了 3 块 IP 地址空间 1 个 A 类地址段 16 个 B 类地址段 256 个 C 类地址段 作为私有的内部使用的地址 在这个范围内的 IP 地址不能被路由到 Internet 骨干网上 Internet 路由器将丢弃该私有地址 IP 地址类别 RFC 1918 内部地址范围 A 类 10 0 0 0 到 10 255 255 255 B 类 172 16 0 0 到 172 31 255 255 C 类 192 168 0 0 到 192 168 255 255 子网掩码是一个 32 位地址 用于屏蔽 IP 地址的一部分以区别网络标识和主机标识 并说明该 IP 地址是在局域网上 还是在远程网上 用于子网掩码的位数决定 于可能的 子网数目和每个子网的主机数目 在定义子网掩码前 必须弄清楚本来使用的子网数 和主机数目 通过 IP 地址的二进制与子网掩码的二进制进行与运算进行定某个设备 的网络地址 也就是说通过子网掩码分辨一个网络的网络部分和主机部分子网掩码一 旦设置 网络地址 和主机地址就固定了 相对于使用子网掩码来识别网络地址 早期 的使用类别进行网络地址的分类存在着地址大量浪费的不足 10 3 uip 介绍介绍 3 3 1 1 u u I I P P 协议栈及其体系结构协议栈及其体系结构 uIP 由瑞典计算机科学学院 网络嵌入式系统小组 的 Adam Dunkels 开发 其源代码 由 C 语言编写 并完全公开 所有代码和相关说明文档可以到 uIP1 0 版本 u l P 1 0 是一个适用于 8 1 6 位机上的小型嵌入式 TCP IP 协议栈 简单易用 资源占用少是它的设计特点 其设计重点放在 IP ICMP 和 TCP 协议的实现上 协议虽然也同时实现了 UDP 和 ARP 协议 但仅将其作为可选模块 UIP 1 0 处于网络通信的中间层 其上层协议在 这里被称之为应用程序 而下层硬件或固件被称之为网络设备驱动 TCP IP 协议组 11 中的链路层协议如 PPP 等可由 uIP 之下的设备驱动实现 应用层协议如 HTTP FTP SMTP 等可由 ulP 之上的应用程序实现 这样的设计方式大大减小了协议 代码量和 RA M 占用量 表 1 列出了 ulP 在 stc89c516rd 上代码和 RAM 占用情况 表 3 1 uIP 代码和 RAM 占用情况 协议模块代码大小 B使用 RAM B ARP1324118 IP ICMP TCP3304360 HTTP994110 校验和函数6360 数据包缓存0400 总和6258988 3 23 2 协议栈接口协议栈接口 ulP 协议通过一系列接口函数与底层系统和上层应用程序通信 它内部的协议集合 对外部系统来说是透明的 从而增强了该协议的通用性和独立性 可以非常方便地移 植到不同系统和应用平台 图 1 描述了 ulP 底层系统和应用程序三者之间的调用关系 其中 ulP 提供了 3 个函数给底层系统 uip init uip input uip periodic 应用程序向 ulP 提供一个调用函数 uipappcall 在网络事件或计时事件发生时进 行调用 同时 uIP 也要向应用程序提供一些与协议栈的接口函数 应用程序根据接口函 数提供的信息或者状态 执行相应的操作 图 3 1 u l P 底层系统和应用程序之间的调用关系 12 3 2 1 设备驱动程序接口 u I P 内核中有两个函数直接提供给底层设备驱动程序 一个是 uip input 当 设备驱动程序从网络层收到的一个数据包时要调用这个函数 设备驱动程序必须事先 将数据包存入到 uipbur 中包长放到 uip len 然后交由 uip input 处理 当函数返回 时 如果 uip len 不为 0 则表明有带外数据 如 SYN ACK 等 要发送 当需要 ARP 支 持时 还需要考虑更新 ARP 表示 或发出 ARP 请求和回应 以下代码即为设备驱动程 序从网络层收到的一个数据包后的处理过程 define BUF struet uip ethhdr i0 uip arp out ethemet devicedriver send 从本质上来说 uip nput 和 uip periodic 在内部是一个函数 即 uip process u8 flag uIP 的设计者将 uip process UIP DATA 定义成 uip input 而将 uip process UIP TIMER 定义成 uip periodic 因此从代码实现上来说是完全复用的 3 2 2 应用程序接口 uIP 使用基于事件的程序模式 应用程序由 c 语言函数实现 当收发数据 新连 14 接建立或者数据需要重新传输时 uIP 都会调用应用程序 同时 应用程序还要周期查 询是否有新的数据收发 因为应用程序只提供了一个回调函数 所以应用程序还要把 不同的网络服务映射到不同的端口和连接 uIP 在接受到底层传来的数据包后 如果 需要送上层应用程序 处理 就调用 UIP APPCLL 同时 uIP 设置结构体 uIP eonn 指针指向当前连接 uIP conn 记录一条 TCP 连接的所有相关信息 它是维持 uIP 运行 的关键结构 定义如下 struct tcp conn u8 t tcpstateflags T C P 的状态和标志 u16 t lport rpert 当地和远端端口 u16 t fipodar 2 远端的地址 u8 t rcv nxt 4 下一个要接收的序列号 u8 t sod xt 4 上一个已发送的序列号 u8 t aek nxt 4 对端下一个应答序列号 u8 t timer 重传时间 u8 t nrtx 计算特殊段的重发数量 u8 t mss 连接中最大分段的大小 u8 t appstate UIP APPSTATE SIZE 为了将用户的应用程序挂接到 uIP 中 必须将宏 UIP APPCALL 定义成实际的 应用程序函数名 这样每当某个 ulP 事件发生时 内核就会调用该应用程序进行处理 如果要加入应用程序状态的话 必须将宏 UIP APPSTATE SIZE 定义成应用程序状态 结构体的长度 在应用程序函数中 依靠 ulP 事件检测函数来决定处理的方法 另外可 以通过判断当前连接的端 口号来区分处理不同的连接 3 33 3 uIPuIP 协议栈提供的主要接口汇总协议栈提供的主要接口汇总 提供的接口在 uip h 中 为了减少函数调用造成的额外支出 大部分接口函数以 宏命令实现的 15 1 初始化 uIP 协议栈 uip init 2 处理输入包 uip input 3 处理周期计时事件 uip periodic 4 开始监听端口 uip listen 5 连接到远程主机 uip connect 6 接收到连接请求 uip connected 7 主动关闭连接 uip close 8 连接被关闭 uip closed 9 发出去的数据被应答 uip acked 10 在当前连接发送数据 uip send 11 在当前连接上收到新的数据 uip newdata 12 告诉对方要停止连接 uip stop 13 连接被意外终止 uip aborted 4 在单片机上移植在单片机上移植 uIP 4 14 1 了解了解 uIPuIP 的的主循环代码架构并改写的的主循环代码架构并改写 mainmain 函数函数 下面是 uIP 协议栈的主控制循环 void main void 省略部分代码 16 设置 TCP 超时处理时间和 ARP 老化时间 tim er set tim er set 定时器初始化 init T imer 协议栈初始化 uip init uip arp init 应用层初始化 exam ple1 init 驱动层初始化 etherdev init IP 地址 网关 掩码设置 uip ipaddr ipaddr 192 168 1 9 uip sethostaddr ipaddr uip ipaddr ipaddr 192 168 1 16 uip setdraddr ipaddr uip ipaddr ipaddr 255 255 255 0 uip setnetm ask ipaddr 主循环 while 1 从网卡读数据 uip len etherdev read 如果存在数据则按协议处理 if uip len 0 收到的是 IP 数据 调用 uip input 处理 if BUF type htons UIP ETHTYPE IP 17 uip arp ipin uip input 处理完成后 如果 uip buf 中有数据 则调用 etherdev send 发 送出去 if uip len 0 uip arp out etherdev send 收到的是 ARP 数据 调用 uip arp arpin 处理 else if BUF type htons UIP ETHTYPE ARP uip arp arpin if uip len 0 etherdev send 查看 0 5S 是否到了 到了则调用 uip periodic 处理 TCP 超时程序 els e if timer expired for i 0 i 0 18 uip arp out etherdev send 查看 10S 是否到了 到了则调用 ARP 处理程序 if tim er expired uip arp timer return 4 24 2 仿照仿照 uip 1 0 unix tapdev cuip 1 0 unix tapdev c 写网卡驱动程序写网卡驱动程序 4 2 1 使用以太网的帧结构 下面以 IEEE 802 3 数据帧来分析数据链路层和网卡的工作内容 IEEE 802 3 是电气 和电子工程师协会 IEEE 制定的一种描述物理层和数据链路层的实现方法的网络协议 主题是在多种物理媒体上以多种速率采用 CSMA CD 访问方式 其规定的帧结构如下 表 4 1 以太网 802 3 帧结构 PR 前导码 包括了 7 个字节的二进制 1 0 间隔的代码 即 1010 10 共 56 位 当帧在链路上传输时 接收方就能建立起同步 因为这种 1 0 间隔 的传输波形为一个周期性方波 同时也指明了传输的速率 10M 和 100M 的方波频率 不一样 所以 100M 网卡可以兼容 10M 网卡 19 SD 帧数据定界符 它是长度为 1 个字节的 10101011 二进制序列 此码表 示表示下面跟着的是真正的数据 DA 目的地址 目的以太网的物理地址 由 48 位二进制组成 6 个字节 说 明该帧传输给哪个网卡 如果地址为 FFFFFFFFFFFF 广播地址 则该网络上的所有 网卡都能接收到本帧数据 这个地址和下面的 SA 就是我们常说的网卡的 MAC 地址 具体信息我们待会介绍 SA 源地址 48 位 说明该帧的数据是哪个网卡发的 即发送端的网卡物理 地址 MAC LENGTH TYPE 长度 数据类型 指示后面的数据属于什么类型 如 0800H 表示 数据为 IP 包 0806H 表示数据为 ARP 包 这样 交给网络层后就可以由相应的协议 对后面的数据解析 如果这个字段小于 0600H 的值 则表示数据包的长度 在单片机 的网络编程中不考虑这种用法 DATA 数据段 由网络层负责发送和解析的数据 因为以太网帧传输的数据包 最小不能小于 64 字节 最大不能超过 1518 字节 除去 14 字节为 DA SA TYPE 以及 4 字节的 FCS DATA 不能超过 1500 字节 如果不够 46 64 18 字节 余下的由 PAD 填充 PAD 填充位 当 DATA 的数据不足 46 字节时 缺少的字节需要补上 可补 任意值 FCS 帧校验序列 由 32 位 4 字节 循环冗余校检码 CRC 组成 其校验 范围不包括前导码 FR 及帧数据定界符 SD 此序列由发送端网卡自动生成 自动填充 到帧的最后 一般情况下 接收端网卡对收到的数据校验后也不会将 FCS 放到数据中 上报 由于网卡的自动管理 并且前导码 FR 和帧数据定界符 SD 的值是固定的 也由 网卡自动生成和插入 所以 网络层向网卡发送的数据或者网络层接收到的数据一般 是由 DA SA TYPE 和 DATA 组成 DATA 不足 46 字节需要用 PAD 补齐 如表二 假如网络层的一个 IP 包要发送出去 首先要填充接收网卡的地址和本网卡的地址 MAC 地址 同时将 TYPE 填充成 0800H 紧跟着就是发送的数据 网卡获取到这些 数据后会组成物理传输帧发送出去 表 4 2 网络层管理的帧结构 20 由以太网的帧结构知道 在数据链路层就需要使用 MAC 地址 即物理地址 进 行通讯 MAC 地址是数据的第一道关卡 由硬件自动识别来接收 因此 MAC 地址 就像是是网络设备的 身份证 一样 需要具有全球唯一性 在做测试时 可以修改 MAC 地址 但也应该保证本地网络里 MAC 的唯一性 以太网的 MAC 地址由 48bit 6 字节 组成 如 08 02 10 3A 85 23 就是一个 MAC 地址 前 24 位 08 02 10 是由生产网卡的厂商向 IEEE 申请的厂商地址 后 24 位 3A 85 23 是由厂家自己分配 每个厂商必须确保它所制造的每个以太网设备都具有 相同的前三个字节以及不同的后三个字节 这样就可保证世界上每个以太网设备都具 有唯一的 MAC 地址 网卡的 MAC 地址通常是由生产厂家烧入网卡的 EPROM 中 NE2000 系列网卡常用 93C46 在网卡上可以找到 MAC 地址又可以分成 3 类 1 广播地址 只能用作目的地址 如果一个以太网帧的目的地址是广播地 址 则网络中的所有设备都能接收和处理该帧 广播地址的每一位都是 1 即 FF FF FF FF FF FF 2 组播地址 也只能用作目的地址 如果一个帧的目的地址是组播地址 那么网络中预先定义的一组设备都能接收并处理该设备 以太网网 MAC 的最高有 效字节的最低位为 1 表示以太网帧是组播帧 如 01 03 52 3A 85 23 就是组播 地址 101 的最低位为 1 3 单机地址 除了广播和组播的地址就是单机地址 非广播和组播数据包 就要与这个地址匹配了才能被接收和处理 4 2 2 使用以太网的芯片 RTL8019 RTL8019 是 NE2000 系列中一种 因此其它 NE2000 系列网卡编程思路也相符合 的 NE2000 是一个由 Novell 公司所创立并且被业界广泛采用的网络卡的标准 大多 数 ISA 网卡都与 NE2000 兼容 如 Nat Sem i 的 DP83902 Davicom 的 DM9008 NSI 的 DP8390 MXIC 的 MX98905 等 RTL8019 是 10M 网卡芯片 RTL8019 有 3 种工 作方式 1 跳线方式 网卡的 i o 和中断由跳线决定 2 免跳线方式 网卡的 21 i o 和中断由外接的 93c46 里的内容决定 3 即插即用方式 由软件进行自动配置 plug and play PnP 电脑上常使用即插即用方式 单片机不予考虑 对免跳线方式 需要在芯片外部接 EEPROM 93c46 很多电脑用的网卡上能找到这芯片 大家有兴趣可 以看下 用来保存网卡的 MAC 地址等参数 同时 需要单片机操作 RTL8019 来控制 93c46 的读写 不仅费钱还费力 一般也不采用 参数保存可放在单片机自身的 EEPROM 里 上电后写入网卡芯片就可以了 因此 单片机比较适合使用跳线方式 怎么才能让 RTL8019 工作在跳线方式下呢 这个由 JP 管脚 第 65 脚 决定 当 JP 管脚为低电平时 RTL8019 工作在即插即用方式或免跳线方式 高电平时处于跳线方 式 因此 我们将 JP 管脚接高电平 VCC 使用跳线方式 网卡的 I O 和中断就不是 由 93C46 的内容决定而是由跳线决定 主要使用的跳线如下 IOS3 IOS2 IOS1 IOS0 管脚 第 85 84 82 81 脚 决定了芯片的 I O 地址 如下表 我们将 IS03 IO0 都悬空 内部下拉 即都为 0 则芯片 I O 的起始地址是 300H 表 4 3 IOSX 引脚接法对应的芯片 I O 地址 22 芯片的 BTRM 地址由 BS4 BS3 BS2 BS1 管脚 第 72 71 69 68 67 决定 BTRM 在电脑里用来做无盘工作站的时候用到 这样可以从网卡进行引导 而需要从 硬盘的 c 盘等引导系统 由于单片机里不需要使用 可以不管 AUI 管脚 第 64 脚 该管脚决定使用 AUI 还是 BNC 接口 高电平时使用 AUI 接口 悬空 为内部下拉 的低电平 时使用 BNC 接口 网卡的接口一般是 BNC 的可以支持 8 线双绞或同轴电 缆 因此将该引脚悬空即可 网络媒体类型由 PL0 PL1 第 74 77 脚 决定 表 4 4 PLX 引脚功能 其它重要管脚的连线 所有 GND 管脚接地 VCC 管脚接 5V 的电源 23 RSTDRV 第 33 脚 用来复位网卡 我们一般将它连到单片机的管脚上 用来 快速复位 RTL8019 这个管脚拉高复位持续时间至少 2ms 建议拉高 100ms 左右再拉 低来达到复位效果 IOCS16B 管脚 第 96 脚 是 16 位 8 位数据位的选择脚 如果这个管脚下 拉 则选择 8 位模式 如果这个管脚接高电平 将选择 16 位的模式 由于单片机是 8 位的数据总线 因此这个管脚需要下拉 IOWB 第 30 脚 IORB 第 29 脚 接到单片机的 P3 6 P3 7 WR RD 用来控制读写时序 X1 和 X2 第 50 51 脚 用来接 20M 的晶振 TPIN TPIN 管脚 59 8 和 HD LD 管脚 45 46 都接隔离变压器上 通过 RJ45 接口与网络相连 由于 使用 8 位数据位 SD0 SD7 管脚接到单片机的 P0 0 p0 7 管脚 SD8 SD15 不需要 使用 SA0 SA19 为网卡的地址线 共 20 根 这个需要怎么接呢 前面说过 IOS3 IOS2 IOS1 IOS0 管脚决定了芯片的 I O 地址 假如将 IS03 IO0 都悬空 内部 下拉 即都为 0 则芯片 I O 的起始地址是 300H 从 RTL8019 的芯片手册中知道 I O 访问的寄存器只有 32 个 在后面会介绍这些寄存器 即需要直接访问的网卡寄存 器是 300H 31FH 将它转化为二进制的地址线的电平就很直观了 如下表 表 4 5 地址线电平 地址 线 A 19 A 18 A 1 7 A 16 A 15 A 14 A 13 A 12 A 11 A 10 A 9 A 8 A 7 A 6 A 5 A 4 A 3 A 2 A 1 A 0 300H00000000001100000000 000000000011000XXXXX 31FH00000000001100011111 从表中知道 SA19 SA10 SA7 SA6 固定接低电平 地 SA9 SA8 固定接高电 平 VCC 只要控制 SA4 SA0 就可以访问到 300H 到 31FH 的 32 个寄存器 于是 我们将这 5 根地址线接到单片机的 P0 4 P0 1 上 为了采用外部地址访问 将 P2 口的 p2 7 接到 RTL8019 的片选 CS 上 这样 如果单片机访问 8000H 地址就相当于 访问 RTL8019 的 300H 了 访问 801FH 地址就相当于访问 RTL8019 的 31FH 地址映射 关系为 表 4 6 单片机 P2 P0 引脚与 RTL8019 地址映射关系 单片机地址端口 P2 P0网卡 I O 10000000 00000000 8000H 300H 10000000 000XXXXX3XXH 10000000 0001 1111 801FH 31FH 程序里对寄存器使用如下定义来访问 24 define ADDRESS SHIFT 0 x0100 define RTL BASE ADDRESS 0 x8000 define CR RTL BASE ADDRESS ADDRESS SHIFT 0 x00 define PSTART WPAGE0 RTL BASE ADDRESS ADDRESS SHIFT 0 x01 define PSTART RPAGE2 RTL BASE ADDRESS ADDRESS SHIFT 0 x01 define PSTOP WPAGE0 RTL BASE ADDRESS ADDRESS SHIFT 0 x02 define PSTOP RPAGE2 RTL BASE ADDRESS ADDRESS SHIFT 0 x02 define BNRY WPAGE0 RTL BASE ADDRESS ADDRESS SHIFT 0 x03 define BNRY RPAGE0 RTL BASE ADDRESS ADDRESS SHIFT 0 x03 define CURR WPAGE1 RTL BASE ADDRESS ADDRESS SHIFT 0 x07 define CURR RPAGE1 RTL BASE ADDRESS ADDRESS SHIFT 0 x07 define TPSR WPAGE0 RTL BASE ADDRESS ADDRESS SHIFT 0 x04 define TPSR RPAGE2 RTL BASE ADDRESS ADDRESS SHIFT 0 x04 define TBCRL WPAGE0 RTL BASE ADDRESS ADDRESS SHIFT 0 x05 define TBCRH WPAGE0 RTL BASE ADDRESS ADDRESS SHIFT 0 x06 define ISR WPAGE0 RTL BASE ADDRESS ADDRESS SHIFT 0 x07 define ISR RPAGE0 RTL BASE ADDRESS ADDRESS SHIFT 0 x07 define IMR WPAGE0 RTL BASE ADDRESS ADDRESS SHIFT 0 x0F define IMR RPAGE2 RTL BASE ADDRESS ADDRESS SHIFT 0 x0F define DCR WPAGE0 RTL BASE ADDRESS ADDRESS SHIFT 0 x0E define DCR RPAGE2 RTL BASE ADDRESS ADDRESS SHIFT 0 x0E define TCR WPAGE0 RTL BASE ADDRESS ADDRESS SHIFT 0 x0D define TCR RPAGE2 RTL BASE ADDRESS ADDRESS SHIFT 0 x0D define RCR WPAGE0 RTL BASE ADDRESS ADDRESS SHIFT 0 x0C define RCR RPAGE2 RTL BASE ADDRESS ADDRESS SHIFT 0 x0C define RSR RPAGE0 RTL BASE ADDRESS ADDRESS SHIFT 0 x0C define REMOTE DMA PORT RTL BASE ADDRESS ADDRESS SHIFT 0 x10 define RSARH WPAGE0 RTL BASE ADDRESS ADDRESS SHIFT 0 x09 define RSARL WPAGE0 RTL BASE ADDRESS

温馨提示

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

评论

0/150

提交评论