基于SX单片机WebServer和网络协议栈的实现
扫描二维码
随时随地手机看文章
四阶TLT电压增益公式推导及其特性日益普及,信息共享程度的不断提高,给工作和生活带来了极大的方便。现在,上网浏览对于人们来说是一件很平常的事情。不仅如此,架构一个WebServer,做自己的主页也是司空见惯的。一般情况下,人们通过一台上网的电脑来建立WebServer。在这里将讨论另外一种方法:通过单片机来建立WebServer。之所以会想到用单片机来实现 WebServer,是因为随着嵌入式系统的迅猛发展和IA(信息电器)的出现,以单片机为中心的应用系统将搭上Internet的快车逐步取代传统的以 PC为中心的应用,成为未来Internet发展中的主力军。
一、 具体应用方案
1. 基于单片机的WebServer方案
基于单片机的WebServer的硬件平台如图1所示。
2. 主要芯片介绍
(1) SX52BD100
SX52BD100 是UBICOM公司生产的一款RISC指令集的单片机,片上带有4K×16 位的Flash存储器和262×8位的RAM。由于采用CPU并行流水线方式及单时钟周期指令,在100MHz晶振驱动下指令执行速度可达 100MIPS。该单片机的最大特点就是虚拟外设功能,即通过软件对I/O口进行灵活的配置,CPU执行虚拟软件模块就可以驱动普通的I/O口来模拟外设的功能,比如UART、SPI、IIC和FSK等。当然,令人惊奇的是,SX52BD100可以通过虚拟外设功能来运行网络协议栈,例如TCP、IP、 HTTP以及SMTP等。
(2)RTL8019AS
RTL8019AS是ReaLTEk公司出品的一种全双工以太网控制器。它自带16KB的SRAM,工作在Ethernet II和IEEE802.3、 10Base5、10Base2、10BaseT下,与NE2000兼容。
(3)24LC256
24LC256是MicroChip公司生产的一种串行32KB的 E2PROM存储器,采用CMOS工艺,通过2根数据线和外界通信,兼容I2C总线接口,可设为硬件写保护,10万次的擦写,200年以上的数据保护。
3.工作流程和软件设计
RJ45为此系统与局域网的接口。由于大部分局域网都采用以太网,这里的RTL8019AS就是处理以太网协议(IEEE802.3)的。数据的流向为:请求信息从局域网中来,通过RJ45送到RTL8019AS,处理后的数据包送入SX52BD100协议栈,由协议栈对数据包进行解析,得到原始请求信息。请求信息再经过SX52BD100的处理,产生回复信息。回复信息到局域网的过程与上面正好相反。
整个系统的软件流程如图2所示。
图1中的E2PROM 24LC256用来存储WebServer的网页信息。它可以处理Web页面、图像文件、PDF文档记忆其它文件。当然,它不能像PC上WebServer中的硬盘那样可以存储大量的页面。它的容量决定了WebServer的资源文件的大小。
二、网络协议栈的实现
网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能。一个协议族,比如TCP/IP,是一组不同层次上的多个协议的组合。TCP/IP通常被认为是一个四层协议系统,如图3所示。每一层负责不同的功能。
(1)数据链路层,有时也称为网络接口层。通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。
(2)网络层,有时也称作互联网层。处理分组在网络中的活动,例如分组的选路。在TCP/IP协议族中,网络层协议包括IP协议(网际协议)、ICMP 协议(Internet互联网控制报文协议)以及IGMP 协议(Internet组管理协议)。这里主要讨论IP协议。
(3)传输层主要为两台主机上的应用程序提供端到端的通信。TCP为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。
(4)应用层负责处理特定的应用程序细节。几乎各种不同的TCP/IP实现都会提供下面这些应用:
① HTTP超文本传输控制协议;
② TELNET远程登录;
③ FTP文件传输协议;
④ SMTP简单邮件传送协议;
⑤ SNMP简单网络管理协议。
因为数据链路层主要是网络接口卡及驱动,由RTL8019AS来实现,所以下面讨论网络层、传输层和应用层协议栈的实现。
1. 网络层
(1) IP协议
IP是TCP/IP 协议族中最为核心的协议。Internet所有的数据都以IP 数据报格式传输。IP协议最大的特点是提供不可靠的和无连接的数据包传送服务。
不可靠(unreliable)的意思是它不能保证IP数据报能成功地到达目的地。IP仅提供最好的传输服务。若发生某种错误时,如某个路由器暂时用完了缓冲区,IP有一个简单的错误处理算法:丢弃该数据报,然后发送ICMP(Internet控制报文协议)消息报给信源端。任何要求的可靠性必须由上层来提供(如TCP)。
无连接(connectionless)的意思是IP并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。这也说明,IP数据报可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据报(先是A,然后是B),每个数据报都是独立地进行路由选择,可能选择不同的路线,因此, B可能在A到达之前先到达。
IP数据包的格式如图4所示。
版本是指IP协议的版本号。目前的协议版本号是4, 因此IP也称作IPV4。
首部长度指的是首部占32bit字的数目。由于它是一个4位字段,因此首部最长为60个字节。在这里,IP数据报字段的值是5。
服务类型字段包括一个3位的优先权子字段(现在已被忽略)、4位的TOS子字段和1位未用位但必须置0。4bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。4bit中只能置其中1bit 。如果所有4bit 均为0,那么就意味着是一般服务。
总长度字段是指整个I P 数据报的长度,以字节为单位。利用首部长度字段和总长度字段,就可以知道I P 数据报中数据内容的起始位置和长度。
标识字段唯一地标识主机发送的每一份数据报。
标志字段用来指定目的地址是一个完整的主机地址还是一个网络地址。
生存时间字段设置了数据报可以经过的最多路由器数。
首部检验和字段是根据IP首部计算的检验和码。
源地址和目的地址都是32位的数据。
可选项定义安全和处理限制、记录路径、时间戳、宽松的源站选路、严格的源站选路等信息。
(2)SX协议栈对IP层的实现
SX52BD100的协议栈中,IP层的实现就是把要发送出去的消息进行IP打包,即加上IP包头,使之符合IP数据包的格式发送到物理层;将接收到的来自物理层的数据包进行IP解包,即去掉包头,送到TCP层。应注意,协议栈不接收分片的IP包,因为它并不对接收到的数据进行重新打包。
2. 传输层
(1)TCP 协议
TCP提供一种面向连接的、可靠的字节流传送服务。TCP数据包的结构如图5所示。
每个TCP段都包含源端和目的端的端口号,用于寻找发端和收端应用进程。这两个值加上IP包头中的源端IP地址和目的端IP地址,唯一确定一个TCP连接。
序号用来标识从T C P 发端向T C P 收端发送的数据字节流。它表示在这个报文段中的第一个数据字节。
确认序号包含发送确认的一端所期望收到的下一个序号。
首部长度给出首部中32bit字的数目。
紧急指针是一个正的偏移量,与序号字段中的值相加表示紧急数据最后一个字节的序号。其余字段的意义和IP包中的差不多。
为了保证TCP层的数据能有效地传输,在建立TCP连接时,用到了三向握手机制。具体过程如下(假设在A、B间通信,A、B的初始化序号为X、Y):
① 由A向B发出SYN信号,告诉B,A的初始化序号为X。
② 由B向A发出ACK和SYN信号,告诉A,B知道A的初始化序号为X,B的是Y。
③ 由A向B发出ACK信号,告诉B,A知道B的初始化序号是Y。
经过这样的初始化后,TCP连接的建立就完成了,A与B之间的数据传输也可靠了。
(2) SX协议栈对TCP层的实现
在SX52BD100的协议栈中,对TCP层的实现是通过提供的TCP API(应用程序接口)来实现。TCP的API主要包括下面的函数和变量:
TCPApp1Init():建立第一个TCP连接的初始化函数;
TCPApp2Init():建立第二个TCP连接的初始化函数;
TCPAppTxBytes():TCP连接中发送数据的字节数;
TCPAppRxBytes():TCP连接中接收数据的字节数;
TCPAppTxData():发送数据;
TCPAppRxData():接收数据;
TCPAppTxDone():发送完毕;
TCPAppRxDone():接收完毕;
TCPAppPassiveOpen():被动TCP连接;
TCPApPACtiv