1、灵性活力,随处可见;智慧演绎,无处不在Embedded everywhere;Intelligence everywhere嵌入式 WEB 模 块清华大学工程物理系 龚光华 薛涛前言随着计算机的日益普及,互联网络(Internet)已经成为很多人日常生活的一部分。借助计算机高性能的处理器,大量复杂的网络应用得以实现。一位世界著名的汽车公司总裁曾说,在过去的几十年里,他的公司提供的计算能力比IBM 公司提供的计算能力多了好几十倍。也就是说,有更多的数目惊人的和计算机处理器功能相似,能力较弱的微处理器(Micro-Control Unit)围绕在我们日常生活的方方面面,为我们提供各种便捷的服务。一
2、个统计显示,在日常的城市生活中,每个人每天至少和多达 50 个的微处理器打交道。这些众多的微处理器通常使用专门的通信方式:RS485、电流环、LonWorks、CAN、FieldBus 等来构建通信渠道。这些专门的通信方式把这些微处理器的处理范围局限在这些通信方式所能达到的区域之内,通常是几米到几百米的范围。而且这种通信方式只能在那些支持这些特殊的通信方式的设备之间使用,使用不同的通信方式的设备之间无法联系。这使得这些微处理器的应用被局限在一个很小的范内那。互联网络是覆盖率极广、联网设备众多、协议完善、功能强大的一种通信方式,已经成为社会重要的基础信息设施,是重要的信息流通渠道。具备互联网络的
3、接入功能,已经成为众多使用微处理器的嵌入式应用的发展方向。随着Internet 的日益普及,将嵌入式系统接入 Internet 的想法也变得更加现实和充满诱惑,通过 Internet 可以获得真实世界的各个状态的实时变化,并且通过Internet 远程控制、调节,使之达到我们的要求。比如将世界各地的气象站、水文站联入 Internet,不仅可以实现无人监控,而且可以随时了解当时各地的状况;通过 Internet 对住宅进行远程监测与控制(如室内温度监测,空调遥控等) ;跨国公司对国外的工厂、生产线的监控;大型设备的远程管理与维护等。这样我们所面对的 Internet 将不仅仅是服务器硬盘中的文
4、件和数据,而是一个充满生机的现实世界。使用互联网络的接入功能将给嵌入式的微处理器应用带来很多好处:利用无所不在的互联网络,可以从全球的任何一个角落实现对设备的监控;利用开放的 TCP/IP 网络通信协议,任何的计算机都可以使用通用的网络浏览软件访问设备,不需要专门的计算机和专门的软件;设备的信息通过网页的形式体现,可以使用数据、图表、动画等各种丰富的表现方式。这种具有互联网络接入的嵌入式设备可以应用在诸多场合:信息家电:冰箱、空调、电饭煲、微波炉等的网络化;智能家庭管理系统: 三表抄表,家电远程控制,防火防盗系统; 工业自动化:过程控制、电力系统、电网安全、电网设备监测、石油化工系统;POS
5、网络及电子商务:公共交通无接触智能卡发行系统,公共电话卡发行系统,自动售货机;金融电子化:查询帐目、浏览交易证券行情。“嵌入式 WEB 模块”项目的目的正是提供这样的一个具有互联网络接入功能的可以进行二次开发的通用模块。一: 系统结构在系统结构设计上,考虑了现有的各种嵌入式网络实现的方案。这些方案通常分为两类:一种是使用例如 8051 之类的 8 位微处理器构成,这类系统造价低廉,开发简单;但是由于微处理器的处理能力限制,其对 TCP/IP 协议的支持不完善,只能实现最基本的通信协议能力。在二次开发能力和通信可靠性上都不能令人满意。另一种是使用例如 MPC860 等 32 位微处理器构成的面向
6、高端应用的方案。这种系统对功能和性能的考虑远远多于对成本的考虑,使得这些方案只能在设计诸如交换机、路由器等设备时才采用。通常采用商用的实时操作系统,借助这些系统完善的网络通信协议栈完成网络接入。对于众多的低端应用,其成本和开发周期成为应用的致命缺陷。所以我们考虑选择一种处理能力较强,系统成本较低的处理器来实现嵌入式模块。完成后的模块要能够具有一定的剩余处理能力,提供给二次开发;要具有丰富的外围模块,以便设计不同的具体应用;成本要低廉,面向众多低端应用;具有一定的数据处理能力,面对日益普及的网络多媒体应用场合。Motorola 的 DSP56805 极好的满足了这些要求:40MIPS 的处理能力
7、,完成网络协议后还有足够的能力完成其他应用。丰富的外围模块百元左右的成本,只要添加其他必要的应用电路和器件即可完成产品。MCUDSP 的架构,应付控制和数据处理的双重需要。CAN,UART 的外围通信接口,和已有的嵌入式应用很好兼容RTL8019AS 是由台湾睿昱(Realtek)公司生产的一种高度集成的以太网控制器。具有以下特点:适应于 Ethernet II、IEEE802.3 、10Base5、10Base2、10BaseT;与 NE2000 兼容,支持 8 位、16 位数据总线;全双工,收发可同时达到 10Mbps 的速率,具有睡眠模式,以降低功耗;内置 16KB 的 SRAM,用于收
8、发缓冲,降低对主处理器的速度要求;可连接同轴电缆和双绞线,并可自动检测所连接的介质;100 脚的 TQFP 封装,缩小 PCB 尺寸。RTL8019AS 以其成熟可靠的性能和低廉的价格占领了全球 10M 网卡使用的网络芯片的大部分份额,有着极大的应用。所以在我们的设计中选用了这款芯片作为网络接入的以太网控制器。下面的图显示了使用这样的嵌入式 WEB 模块的应用结构,红色圆圈内的部分是实际的嵌入式 WEB 模块部分。二: 硬件设计这个系统的硬件设计非常简洁,作为一个嵌入式的 WEB 模块,只需要提供 DSP56805 的完整的最小系统并支持网络接口芯片。这里用到的主要器件包括:DSP56F805
9、FV80 主控制器,80MHz 运行速率,40MIPS 处理能力RTL8019AS 10M 以太网集成控制器EPM7128SQC100 ALTERA 公司 2500 门 CPLD,完成地址译码和RTL8019 的逻辑接口IS61LV12816-10T 128K16 的快速静态 RAM,作为数据 RAM和调试时的程序 RAMAT45DB041B ATMEL 公司 512Kbyte 的 SPI 接口的DataFlash,用来储存静态页面和图片的网页文件PCA82C250 Philips 公司的集成 CAN 总线驱动器MAX3232 MAXIM 公司的 3V 的 232 驱动器这些器件的逻辑连接根据
10、各自的芯片手册确定,需要注意的是 RTL8019,这个芯片的大多数逻辑为高电平有效,和我们熟悉的低电平有效逻辑是相反的。设计中,所有 RTL8019 的控制信号都通过 CPLD 给出,在 CPLD 中进行逻辑的适配调整。另外由 CPLD 给出 RTL8019 和 IS61LV12816 的片选信号。由于 DSP56F805 的数据地址片选线只有一根,必须使用外部地址译码电路才能链接多个器件。通常的使用逻辑芯片对地址译码的方式很难做到对地址的精确分配,会导致很多寻址能力的浪费。DSP56F805 的外部扩展数据区只有56KWord(EX0) ,在很多应用中并不是非常充裕,需要小心的使用,不能浪费
11、。利用 CPLD 做地址译码,可以精确的只分配 32 个 Word 的空间给 RTL8019内部的 32 个寄存器,剩余的所有外部扩展数据空间仍然分配给 RAM,保证系统最大的数据空间分配。使用了 128KWord 的 RAM,配合 CPLD 的片选逻辑,可以有效支持DSP56F805 的 Mode3 方式,将整个程序区映射到外部 RAM 中,对于开发调试非常方便。在调试完成后,可以很容易的返回 Mode0A 方式,片内运行程序。DSP56F805 所有没有使用的引腿和 CPLD 的空闲 IO 管腿都通过 64 针欧式插座引出,提供给二次开发使用。DSP56F805 的数据,地址信号并未引到欧
12、式插座,而是可以通过 CPLD 的逻辑利用 CPLD 的空闲引腿引出。这保证了整个系统的稳定可靠。下面的图是硬件线路板的效果图(实际硬件正在制作中) 。三:软件设计在这个嵌入式的 WEB 模块中,软件是关键的部分。需要编写一个可靠稳定,性能合适的 TCP/IP 协议栈,并且具有良好的使用界面(调用方法) 。占用的系统资源要尽量的少,以便为后来的二次开发和应用留下足够的资源。31 实时内核为了更好的支持 TCP/IP 运行时的调度要求,使用了一个实时的内核 uCOS-II。这是一个开放源代码的内核调度程序,具有非常好的实时特性和稳定可靠的性能。主要特点有:抢占式的调度方式,保证系统实时性多任务调
13、度,可以支持 56 个用户任务支持多种任务通信方式:信号灯、邮箱、消息队列支持内存管理可固化,可裁剪,移植性好经过实际产品的检验,可靠性和稳定性非常好。使用时,协议栈将在其中一个任务中运行,而用户程序将在另外的任务中运行。通过调用协议栈提供的 API 函数进行通信。32 TCP/IP 协议栈TCP/IP 协议是一个非常复杂的协议,简略的讲,可以分成不同层次进行开发,每一层负责不同的通信功能。例如,通常将 TCP/IP 协议分成四层:数据链路层:也称为网络接口层,通过驱动程序驱动网络接口芯片,完成物理接口细节。网络层:也称为互联网层,处理网络分组的活动。在 TCP/IP 协议族中,这部分包括 I
14、P 协议,ICMP 协议和 IGMP 协议。传输层:为两个通信的主机提供端到端的通信。TCP 提供高可靠性的数据通信,应用层在使用时可以忽略所有 TCP 传输的细节。应用层:处理特定的程序细节,通常有下列典型的应用: HTTP 超文本传输控制协议;TELNET 远程登陆; FTP 文件传输协议; SMTP 简单邮件传输协议;SNMP 简单网络管理协议。在嵌入式的网络应用中,FTP,SNMP 等协议没有实际意义,通常根据具体应用选择性的实现 HTTP、TELNET 或 SMTP 协议。这里不仔细讨论协议栈的细节和实现问题。在我们已经完成的协议栈中,提供了下列协议:ARP (地址解析协议)IP (
15、网络传输协议)UDP (用户数据报协议)ICMP (网络控制报文协议)TCP (传输控制协议)DHCP (动态主机配置协议)TELNET (远程登陆协议)HTTP (超文本传输协议)更多的协议和进一步的完善工作正在进行之中。为了帮助二次开发人员更好的使用协议栈,还编写了用户编程接口 API 函数,将协议栈提供的功能封装HTTP 应用层TCP 传输层NIC 设备驱动数据链路层IP 网络层在 API 函数中。对于 TCP 和 UDP,还创建了 Socket 结构,使得熟悉 socket 编程的人员更容易理解使用。3 3 文件系统为了支持 HTTP 协议,一个文件系统是必不可少的。所有的网页的静态页
16、面和图片都需要通过文件系统组织和存储。在我们的计划书中,曾经提出要实现 FAT32/FAT16/FAT12 的文件系统。但在进行中发现这种文件系统对于一个嵌入式的系统来说太大也太复杂,额外的消耗也太多。所以最后我们开始着手编写了一个简单实用的文件系统。这个文件系统基于 ROM,是只读的,不可以改写的。所有的文件按线性顺序依次存储,同时建立一个数据结构记录每个文件的长度,文件名和存储位置。所有文件的相应数据结构构成一个文件索引表,通过查询这个文件表可以得到所有的文件数据。只要空间允许,这个系统对文件数目和长度没有任何限制。3 4 简单的 CGI为了实现在网页上动态的根据当前设备状态显示不同的内容
17、,现有的嵌入式网络模块使用了很多“独特”的手法。例如,有一种 8051 的实现中,计算机上的浏览器会每隔一秒钟向网络模块申请刷新一次页面,网络模块立即更新页面,并重新发送。很多模块的交互控制功能甚至是通过 URL(统一资源定位)来实现的,当用户通过网页更改设备状态时,浏览器将发送一个 URL 请求,而这个 URL 并不是一个实际的网页资源,而是包含了一个更改状态的命令,网络模块也不会按照标准的 HTTP 协议解释这个 URL,而是直接执行这个命令。这些处理方法实际上都扭曲了协议族的标准。而我们的嵌入式 WEB 模块使用了动态生成网页的技术 CGI。CGI 是一个连接外部应用程序到信息服务器(比
18、如 HTTP 或者网络服务器)的标准。一个简单的 HTML 文档是无交互后台程序,它是静态的,也就是说它处于一个不可变的状态,即文本文件不可以变化。相反地,CGI 程序是可以实时执行地,它可以输出动态的信息。当然,完整的 CGI 实现对一个嵌入式的系统来说太大也太复杂,我们只是实现了最简单的 CGI 部分,可以完成浏览器和模块间的简单命令交互。总之,这个项目牵涉到很多软件的编写工作,工作量很大。很多部分只是完成了基本的功能,进一步的扩展和完善需要更多的时间来完成和检验。最后,感谢清华大学 BBS 上 Embedded 讨论区的Turbolinux, threewater,dross 和 wheregone,正是和他们的讨论帮助我们完成了这个项目。