1. 介绍
计算机通信系统尤其是因特网" title="因特网">因特网在日常生活中的作用越来越重要,并且呈加速发展的趋势。如今,上网不再是个人电脑和网络工作站的专利,很多用微控制器(或称单片机)控制的嵌入式" title="嵌入式">嵌入式系统也成为了因特网网络节点中的一员,通常,这种嵌入式系统可称为嵌入式因特网终端" title="终端">终端。试想,如果通过网页浏览器,能够完成对远处的微控制器控制,并能够接收到微控制器采集的信号,那将给人们的生活带来很大的便利和极大地推动生产力的发展。打个比方,如果通过办公室的一台连接到因特网的电脑和安装在家里的嵌入式控制器,人们就可以了解到家里或者发生的一切,那么家居防盗等一系列问题将会等到很好的解决。
MSP430是由于TI(Texas Instruments,美国德州仪器公司)开发的16位微处理器,其突出的特点是强调低功耗,非常适用于各种低功率要求的应用,有多个系列和型号。由于其性价比比较高,所以,被广泛应用于家居自动化,医疗设备,安防系统,楼宇控制系统等许多领域当中。本因特网终端设计" title="设计">设计方案中使用的MSP430F149是TI公司于2000年增加的MSP430F1X中的一员。
2. 协议基础
ISO(Internet Standard Organization,国际标准组织)于1981年提出了OSI(Open System Interconnect,开放系统互连)七层网络模型。七层网络模型的最大优点是将服务、接口和协议这三个概念明确地区分开来:服务说明某一层为上一层提供一些什么功能,接口说明上一层如何使用下层的服务,而协议涉及如何实现" title="实现">实现本层的服务。
因特网采用的四层网络模型是OSI七层网络模型的一个子集,其具体的四层:应用层、传输层、因特网层和网络层,图1为因特网的四层网络模型与OSI七层网络模型的对应关系图。因特网模型通过数据分段(Segment)中的序列号保证所有传输的数据可以在远端按照正常的次序进行重组,而且通过确认保证数据传输的完整性。
图1 OSI七层协议与因特网四层模型的对应关系
2.1 以太网(Ethernet)[1]
以太网是目前用得最广泛的一种局域网,它在因特网四层网络模型当中,属于网络层。以太网网络中的每个节点具有相同的访问网络的权利,它们之间对网络占用是通过具有冲突检测的载波监听多路访问( CSMA/CD )的方法来实现的。数据采用曼彻斯特编码,网络中的连接一般采用双绞线或同轴电缆。以太网中每个节点具有一个48位、唯一编号的地址。每帧数据的最大长度为1518个字节,第一个48位为目标地址,第二个48位为数据源地址,然后是2个字节的数据帧类型值,在数据帧的最后,自动生成4个字节的循环冗余码校验(CRC)值,用于保证数据帧的完整性。
2.2传输控制协议TCP(Transmission Control Protocol)
TCP提供了一种可靠的数据流服务,尽管TCP是DARAP协议组中的一员,但它却有很大的独立性。它对下层网络协议只有最基本的要求,很容易在不同的网络上建成,因而非常流行。ISO/OSI运输层标准中的第四类TP-4就是以 TCP作为原型建立的。TCP可以在众多的网络上工作,可以提供虚拟电路服务和面向数据流的传输服务。用户数据可以有序而且可靠的传送。在一个分组可能发生丢失、破坏、重复、延迟或失序情况下,TCP服务可提供一种可靠的进程间通信机制,协议可以自动纠正各种差错。
2.3网际协议IP(Internet Protocol)
第三层最重要的协议是IP。它将多个网络联成一个互连网。IP的工作是将一个以上的报文处理网络联成一个网际网。IP的基本任务是通过网际网传送数据报,各个IP数据报之间是相互独立的。主机上的IP层基于数据链路层的服务向传输层提供服务。IP从源运输实体取得数据,通过它的数据链路层服务传给目的主机的IP层。网关通过下一网络数据报传到目的主机或下一网关。
2.4地址转换协议ARP(Address Resolution Protocol)
在TCP/IP网络环境下,每个主机分配的组位IP地址只是一种逻辑地址,这样在传送时必须转换成物理地址,ARP协议就是完成这一功能的。? ARP使主机可以找到同一物理网络中任一物理主机的物理地址,只需给出该主机的网际地址即可。可见,基本网络的物理编址对网络层服务是透明的。
2.5 其它协议
在因特网网络协议当中,还有其它相关的协议,如:反向地址转换协议RARP(Reverse Address Resolution Protocol)、用户数据报协议UDP(User Datagram Protocol)、网际控制报文协议ICMP(Internetwork control Message Protocol)、超文本传输协议(hypertext transfer protocol)等,它们在因特网的数据交换当中都有什么重要的作用,本文限于篇幅,不一一详细介绍。
3. 硬件设计[1]
本设计中所用到的两个重要组件为TI公司的微处理器MSP430F149和Crystal公司的以太网控制器CS8900A,下面简单介绍一下这两个组件,再论述硬件实施方案。
3.1 MSP430F149[2]
MSP430F149具有60K字节的FLASH存储器和2K字节的RAM、看门狗定时器(Watchdog Timer)、6个8位的通用I/O口、12位A/D转换器、2个串行通信接口和1个硬件乘法器等。MSP430F149的60K字节FLASH存储器足以存储网页数据, 6个通用I/O口既可以用来控制以太网控制器CS8900A,也可以用来执行其它的用户命令,12位A/D转换器可以用来在终端采集数据,然后再通过网络发给用户.
3.2 CS8900A[3]
CS8900A低功耗的以太网控制器,被广泛应用于工控机中。其高集成度的设计(在应用当中只需要极少的外围元件)和简单容用的总线接口,非常适用于本设计。目前,许多的以太网控制器都只提供PCI(周边元件扩展接口)接口,而CS8900A可以直接和微控制器相连,所以,可以MSP430F149的I/O口来直接对CS8900A进行控制,具体连接方式如图2所示。另外,CS8900A可以直接3V供电,这有利于和MSP430F149之间的电平匹配。
3.3 MSP430F149与CS8900A的接口
CS8900A有三种工作模式:I/O模式、存储器模式和直接存储器存储模式,默认为I/O模式,可通过程序使其工作于其它模式。CS8900A的各个工作模式各有优缺点,本设计当中,采用的是它的I/O模式。CS8900A共有8个16位的I/O口,这8个I/O口与片内的8个16位寄存器相对应。如图2所示,CS8900A采用8位的数据总线方式和MSP430F149的P5口相连,接口中共用到14个引脚。复位后,CS8900A默认选择I/O地址为0x300,并且一直保持该默认地址工作。
3.4 系统硬件原理
整个系统的硬件原理如图2所示,下面详细分析图中的各个模块。
CS8900A的XTAL1(97)引脚和XTAL2(98)引脚接一20MHz的晶振,由于其片内XTAL处集成了电容,所以,不需要外接电容。CS8900A的复位引脚为高有效,在芯片上电工作时,需要一个复位信号,这由R9和C17提供联合提供。CS8900A有两个不同的LED控制引脚:LANLED(100)引脚和LINKLED(99)引脚,用于控制LED以显示CS8900A的工作状态。LANLED引脚接一个红色LED(D1),当CS8900A接收或发送数据时,该引脚输出低电平,点亮红色LED。LINKLED接一个黄色LED(D2),当CS8900A和工作的以太网络连接时,黄色LED点亮。
和MSP430F149有关的电路,除了上述的和CS8900A连接的部分外,还有JTAG(Joint Test Action Group)接口、晶振和复位电路。其中,JTAG接口用于编程和调试,用一个14引脚的接头引出了TCK、TDI、TDO/TDI四个用于编程和调试的引脚,可直接和MSP430的调试工具FET(FLASH Emulation Tool)相连。用户也可以通过电平转换芯片MAX3221把MSP430F149的串行通信口也引出,以实现需要的功能。MSP430F149时钟电路部分,需要接一个8MHz的晶振和两个15pF的电容。
整个系统由3.3V的电源供电,绿色LED(D4)为整个系统的电源指示灯。为了系统扩展的需要,也可以把MSP430F149所有未用到的I/O引脚都用接头引出。
进行PCB(印制电路板)设计时,通过旁路电容滤波,以给MSP430F149和CS8900A提供稳压的电源信号。为了得到更好的系统性能和减小电磁干扰,最好能够把PCB布置为四层板。
3.5 CS8900A与局域网的接口
CS8900A片内集成了一个10M的以太网收发器,其片内集成了所有用于和局域网通信的模拟和数字电路,其可通过一个电磁隔离器E2023直接和局域网相连。电阻R1用于连接两根接收线,和两根发送线相连的电阻R2和R3则用于阻抗匹配。RJ45为网络接头,其可接10M或100的网络集线器(hub)。
4. 软件设计
本设计的软件部分主要分为四大部分:以太网模块、TCP/IP模块、API(应用程序接口)和HTTP(超文本传输协议)服务模块,全部程序用C语言编写(便于与其它微控制器系统的接口的扩展),并通过IAR Workbench for MSP430 V2.10编译。
4.1 以太网模块
以太网部分程序的主要作用是对以太网控制器CS8900A进行驱动、以函数的形式给其它模块提供读写CS8900A寄存器的接口、产生读写CS8900A的时钟等。以太网程序包含了网络接口的各种配置,其中,最重要的是,MAC(介质访问控制)地址的配置。MAC地址共48位,在程序中用6个无符号整型变量存储MAC地址值,每个MAC地址值必需为唯一的,并且不能是0xFFFFFFFFFFFF。
以太网控制器的配置过程如下:在系统上电后,首先调用函数Init8900()进行以太网控制器CS8900A的初始化配置,然后CS8900A被复位,MSP430F149把本机的MAC地址以配置序列字的形式发给CS8900A,CS8900A把MAC地址存储在寄存器中。配置完成后,MSP430F149就可以对CS8900A读写数据了。
4.2 TCP/IP模块
TCP/IP模块是整个系统软件的关键,定义了使用网络来收发数据的协议,使用以太网模块所提供的各种读写函数来接收或发送数据,并给应用层提供简单易用的API接口。
TCP/IP模块中,最重要的函数是DoNetworkStuff(),该函数的主要作用是进行TCP事件处理,应该周期性地被用户程序调用。在函数DoNetworkStuff()中,定义了一些用于标志以CS8900A和MSP430F149工作状态的标志量,该函数的工作流程如图3所示。函数DoNetworkStuff()被调用得周期越短,系统执行TCP/IP协议的性能越好。
为了更好的协调接发和发送的数据,给TCP/IP模块在SRAM中分配了三个缓冲区,TxFrame1、TxFrame2和RxTCPBuffer。其中,TxFrame1的主要作用是给要发送的TCP数据帧(包括以太网、IP、TCP帧头)提供缓冲内存;TxFrame2的主要作用是给TCP非数据帧(包括以太网、IP、TCP帧头)和ARP、CIMP协议帧提供缓冲内存;RxTCPBuffer给接收到的TCP数据提供缓冲内存。所分配的缓冲区越大,收发速度越快,因为这样可以减少因缓冲区不足造成的滞后。
可以通过主动或被动的方式调用函数TCPPassiveOpen()或TCPActiveOpen()建立网络通信连接。函数TCPPassiveOpen()函数的作用主要是用于检测到有数据包送入时,把数据包送入缓冲区,函数TCPActiveOpen()的主要作用是,把要发送的数据包送入缓冲区。在主动发送数据包之前,先设置要接收该数据包的MAC地址,并把本机地址包含进数据包。一旦连接建立完成,就可以开始发送数据,可以通过相应的接口函数读出连接的状态。当数据发送完毕,可以通过函数TCPClose()关闭连接。
在数据包收发的过程当中,不同的任务需要不同的处理时间,这个时间可以使用MSP430F149的定时器Timer_A来提供,不过必须注意的是,在使用定时器Timer_A之前,必须进行初始化,这点同使用其它微控制器是相似的。为了减少数据包发送不成功造成的错误,当接收机接收到数据后,其应当返回一个接收正确信号,当发送机超过设定时间,仍接收不到正确的接收信号时,TCP/IP模块自动进行数据包重发,这个过程可以通过相应的变量和函数来实现。
虽然,各个公司的软件处理TCP/IP协议的程序不尽相同,但幸运的是,各个公司在TCP/IP协议上的兼容性都非常好,因此,只要用户按照TCP/IP协议进行程序编写,不同的程序间的通信应该不存在多大的问题。
4.3 API(应用编程接口)
为了使用户既能够使用现在的应用,也能够建立适用自己要求的嵌入式应用,在整个软件的编制过程中,应当留一下API函数,以便于用户无需对TCP/IP协议有过多的了解也能够在原有程序的基础上进行二次开发。本软件充分考虑了这一点,给用户留出了很多AIP函数,主要的有,TCPClose()、TCPReleaseRxBuffer()和TCPTransmitTxBuffer()等。其中,函数TCPClose()的主要用处是用于关闭打开了的连接,在关闭连接之前,发送的数据包还留在发送缓冲区中以保证正确发送,连接关闭之后,用户要重新建立连接的话,必须重新设置IP地下、重新分配I/O口和重新建立连接。TCPReleaseRxBuffer()的主要作用是,在读出缓冲区的数据之后,调用此函数,无需再保存已正确读出的数据包,这样就可以腾出缓冲区用于存放新的数据包。用户可以使用函数TCPTransmitTxBuffer()通过已建立的连接发送数据,但是,在使用该函数前,用户要先检查SOCK_TX_BUF_RELEASED标志,确定是否有可用的发送缓冲区。本设计中,还提供了检查连接状态和收发状态的变量(标志),如SOK_ACTIVE、SOCK_CONNEDTED等。
4.4 HTTP应用
在进行以上的工作之后,用户就可以建立HTTP服务器,通过TCP/IP协议,实现不同的微控制器或工作站之间的通信。HTML(超文本链接标示语言)网页数据可以保存在MSP430F149的片内FLASH存储器中。网页能够完成接收数据、发送网页数据、关闭连接和等待其它应用进行连接等。并且,用户建立的网页,能够动态实时的进行数据更新。当然,无论是在普通计算机或微控制器上运行HTML网页应用程序,要实现和其它计算机进行通信,都必须如前所述,设置单一、有效的MAC地址。
5. 结束语
随着网络技术的发展,需要进行网络连接和通信的微型嵌入式因特网终端越来越多,这不仅可以应用于日常生活中,也可以应用于许多工业现场,特别是在那些分散、共享数据或需要共享某些信息的工业现场嵌入式网络终端的技术优质更加明显。此外,MSP430系列单片机的功耗非常低,很好的解决了在某些特殊场合下的电源问题。由此可见,本文所论述的设计方案具有很大的应用前景。