logo资料库

Microship-TCPIP協議棧中文說明.pdf

第1页 / 共94页
第2页 / 共94页
第3页 / 共94页
第4页 / 共94页
第5页 / 共94页
第6页 / 共94页
第7页 / 共94页
第8页 / 共94页
资料共94页,剩余部分请下载后查看
简介
协议栈架构
图1: TCP/IP参考模型
协议栈层
图2: MICROCHIP TCP/IP协议栈与TCP/IP参考模型的结构比较
协议栈配置
表1: 协议栈配置定义
使用协议栈
表2: 协议栈项目文件
表3: Microchip TCP/IP协议栈模块和文件要求
例1: 补充到主应用程序的代码
协议栈模块和API
介质访问控制层(MAC)
串行线路网际协议(SLIP)
地址解析协议(ARP和ARPTask)
ARP函数
ARPTask函数
网际协议(IP)
网际控制消息协议(ICMP)
传输控制协议(TCP)
用户数据报协议(UDP)
动态主机配置协议(DHCP)
用于IP地址配置的IP Gleaning
Stack Manager
例2: Stack Manager算法
Microchip HTTP服务器
动态HTTP页面生成
HTTP CGI
Microchip文件系统(MPFS)
图3: MPFS映像格式
图4: MPFS FAT条目格式
图5: MPFS数据块格式
MPFS Image Builder
MPFS Access Library
Microchip FTP服务器
使用FTP客户机上传MPFS映像
例3: 使用FTP上传MPFS映像
演示应用程序
配置PICDEM.net演示板和Web Server
连接到以太网
MPFS下载演示例程
演示HTTP服务器
Windows 95/98系统的SLIP配置
存储器使用
表4: 使用HI-TECH PICC 18编译器时各种协议栈模块的存储器使用状况
结论
附录A:源代码
附录B:部分RFC文档列表
全球销售及服务网点
AN833 Microchip TCP/IP 协议栈 此协议栈用 C 语言编写,可使用 Microchip C18 和 Hi-Tech PICC 18 编译器。根据所使用的编译器,源文 件会自动进行必要的更改。Microchip TCP/IP 协议栈被 设计为只在 Microchip 的 PIC18 系列单片机上运行。此 外,目前该协议栈专用于在 Microchip 的 PICDEM.netTM 因特网 / 以太网演示板上运行。但是,可以十分容易地 修改使之运行在装有 PIC18 单片机的任何硬件上。 图 1: TCP/IP 参考模型 应用层 传输层 网络互连层 主机到网络层 作者: Nilesh Rajbharti Microchip Technology Inc. 简介 在 Microchip 单片机上实现 TCP/IP(传输控制协议 / 网 际协议)不需要任何创新之举。感兴趣的开发人员可以 很容易找到许多 Microchip 产品的商业和非商 业的 TCP/IP 实现方案。本应用笔记详细说明了 Microchip 公 司自己免费提供的 TCP/IP 协议栈。 Microchip TCP/IP 协议栈是一套程序,它服务于标准 的、基于 TCP/IP 的应用程序 (HTTP 服务器或邮件客 户机等),或者使用在定制的、基于 TCP/IP 的应用程序 中。为了更好地说明这一点,在本文档的末尾描述了一 个完整的 HTTP 服务器应用程序,同时给出了协议栈的 源代码。 Microchip TCP/IP 协议栈是按照模块化方式实现的,它 所有的服务创建了高度抽象的协议层。潜在用户使用时 不需要知道 TCP/IP 规范的所有复杂细节。实际上,只 对实现 HTTP 服务器应用程序感兴趣的用户并不需要知 晓任何有关 TCP/IP 的具体知识。(关于 HTTP 服务器 的具体信息请参见从第 77 页开始的部分。) 本应用笔记并没有深入讨论 TCP/IP 协议。建议对该协 议细节感兴趣的用户阅读 RFC (Request For Comment)文档。在本文档的末尾可以找到一部分主要 RFC 编号列表。 协议栈架构 许多 TCP/IP 的实现方案都遵循了称为“TCP/IP 参考模 型”的软件架构。基于此模型的软件被分成多层,一层 一层地堆叠(故称为“TCP/IP 协议栈”),并且每层接 受来自该层下面的一层或多层的服务。图 1 中显示了 TCP/IP 协议栈模型的一个简化版本。 根据规范,许多 TCP/IP 层都是 “活动的”,这意味着 不仅在被请求服务时,而且在像超时或新包到达这样的 事件发生时,它们都会作出反应。带有大量数据存储器 和程序存储器的系统可以十分容易地满足这些要求。多 任务操作系统可以提供额外工具,帮助程序实现模块 化。但是当系统只使用 8 位单片机以及几百字节的 RAM 和有限的程序存储器时,该任务变得十分困难。此外, 如果不能访问一个多任务操作系统,用户必须特别注意 要保证协议栈独立于主应用程序。集成在主应用程序中 的 TCP/IP 协议栈实现起来相对容易些,并且节省存储 空间。但是当集成越来越多的新应用程序时,此专用协 议栈可能会产生特殊问题。  2006 Microchip Technology Inc. DS00833B_CN 第1 页
AN833 协议栈层 类似于 TCP/IP 参考模型, Microchip TCP/IP 协议栈将 TCP/IP 协议栈分为多层 (图 2)。每层的实现代码驻留 在一个独立的源文件中,而服务和应用程序编程接口 (Application Programming Interfaces,API)是通过头 文件或包含文件定义的。与 TCP/IP 参考模型不同的是, Microchip TCP/IP 协议栈中的许多层可以直接访问不正 好在它下面的一层或多层。关于一个层是否绕过相邻模 块来获得所需的服务,主要根据开销的大小以及服务是 否需要智能处理后才能传递到下一层来决定。 与传统 TCP/IP 协议栈实现方法不同的另外一个地方是 添加了两个新模块:“StackTask”和 “ARPTask” 。 “StackTask”管 理 协 议 栈 及 其 所 有 模 块 的 操 作,而 “ARPTask”管理地址解析协议 (Address Resolution Protocol, ARP)层的服务。 如前面所提到的,TCP/IP 协议栈是“活动的”,它的某 些层必须能异步执行某些定时操作。为了能满足这个要 求,并 与 使 用 其 服 务 的 主 应 用 程 序 保 持 相 对 独 立, Microchip TCP/IP 协议栈使用了一种众所周知的技术, 称为协同式多任务处理(Cooperative Multitasking)技 术。在协同式多任务处理系统中,同时存在多个任务, 每个任务执行自己的作业然后交回控制权,这样下个任 务 才 能 够 执 行 作 业。就 此 而 论,“StackTask”和 “ARPTask”都是协同式任务。 通常,协同式多任务处理(或任何其他类型的多任务处 理)是 由 操 作 系 统 或 主 应 用 程 序 自 身 来 实 现 的。 Microchip TCP/IP 协议栈被设计为独立于任何操作系 统,可实现它自己的协同式多任务处理系统。因此,它 可以被应用在任何系统中,而不论该系统是否为多任务 操作系统。但是,使用 Microchip TCP/IP 协议栈的应用 程序自身必须使用协同式多任务处理方法。可以通过将 其作业分为多个任务,或将主作业组织为有限状态机 (Finite State Machine, FSM)并将长作业分为多个较 小的作业来实现。本文档中稍后讨论的 HTTP 服务器 就遵循了后一种方法,并具体解释了如何实现协同式应 用程序。 请注意 Microchip TCP/IP 协议栈并没有实现 TCP/IP 协 议栈中通常有的所有模块。尽管不提供,但是在需要时 可以将它们作为单独的任务或模块来实现。 Microchip 将在该协议栈的基础上实现其他协议。 图 2: MICROCHIP TCP/IP 协议栈与 TCP/IP 参考模型的结构比较 TCP/IP 参考模型 Microchip 协议栈 应用层 传输层 网络互连层 HTTP/FTP/ DHCP StackTask UDP/TCP IP ICMP ARPTask ARP 主机到网络层 MAC(或 SLIP) DS00833B_CN 第2 页  2006 Microchip Technology Inc.
协议栈配置 协同式多任务处理技术允许用户的主应用程序执行自己 的任务而不必同时管理 TCP/IP 协议栈。如前所述,要 实现这个功能意味着使用 Microchip TCP/IP 协议栈的所 有应用程序也必须用协同式多任务处理方式来编写。除 了协同式多任务处理设计以外,用户必须首先了解一些 基本的配置细节。 表 1: 协议栈配置定义 定义项 数值 CLOCK_FREQ (compiler.h) TICKS_PER_SECONDS TICK_PRESCALE_VALUE MPFS_USE_PGRM MPFS_USE_EEPROM MPFS_RESERVE_BLOCK EEPROM_CONTROL STACK_USE_ICMP STACK_USE_SLIP STACK_USE_IP_GLEANING STACK_USE_DHCP STACK_USE_FTP_SERVER STACK_USE_TCP STACK_USE_UDP STACK_CLIENT_MODE TCP_NO_WAIT_FOR_ACK MY_DEFAULT_IP_ADDR_BYTE? MY_DEFAULT_MASK_BYTE? MY_DEFAULT_GATE_BYTE? MY_DEFAULT_MAC_BYTE? 振荡器频率 (Hz) 10 - 255 2, 4, 8, 16, 32, 64, 128, 256 N/A N/A 0 - 255 外部数据 EEPROM 控制代码 N/A N/A N/A N/A N/A N/A N/A N/A N/A 0 - 255 AN833 为了简化配置过程,协议栈使用 C 编译器的 “定义项 (define)”来使能、禁止或设置某个特定参数,用户需 要更改一个或多个 “定义项”。这些 “定义项”中的大 多数是在头文件 “StackTsk.h”中定义的。在其他文 件中定义的 “定义项”会显示相应的文件名。一旦修改 了这些文件,用户必须重新编译应用程序项目来包含这 些更改。表 1 中列出了这些 “定义项”。 使用程序 Tick.c Tick.c Tick.c MP 文件系统 (MPFS.c) MPFS.c MPFS.c MPFS.c 用途 定义系统振荡器频率,以确定 “滴 答”计数器 (Tick Counter)值 计算一秒 确定 “滴答”计数器值 如果将程序存储器用于 MPFS 存储, 则取消该项的注释符号 如果将外部串行 EEPROM 用于 MPFS 存储,则取消该项的注释符号 启动 MPFS 存储之前要保留的字节数 寻址外部数据 EEPROM StackTsk.c 如果不需要 ICMP,则对该项加注释符 SLIP.c 号 如果不需要 SLIP,则对该项加注释符 号 StackTsk.c 如果不需要 IP Gleaning,则对该项加 DHCP.c 和 StackTsk.c FTP.c TCP.c 和 StackTsk.c UDP.c 和 StackTsk.c 注释符号 如果不需要 DHCP,则对该项加注释 符号 如果不需要 FTP 服务器,则对该项加 注释符号 如果不需要 TCP 模块,则对该项加注 释符号。如果至少有一个高级模块需 要 TCP,则自动使能此模块。 如果不需要 UDP 模块,则对该项加注 释符号。如果至少有一个高级模块需 要 UDP,则自动使能此模块。 ARP.c 和 TCP.c 将使能与客户机相关的代码 TCP.c 用户应用程序 在发送下个包之前 TCP 将等待 ACK 定义缺省的 IP、 MAC、网关和子网掩 码值。 缺省值是: 10.10.5.15 (IP 地址) 00:04:163:00:00:00 (MAC) 10.10.5.15 (网关) 255.255.255.0 (子网掩码)  2006 Microchip Technology Inc. DS00833B_CN 第3 页
AN833 表 1: 协议栈配置定义 (续) 定义项 MY_IP_BYTE? MY_MASK_BYTE? MY_GATE_BYTE? MY_MAC_BYTE? MAX_SOCKETS 数值 0 - 255 使用程序 MAC.c、 ARP.c、 DHCP.c 和用户 应用程序 1 - 253 TCP.c MAX_UDP_SOCKETS 1 - 254 UDP.c 用途 由应用程序保存 / 定义的实际 IP、 MAC、网关和子网掩码值。如果使能 了 DHCP,则这些值反映了为当前 DHCP 服务器分配的配置。 定义受支持的套接字总数 (受可用 RAM 限制)。进行编译时要对此进行 检查,确保为选定的 TCP 应用程序提 供了足够的套接字。 定义受支持的套接字总数 (受可用 RAM 限制)。进行编译时要对此进行 检查,确保为选定的 UDP 应用程序提 供了足够的套接字。 MAC_TX_BUFFER_SIZE MAX_TX_BUFFER_COUNT 201 - 1500 1 - 255 MAX_HTTP_CONNECTIONS MPFS_WRITE_PAGE_SIZE (MPFS.h) FTP_USER_NAME_LEN (FTP.h) MAX_HTTP_ARGS (HTTP.c) MAX_HTML_CMD_LEN (HTTP.c) 1 - 255 1 - 255 1 - 31 1 - 31 1 - 128 TCP.c 和 MAC.c 定义单个发送缓冲区大小 MAC.c HTTP.c MPFS.c FTP.c HTTP.c HTTP.c 定义发送缓冲区的总数。该数目受可 用 MAC 缓冲区大小限制。 定义任意时间允许的 HTTP 连接的最 大数目 定义当前 MPFS 存储介质的可写页面 大小 定义 FTP 用户名字符串的最大长度 定义包括 HTML 表单名称在内的 HTML 表单字段的最大数目 定义 HTML 表单 URL 字符串的最大 长度 DS00833B_CN 第4 页  2006 Microchip Technology Inc.
AN833 由于组成协议栈的每个模块都驻留在各自的文件中,所 以用户必须确保在项目中包含了所有所需的文件以进行 正确的编译。表 3 (下一页)中显示了模块和所需文件 的完整列表。 使用协议栈 本应用笔记附带的文件包含 Microchip TCP/IP 协议栈、 HTTP 和 FTP 服务器以及 DHCP 和 IP Gleaning 模块的 完整源代码。还包含了一个使用此协议栈的应用程序示 例。 有多个MPLAB®项目文件用来说明协议栈可以采用的所 有配置。表 2 中描述了这些项目文件。 表 2: 协议栈项目文件 项目名称 HtNICEE.pjt HtNICPG.pjt HtSlEE.pjt HtSlPG.pjt MPNICEE.pjt MPNICPG.pjt MPSlEE.pjt MPSlPG.pjt 用途 使用的 “定义项” 使用网络接口控制器 (Network Interface Controller, NIC)和外部串行 EEPROM 的 Microchip TCP/IP 协议栈——Hi-Tech 编译器。 使用 IP Gleaning、 DHCP、 FTP 服务器、 ICMP 和 HTTP 服务器。 使用 NIC 和内部程序存储器的 Microchip TCP/IP 协议栈——Hi-Tech 编译器。 使用 IP Gleaning、DHCP、ICMP 和 HTTP 服务 器。 使用 SLIP 和外部串行 EEPROM 的 Microchip TCP/IP 协议栈——Hi-Tech 编译器。 使用 FTP 服务器、 ICMP 和 HTTP 服务器。 使用 SLIP 和内部程序存储器的 Microchip TCP/IP 协议栈——Hi-Tech 编译器。 使用 ICMP 和 HTTP 服务器。 使用 NIC 和外部串行 EEPROM 的 Microchip TCP/IP 协议栈——Microchip C18 编译器。 使用 ICMP 和 HTTP 服务器。 MPFS_USE_EEPROM, STACK_USE_IP_GLEANING, STACK_USE_DHCP, STACK_USE_FTP_SERVER, STACK_USE_ICMP, STACK_USE_HTTP_SERVER MPFS_USE_PGRM, STACK_USE_IP_GLEANING, STACK_USE_DHCP, STACK_USE_ICMP, STACK_USE_HTTP_SERVER STACK_USE_SLIP, MPFS_USE_EEPROM, STACK_USE_FTP_SERVER, STACK_USE_ICMP, STACK_USE_HTTP_SERVER STACK_USE_SLIP, MPFS_USE_PGRM, STACK_USE_ICMP, STACK_USE_HTTP_SERVER MPFS_USE_EEPROM, STACK_USE_ICMP, STACK_USE_HTTP_SERVER 使用 NIC 和内部程序存储器的 Microchip TCP/IP 协议栈——Microchip C18 编译器。 使用 ICMP 和 HTTP 服务器。 MPFS_USE_PGRM, STACK_USE_ICMP, STACK_USE_HTTP_SERVER 使用 SLIP 和外部串行 EEPROM 的 Microchip TCP/IP 协议栈——Microchip C18 编译器。 使用 ICMP 和 HTTP 服务器。 使用 SLIP 和内部程序存储器的 Microchip TCP/IP 协议栈——Microchip C18 编译器。 使用 ICMP 和 HTTP 服务器。 STACK_USE_SLIP, MPFS_USE_EEPROM, STACK_USE_ICMP, STACK_USE_HTTP_SERVER STACK_USE_SLIP, MPFS_USE_PGRM, STACK_USE_ICMP, STACK_USE_HTTP_SERVER  2006 Microchip Technology Inc. DS00833B_CN 第5 页
AN833 表 3: MICROCHIP TCP/IP 协议栈模块和文件要求 模块 所需的文件 用途 MAC SLIP ARP IP ICMP TCP UDP Stack Manager HTTP Server DHCP Client MAC.c Delay.c SLIP.c ARP.c ARPTsk.c MAC.c 或 SLIP.c Helpers.c IP.c MAC.c 或 SLIP.c Helpers.c ICMP.c StackTsk.c IP.c MAC.c 或 SLIP.c Helpers.c StackTsk.c TCP.c IP.c MAC.c 或 SLIP.c Helpers.c Tick.c StackTsk.c UDP.c IP.c MAC.c 或 SLIP.c Helpers.c StackTsk.c TCP.c IP.c ICMP.c ARPTsk.c ARP.c MAC.c 或 SLIP.c Tick.c Helpers.c HTTP.c TCP.c IP.c MAC.c 或 SLIP.c Helpers.c Tick.c MPFS.c XEEPROM.c(1) DHCP.c UDP.c IP.c MAC.c Helpers.c Tick.c 介质访问层 (Media Access Layer) 用于 SLIP 的介质访问层 地址解析协议 (Address Resolution Protocol) 网际协议 (Internet Protocol) 网际控制报文协议 (Internet Control Message Protocol) 传输控制协议 (Transmission Control Protocol) 用户数据报文协议 (User Datagram Protocol) 协议栈管理器 (“StackTask”),协调其他 Microchip TCP/IP 协 议栈模块 超文本传输协议服务器 (HyperText Transfer Protocol Server) 动态主机配置协议 (Dynamic Host Configuration Protocol) 注 1:只有在 MPFS 存储选项中使能外部串行 EEPROM (MPFS_USE_EEPROM 定义)后才需要。如果选择此选 项,则必须包含相应的 MPFS 映像文件。(详情请参见第 84 页的 “MPFS Image Builder”。) DS00833B_CN 第6 页  2006 Microchip Technology Inc.
AN833 表 3: MICROCHIP TCP/IP 协议栈模块和文件要求 (续) 模块 IP Gleaning FTP Server 所需的文件 用途 StackTsk.c ARP.c ARPTsk.c ICMP.c MAC.c 或 SLIP.c FTP.c TCP.c IP.c MAC.c 或 SLIP.c 只配置节点 IP 地址。 文件传输协议服务器 (File Transfer Protocol Server)。 注 1:只有在 MPFS 存储选项中使能外部串行 EEPROM (MPFS_USE_EEPROM 定义)后才需要。如果选择此选 项,则必须包含相应的 MPFS 映像文件。(详情请参见第 84 页的 “MPFS Image Builder”。) 一旦包含了相应的文件设置项目后,就必须修改主应用 程序源文件来包含例 1 中所示的编程语句。如需完整的 工作示例,请参见 “Websrvr.c”的源代码。该源文 件与其他协议栈文件一起实现了 HTTP 服务器。 要了解协同式多任务应用程序是如何执行的,请参见 HTTP.c 的源代码(HTTP 服务器任务)。如果不使用协 同式多任务工作模式,使用协议栈的应用程序需要将它 们的作业划分为多个较小的任务,每个任务都被限制为 不能独占 CPU 太长的时间。“HTTP.c”的代码说明了 状态机方法,即将长应用程序分为较小的状态机状态, 在作业等待特定事件期间需将控制权归还给主应用程 序。  2006 Microchip Technology Inc. DS00833B_CN 第7 页
AN833 例 1: // 声明该文件为主应用程序 #define THIS_IS_STACK_APPLICATION 补充到主应用程序的代码 #include “StackTsk.h” #include “Tick.h” #include “dhcp.h” // 只有在使用 DHCP 时 #include “http.h” // 只有在使用 HTTP 时 #include “ftp.h” // 只有在使用 FTP 时 // 其他应用程序特定的包含文件 ... // 主程序入口 void main(void) { // 执行应用程序的初始化 ... // 初始化协议栈各组成部分 // 如果使用 StackApplication,同样要对它进行初始化 TickInit(); StackInit(); HTTPInit(); // 只有在使用 HTTP 时 FTPInit(); // 只有在使用 FTP 时 // 进入无限程序循环 while(1) { // 更新 “滴答”计数器。可通过中断完成 TickUpdate(); // 协议栈管理器执行其任务 StackTask(); // 协议栈应用程序执行其任务 HTTPServer(); FTPServer(); // 只有在使用 HTTP 时 // 只有在使用 FTP 时 // 应用程序逻辑驻留于此 DoAppSpecificTask(); } } DS00833B_CN 第8 页  2006 Microchip Technology Inc.
分享到:
收藏