基于SX52的嵌入式Web服务器的快速实现

发布者:RadiantGlow最新更新时间:2012-11-23 关键字:SX52  嵌入式  Web服务器 手机看文章 扫描二维码
随时随地手机看文章

随着互联网的日益普及,信息共享的程度不断提高,网络仪表及网络控制设备的流行逐渐成为趋势。如何通过互联网共享以单片机应用系统为中心的小型嵌入式设备的信息,成为当今电子界的热门话题。传统的互联网应用以PC为中心。如今,互联网应用正在转到以嵌入式设备为中心。用单片机实现嵌入式互联网方案的技术难点是:如何利用单片机本身有限的资源对信息进行TCP/IP协议处理,使之变成可以在互联网上传输的IP数据包。目前解决这个问题有两种方案:一种是PC网关+专用网,缺点是要增加布线和第三方协议转换软件;另一种是32位MCU+RTOS,弊端是开发难,成本极高。而用软件方法实现网络协议比采用集成网络协议的芯片,具有节省空间、降低成本的优点,更重要的是可以随意配置甚至修改各种协议,且能通过软件升级方式跟随未来的发展。八位单片机目前仍占有很大的市场份额,而通过美国Ubicom公司的SX52微控器进行网络控制更具其独特优势,主要体现在:(1)速度快,在100MHz频率下能达到100MIPS;(2)现成的协议模块供使用,即使对不熟悉网络协议的开发人员也能简单套用。虽然其它八位单片机也能用软件实现精简的TCP/IP协议,如PICl6C76等,但上面所说两大优点是采用SX52MCU的充分理由。套用成熟的现有程序是最具效率的开发办法,这也是避免目前国内普遍存在的低水平开发的有效途径。虽然目前还没有单独的TCP/IP软件虚拟模块提供,但在演示板程序的基础上,可以采用其成功的网络协议模块和一些适用于小型嵌入系统的做法构筑现场控制Web服务器。

1SX52控制器简介

SX52MCU与PIC单片机有很多地方相似,它也采用RISC指令系统,带可擦写上万次的片上Flash程序存储器,具在系统编程等。SX52的流水线指令操作可1个时钟周期执行一条指令。没有中断嵌套使中断响应时间固定为3个时钟周期,适用于一些要求强实时性的系统。5个可驱动30mA电流的I/O口可自由设置为TI\'L或CMOS输入电子,262×8bit的SRAM数据空间,4096×12bit的EE/Flash程序空间。内部集成有模拟比较器、定时器、捕捉/PWM比较器、欠压检测、看门狗等多种功能部件。具有三个特殊器件配置寄存器,其长度分别为12位,(FUSE、FUSEX、DEVICE),硬件配置灵活多样,加密性能好,能有效地防止产品被盗版或仿制的可能性。已提供的软件虚拟模块有UART、A/D、DTMF、PWM、FSK、IRDA、VC等众多常用功能块。应用微控器用软件方法替代硬件功能是一大特色,可以避免一些常用功能的重复开发。

2联网的实现

对于资源紧缺的小型嵌入系统,一般都要对TCP/IP协议族做一些精简处理。WingPoon等提供的演示板程序集合了如下模块:ARP、DHCP、ICMP的echo响应,精简的TCP/IP、HTYP、SMTP等;还可以看到应用了I2C以及∑-△A/D的软件虚拟模块。由于程序空间的限制,当实现DHCP时,只能用SMTP。底层采用8019AS网络接口芯片。网页通过12C存储于24C256中,中断程序可用于A/D虚拟模块的计数及TCP/IP协议族的各个定时器。

系统设计主程序流程如图1。当IP包头有选项或存在分片时,此包被简单丢弃而不处理。TCP能同时打开两个连接,连接1用于SMTP(套接字用Bank3,TCBI_BANK),连接2用于HTTP(套接字用Bank4,TCB2_BANK)。TCP不使用滑动窗口的流量控制,发送时每发一个分组就停下来等待确认。程序中发送的数据长度放在变量Tcp2Un-AckMSB、Tcp2UnAckLSB中。在接收模块TcpProcPktln中只有接收到Ack包后才复位这两个变量;而发送模块Tcp·Transmit中只有这两个变量为零才允许发送下一段数据,否则检查Tcp2TimeMSB是否超时;如是则重发。TCP接收模块TcpProcPktln检查端口号及32序列号是否与套接字内的相符,如不符则可能是收到重发的包,TCP简单地发Ack的空包并丢弃本包;否则处理本包数据同时清除上次发送数据长度变量Tcp2UnAckMSB、Tcp2UnAckLSB,以便在TcpTransmit中能发送下一段数据。

子模块TcpAppTxBytes、TcpAppRxData是TCP处理发送及接收数据的模块。用户如不变更原TCP/IP的精简设计,只要修改这两个模块就能实现自己特定的应用功能。

16位校验和Checksum的计算对于很少或没有数据缓冲的系统来说并不容易,一般有两种方法处理。一是在TCP头的检验和域放任意一个16位数,数据发送的同时计算Checksum,然后在数据最后附加2个字节以保证之前任意取值的正确。这种方法的缺点是要让接收的应用程序忽略最后2个字节的数据,可能导致许多程序的运行异常。二是先对产生的数据计算Checksum,但不发送,然后再产生同样的数据加上正确的校验和发送。显然要求系统产生重复的数据有时是不现实的,利用网卡芯片8019的缓冲可以解决这一问题,将数据写入8019的同时计算Checksum,最后将Checksum写入8019后调用NicSendTxFrame才真正发送数据。

3Web服务器实现

TCP在Web服务器下采用的状态转移见图2。

(1)服务器在closed状态下主动打开端口80进入listen状态;

(2)经过3次常规握手后进人establish的数据传送状态;

(3)服务器发完数据发fin关闭请求进入finwait-1状态;

(4)收到对方发来的Ack后进入finwait-2状态;

(5)收到对方发来的fin关闭请求后回送Ack回到closed状态。

考虑HTYP常用的abs_path形式的统一资源标识符URI,在资源紧缺的系统中实现完整的文件结构如"imagesledon.gif\'\'的查询与定位,如果采用一般计算机程序中常用的方法则代价很高。一种简便有效的方法是计算URI各字符的ASCII码之和。网页存放于SX52的外部EEPROM中。假设利用前512字节存放最大256个网页的地址,绝对路径"index.btm"的不带进位ASCII码之和为#$be,可以到2x#$be+#$17c的地方找到要发送回客户浏览器的数据存放地址;下载网页到服务器时也用一个程序按上述方法将各网页排好即可,当然网页前都加了一段HTYP1.0的标准响应头信息。这正是Ubicom公司提供的E2File程序所做的,也可以自己编写一个这样的程序以实现HTFP1.1的除GET、POST方法外的其它方法或扩展功能。[page]

除了用JavaApplet实现动态网页外,利用post方法也可与服务器交互。例如通过IE浏览器用复选框按钮控制并显示一组灯的开与关的基本Web控制,其HTML网页的提交表单FORM内应该包含有的类似语句,其中0~n为欲控制灯的编号,name的取值为一位数字或字符,有利于节省SX52的查询匹配程序空间,E2File程序将网页中如下显示灯的状态的HTML超链接语句中的"?"编号为非ASCII字符#$f0~#$fn等下载存储到服务器的EEPROM中。当n用POST方法发送数据给服务器时,SX52服务器计算两个空格间的abs_path形式的URI的ASCII字符之和后到相应EEPROM中,用上述下载网页的计算方法找到该网页的地址后,跳过HTTP的请求头匹配l=0&…l=n表示复选框被选中的数据并对相应编号的灯开关后,返回该网页给IE时会根据实际灯的状态将EEPROM中存储网页的非ASCII字符#$f0~#$fn退换为ASCII字符"n"或"f"。这样IE就能正确地通过超链接再次与服务器交互(GET方法),下载显示ledon.gif或ledof.gif显示实际灯的状态了。而要在IE上正确显示现场某个控制变量的值时,同样可以将n位显示数值编号为非ASCII字符#$f0#$fl…#$fn的形式存储到服务器中,SX52服务器端先将实际的数值转换为BCD码后再用对应的ASCII字符将#Sf0#$f1…#$fn替换返回,从而能在浏览器端显示服务器端控制变量的变化。国内用户使用的北京革新提供的开发演示板程序较充分地提供了常用的Intemet网络协议软件虚拟模块,也提供了一个基本可实际应用的Web演示控制,只要做较少改动就可以用于实际控制中。不过它只能一次控制一个灯的开关,且任何人都可以轻易地更改。现要求一次能控制所有的灯,但需要在IE浏览器上输入密码123abc方可生效。程序修改如下:

(5)在模块TcpAppRxData的分支:lookforl的开头增加以下语句:

当然以上密码通过IE仍以明文传送,不安全,但是它可以通过常用的IE浏览器操作,不需要专用的客户端软件。这适用于大企业,它们有局域网,电脑上只能用固定的几种软件。当然编写客户端软件加入加密解密算法来适应各种应用环境也是容易实现的。用SX52构建各种小型的现场控制Web服务器只要合理利用相应的网络协议软件虚拟模块,参照演示板的做法在应用子模块TcpAppTxBytes、TcpAppRxData中对发送及接收数据按照自己特定的要求做处理即可。它还可以通过UDP的方式同时与客户端软件传送语音或视频数据流,只要增加很少的外围接口电路并改动相应的UDP处理模块UDPProcPktIn即可。而如果未来协议的更新也只要下载最新的程序替换即可,开发人员单独修改特定协议模块的一些实现方式如增加滑动窗口的TCP/IP等也比重新编写一个完整的协议族远为轻松。

关键字:SX52  嵌入式  Web服务器 引用地址:基于SX52的嵌入式Web服务器的快速实现

上一篇:基于CC8520嵌入式无线音频传输系统方案
下一篇:利用Allegro实现嵌入式系统高速电路布线设计

推荐阅读最新更新时间:2024-03-16 13:13

微软嵌入式操作系统的分析和对比
摘要: 文章介绍了微软的操作系统" 嵌入式操作系统产品线,分析了WinCE 6.0和.NET Micro framework技术特点。根据嵌入式系统的要求,还比较了微软和嵌入式Linux、 VxWorkss的差异和各自特色。   关键词: 操作系统" 嵌入式操作系统;WinCE;Windows Mobile;单片机;.NET Micro framework    引言   在操作系统" 嵌入式操作系统领域,微软的Windows Mobile正在智能手机市场快速增长,“2007 Windows 硬件工程大会”及“2007 移动与嵌入式开发者大会”的资料显示,全球55个国家的110个运营商采用Windows Mobile,
[嵌入式]
FPGA在嵌入式系统中的开发方向
  早期的嵌入式系统一般是以通用处理器或单片机为核心,在外围电路中加入存储器、功率驱动器、通信接口、显示接口、人机输入接口等外围接口,再加上应用软件,有些还加上了嵌入式操作系统,从而构成完整的系统。   随着微电子技术的进步,SoC已经在很多应用中取代了传统的以单片机为中心的架构,将很多外设和存储器集成在一个芯片中,使系统的功耗和体积越来越小,而功能却越来越强。   FPGA在嵌入式系统中的应用前景   现在的MCU和DSP的功能已经非常强了,但处理能力毕竟还是有限的,厂商在推出一款器件的时候,其性能就已经固定了。当某一款产品的性能无法满足要求时,就必须选用新的处理器,常常意味着重新进行PCB的设计,重新进行各项软硬件
[嵌入式]
AMD嵌入式图形处理器承袭催化剂驱动作风
   AMD的嵌入式图形处理器驱动开始承袭AMD的催化剂驱动的作风,保持每个月发布一款驱动的频率,这得益于嵌入式系统的应用广泛,以及人们开始关注嵌入式系统给自己带来的便利。   日前,AMD发布了嵌入式图形处理器/芯片组催化剂驱动8.92版,驱动生成于2011年11月9日,集成的HDMI音频驱动版本为7.12.0.7704,因为嵌入式系统的特殊性,AMD一直没有给出更新说明,稍显美中不足。 8.92版驱动硬件支持列表: E6760 E4690 E2400 G-Series AMD 785E/SB8X0 Chipset AMD 780E/SB710 Chipset Radeon HD5770
[工业控制]
用于下一代汽车专用集成电路(ASIC)的嵌入式现场可编程逻辑门阵列(eFPGA)
对于最近研究过新车的任何人来说,很难不注意到汽车电子产品的发展是多么的迅速。仅仅将三年前的汽车安全性技术与今天的技术进行对比,您就会发现摄像头数量已显著增加,以支持诸如全景可视、驾驶员注意力分散监测器、立体视觉摄像头、前向摄像头和多个后视摄像头等应用。除了摄像头,系统功能也增强了,包括自动紧急制动、车道偏离警告、后方盲点检测和交通标志识别等。这一趋势表明,汽车电子类产品在持续快速地创新,但这也给汽车原始设备制造商(OEM)带来了全新的挑战,包括: ● 当研发一辆新车的平均时间从48个月缩短至24个月左右,同时还要支持长达10年以上的生命周期时,如何快速开发新特性和安全性功能? ● 平台架构的确定都比车辆上市提前数年,如
[汽车电子]
用于下一代汽车专用集成电路(ASIC)的<font color='red'>嵌入式</font>现场可编程逻辑门阵列(eFPGA)
嵌入式平台ARM的C代码优化方法
本文介绍了ARM平台的C代码优化方法,从数据类型选择、数据结构组织、局部变量选择、函数inline内联、编译器选项、循环展开、条件执行、数据操作的转化、存储器的优化、代码尺寸的优化等角度给出常用的优化方法。 C数据类型 C语言的程序优化与编译器和硬件系统都有关系,设置某些编译器选项是最直接最简单的优化方式。在默认的情况下,armcc是全部优化功能有效的,而GNU编译器的默认状态下优化都是关闭的。ARM C编译器中定义的char类型是8位无符号的,有别于一般流行的编译器默认的char是8位有符号的。所以循环中用char变量和条件 i 0时,就会出现死循环。为此,可以用fsigned - char(for gcc)或者-zc(for
[单片机]
嵌入式系统的低功耗软件设计
引言 低功耗是嵌入式电子产品必须具备的一个关键特性,在硬件技术飞速发展和日益完善的时候,已经很难有功耗方面的突破了。所以现在降低产品功耗主要是依靠软件来处理,必须依靠软件让整个系统在各个时候电流达到最小。不管是操作系统、BIOS控制程序还是外设驱动程序,这些程序将决定了最终产品的功耗水平,因此在开发时必须加以考虑。本论文将以智能电话为例,介绍一种通过软件降低功耗的方法,可供嵌入式设计工程师们参考。实现省电降低功耗的方法有很多,本文不可能面面俱到,将主要介绍软件程序如何控制物理层进行省电。 具体实现措施 系统描述及设计思想 目前国内智能电话的数字多媒体解决方案一般通过基于ARM7等内核的基带嵌入式处理芯片外接多媒体处理芯片来实现。嵌入
[单片机]
<font color='red'>嵌入式</font>系统的低功耗软件设计
Freescale扩展嵌入式电机控制系列提供经济高效的
Freescale扩展嵌入式电机控制系列提供经济高效的8位MCU 通过推出S08MP16,飞思卡尔半导体公司正在扩展其嵌入式电机控制系列。这种入门级8位微控制器 (MCU) 系列为从工业驱动到汽车电子燃油泵等无刷直流(BLDC)电机控制应用提供了一种安全、精确且成本优化的解决方案。 BLDC 电机在消费电子、工业和汽车电子方面日益流行,因为它们比传统的有刷直流和电磁感应电机提供效率和可靠性方面的优点。这种S08MP16 微控制器经过优化,满足这一快速发展的电机细分市场的需求,并且也能够支持其他的电机类型,包括交流电磁感应电机。 安全和可靠的控制 通过实现快速而精确的电机关闭,多种高速模拟比较器及强大的 8通道Flex
[模拟电子]
SolarEdge嵌入式电源优化控制器获得认证将上市
SolarEdgeTechnologies旗下产品组件嵌入式电源优化控制器获得认证,并开始为投放市场做宣传。在北美上市的优化控制器是嵌入在智能组件的一个接线盒中,并可以检测和终止电弧。 该优化控制器配备了高效ASIC芯片组,节约了32%的零件,号称效率高达99.5%,经过一系列的运算可以增加产能25%。它作为附加优化控制器的一项新技术已投放市场。
[新能源]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved