打造国内最大的IC交易平台
技术资料 行业资讯 PDF资料 IC价格 IC替换 缩略语 IC供应 IC采购
关于最新网络门系统的开发
类别:电子综合  
 
        

    

    

     吴康 本文介绍发掘网络门锁开发的最佳途径与各技术方案比较,并重点分折网络与数码相机兼容功能的微控制器——TINI平台的技术应用。 寻找要具有网络与数码相机兼容功能的微控制器 对于个人电脑的软件开发者与嵌入式系统的开发者相比,有许多优越性,不仅是因为他们所面对的系统具有和几年前的超级计算机相匹美的处理能力和存储容量。面且,这些系统通常是是现成的。相比之下,则嵌入式系统开发者所面对的对象,不仅是规模小得多的系统,而且通常他们不得不先要完成系统设计。 由于嵌入式系统方案的选择取决于课题的规模,如果该课题相对来说是一个比较简单的设计,即只涉及到少量的用户交互操作并只需控制少量的外设,那么选用处理能力较低的8位微控制器就可以了,如8051、68HCll、或是PIC(程序中断控制器)以及它们的变种,其解决方案通常可以提供足够的能力和灵活性.反之,如果该课题需要相当多的用户交互操作,需要通过以太网通信或者需要与像数码相机那样的复杂外设通信,那么通常就要选用PC—104、StrongARM(坚固的先进精简指令集运算机器)或是其他类型的“一卡路里个人电脑”,而这些解决方案通常能够提供充裕的处理能力与复杂的操作系统以及大量的RAM。 然而,在上述这两种解决方案之间还有一片中间(或称灰色)地带,在这中间地带有三种可能方案。 第一种可能方案 当今有不少开发制造商均想要进军竞争激烈的网络门锁市场,这是由于近年来安全状况需有高度警戒的要求,为此,各公司、企事业等用户都希望安装的门锁不仅仅依靠用户的ID号码来控制用户的出入。同时也希望有这样一种电子门锁:当用户想要开门时,可以拍下用户的面部照片或拇指的指纹;而这些图像通过网络传输到中央服务器用于记录图像识别与确认;如果图像得到确认,服务器则对网络门锁作出响应,则门便为用户打开。于是制造商们(如Mr.Joe)希望他的客户都安装有这样设施的电子门锁的门。据此,至关重要的是开发制造商们必须将成本控制在较低水平。 第二种可能方案 与上述开发制造商们作竞争的对手大有人在,也正在研制一种网络相机门锁,采用的方案是8位RISC(精简指令集电脑/运算)与以太网控制器相连。但该方案中8位RISC能力不足不易实现,如采用Harvard(哈佛)结构的芯片与以太网控制器相连的方案则在能力上要强得多。然而,这些项目中的大部分都远未成熟,很难获得商业界(尤其在性能价格比上难以支持),而且,TCP/IP栈也受到了结构本身的限制。如果说这种方案应用在网络通信方面还勉强合格的话,那么用于与数码相机通信时就无法胜任了。一幅能满足要求的图像需要40kB至60kB的存储空间,还不包括与之竞争的程序存储空间。即便采用非Harvard(哈佛)结构,而又对于传统的8位微控制器来说,需要处理的工作和数据的量还是太大了。 第三种可能方案 该第三种可能研制方案采用的是嵌入式Linux(一种可免费使用的Unix操作系统)或Pocket (袖珍)PC使用的Strong ARM,它具有高速的I/O以及网络通信能力,而对嵌入式系统设计的艺术与精巧搁在一边毫不重视.故这种方案是杀鸡用牛刀,因为除了拍照的时候,处理器在大部分时间都处于空闲状态。对于这个课题,真正理想的解决方案并不需要大量的存储空间以及很强的处理能力。而运行嵌入式Linux或Pocket PC会使系统过于臃肿,对这样一个简单的装置来说,成本太高了。 相比结果,开发制造商直正需要的只是一款足以应付网络和相机的微控制器,它应比32位方案便宜得多,并且功能少得多。如果该类微控制器具有支持比用纯汇编高级的语言以简化开发过程的功能,这对开发制造商将有极大的帮助。那开发制造商将如何从性能战胜第二种可能方案,从价格上战胜第三种可能方案,而赢回其性能价格比呢?于是TINI平台出场了。将以下面三大部份:通向网络的桥梁、独特的网络相机、软件实现作分折。 什么是通向网络的桥梁或捷径 TINI——微型因特网接口是Dallas Semiconductor的产品。TINI平台被设计用来作为连接网络的桥梁:PC机可以通过TCP/IP与TINI通信,TINI可以与传感器、传统硬件或其它设备通信。TINI不仅提供大量外部接口,包括l—Wire、2线、RS—232串口、CAN(控制器局域网)以及SPI(串行外设接口),而且具有强大的网络工具,能够为IPv4、IPv6、DNS(区域命名系统)、DHCP(动态主配置协定)、PPP(点对点协议)、Telnet(远程终端)以及FTP(文件传送协定)提供支持。 目前有两种TINI参考设计。最常见的是基于DS80C390的TINIm390验证模块。TINIm390是72引脚的SIMM(单列存储器模组),包括512kB闪存、电池备份的512kB或IMBSRAM、以太网控制器和实时时钟。基于DS80C400的TINIm400验证模块是更新的版本。TINIm400是144引脚SO DIMM(小外型双列直扦式存储器模组),除了以太网MAC(媒体存储控制)已经是DS80C400的组成部分以外,TINIm400具有与TINIm390相近的结构,390和400都是8位微控制器,实际上都采用了8051微控制器核。但是,它们的性能已经大大扩展了。首先,它们的内核每个机器周期由4个时钟周期组成,而不是标准的12个时钟周期。在相同的时钟频率下,其速度比标准的8051速度提高了3倍。其次,它们具有更大的寻址空间。TINIm390验证模块支持4MB程序存储区和4MB数据存储区,而TINIm400支持连续的16MB地址空间。再则,它们支持更高的时钟频率,390支持的最高时钟频率达到40MHz,而400可以达到75MHz。最后,它们具有针对乘法和除法运算的整型数学加速器。总之,DS80C400网络微控制器是目前集成度最高的8051器件,它们提供了处于传统8位微控制器与16位/32位微控制器之间的中等处理能力,集成外设包括10/100以太网MAC,三个串行端口,一个CAN 2.0B控制器,1-Wire®主机和64个I/O引脚。为了便于访问网络,在ROM中提供了一个完整的、可被应用访问的TCP IPv4/6网络栈和OS。网栈支持最多32个并发的TCP连接,并且能够通过以太网MAC提供高达5Mbps的吞吐率。 TINI平台的一个独特之处是由Dallas开发的操作系统,它是无版税、多任务、多线程,且拥有Java语言运行环境的操作系统,可以通过免费下载获得。512kB的闪存中可以容纳下核心OS(操作系统)和库。在闪存最后一个存储区中还有足够的空间用来存储64kB的应用程序。DS80C400中还包括存放在ROM中的C语言和汇编语言程序库。 关于独特的网络相机 为了说明网络相机课题可能的解决方案,则使用TINI来实现一个流网络相机,并作为性能的基准。实际上使用的是用户化的高速DS80C400设计(图1),而不是TINIm400参考设计。这里讨论的网络相机拍下原始图像,并通过UDP(用户数据报协定)将图像传输到PC主机,与PC间的通信既可以使用主机端的软件实现,也可以通过HTTP(超文本传送协定)运行Java applet来实现。而所谓applet是一种应用程序片段,用Java语言编写的。 选用的相机是使用Omni Vision 5017 CMOS芯片的M4088模块。该相机是逐行扫描,384×288像素分辨率的黑白数码相机,提供8根数据线、4根地址线以及片选线,可以方便地使其工作在存储器映像方式下。该相机还提供了一条场同步信号线,在摄取到一幅图像时发出信号;—条行同步信号线,每扫描一行后发出信号;像素时钟,在每个像素到达时发出信号。一旦相机被初始化,就可以很容易地利用软件来访问相机。Omni Vision 5017 CMOS芯片具有内部时钟分频器,可以通过程序来控制帧频;还具有单帧模式,允许在主机的控制下摄取每一帕图像。这种模式非常有用,因为该设计中的处理器能力不足以处理相机的最高速度(50帧/秒)。 相机的400版本被设计工作在73MHz(18.4MHz×4)下。400具有内置的以太网MAC(媒体存储控制),但是需要以太网PHY(实体层)在和磁性元件。400支持许多其它的PHY(实体层),比如HomePNA(本地可编程网络存取)和HomePlug(起始扦头)PHY(实体层)。在该范例中使用Intel LXT972A通过标准MII(独立于媒体的接口)与DS80C400直接连接(见图2所示),但是需要为该(实体层)PHY(REFCLK/XI.XO引脚)提供25MHz时钟。所谓PHY(实体层)是协议栈的最底层,该层负责对传输媒介实行物理存取。 在运行中该相机需要12ns存储器。这里使用了Hitachi的HM62W8511H,可以提供足够的访问时间。启动时,处理器执行闪存中的自引导程序,将执行文件的映像从闪存复制到SRAM中,将时钟的四倍频器标志为使能,并跳转到TINI起始地址.由于高速SRAM会使电池消耗太快,因此在该配置中电路板上没有TINIm400中的电池备份的或非易失的存储器。这意味着TINI OS(操作系统)不具备永久的文件系统,但对这个课题来说影响不大,因为T1NI将在启动时创建文件系统。 TINI OS(操作系统)需要DS2502来存储MAC(媒体存储控制)地址。当不需要MAC地址时,还有一个通过I2CTM总线连接的DSl672实时时钟。这就使得了TINI不仅可以访问软件时钟,而且提供了附加的优点。如果启动时检测到了实时时钟,TINI OS将自动计算系统总线速度,并对内部定时器作出相应的调整,其中包括串口波特率、定时器标记以及网络定时。 相机的连接非常简单:由Omni Vision 5017 CMOS芯片的M4088模块可知,A0-A3,D0-D8以及WEB分别接到相应的信号线上。CFA与相机的CSB相连,使相机映射到0×800000。相机的VSYNC(垂直同步)与Pl.1相连用于读取,将PSEN与相机的OEB(输出反馈)相连。与INTl连接之前必须先将HREF(水平基准)取反,这样就可以使用电平触发方式的中断了。 软件实现 软件开发中要使用到TINI SDK(软件开发者组件),或许有人可能认为Java虚拟机不具备充分的能力来以足够快的速度采集相机数据,然而使用本地方法,TINl允许中断服务子程序被安装在与应用程序通信的操作系统之下。这正好发挥了TINI平台的强项之一,即高层协议(如HTTP)用纯Java实现,而代码中的高速部分用8051本地汇编实现。很大程度上讲,这是两个领域的最佳方案。 TINl支持JDK(开发软件包) l.1中的以下程序包:java.io、java1ang、java.net、iava.ufil和javax.comm。 TINI中的JVM(语言虚拟机)与PC中的JVM(语言虚拟机)确实存在一些差别。首先,虽然TINl支持无用单元收集,但是不支持终止。这意味着编程者需要明确地关闭使用过的资源,而不是等待系统来完成,不过这种资源管理方式对嵌入式系统开发是有利的。TINI对类的大小也有限制。任何独立的类文件不能超过64kB,一个方法最多可以有63个局部变量,数组的长度不能超过64kB,系统也被限制在8个进程和每个进程32个线程以内。然而,并不是所有区别都是关于限制条件的。比如,1.1JDK不立持IPv6,所以TINI的工具来自1.4 JDK。 除了标准的Java类,TINI还提供以下程序包:com.dalsemi.comm、com.dalsemi.fs、com.dalsemi.system、com.dalsemi和tininet。 这些程序包不仅提供底层的系统访问,而且也支持其他协议,如CAN和I2CTM。TINI还支持许多高层协议,例如,TINI SDK(软件开发者组件)中的一个范例就是一个轻型(3kB.class文件)的HTTP服务器。 软件遵循如图3所示的设计大纲。最底层是相机的中断服务处理程序,保持一个指向间接存储区中相机缓冲区的固定指针。相机被设定为单帧模式,等待一个指令来启动图像传输。指令—旦到达,图像就以一定的速率同步传输,该传输速率是通过FRCTL(控制寄存器)控制的。在400中,该传输速率被设定为10帧/秒,一帧384×288的图像以1080kB/s的传输速率在十分之一秒内被传输。 使用8051汇编浯言与相机通信非常容易。图像的每个像素都是从一个相机寄存器中同步读取的。由于相机工作在存储器映像方式下,对相机寄存器的读写需要将数据指针指向相机地址,并执行movx指令。而在传统的8051汇编语言中,将—个地址中的数据传送到另一个地址的操作包括如下步骤:载人数据指针,将存储器内容读人累加器,设置新的地址并将其写人数据指针,将累加器内容写人存储器的新地址中。 而DS80C400有四个数据指针,可以将数据从—个地址快速地复制到另一个地址中,这样就省去了所有的地址交换,使复制过程快得多。 通过对上述二种不同情况程序段的比较,可以分析出后一种程序段的循环执行速度更快,因为大部分地址处理操作都是在循环以外完成的。在存储区的块复制方面,DS80C400还为实现更快的复制操作进行了优化。首先,所有数据指针的递增操作都是单周期指令。当启用自动递增模式时,数据指针中地址递增的操作将在读或写操作完成之后自动执行。另外,还可以启用自动选择功能,在每次读或写操作完成之后,可以在两个数据指针间自动切换。这些都使存储区复制变得不可思议的方便。 回到前面的范例,HSYNC(水平同步)用来产生中断。每扫描一行后相机通过HSYNC发出信号,ISR(中断服务例行程序)激活并开始采集数据。为了提高性能,将包括调度器在内的其它所有中断都设定为低优先级,这对图像质量的影响很显著。 相机具有一个可调整的窗口,允许由用户决定使用384×288图像中多大的区域。要找到一个合适的图像尺寸比较困难,大的图像质量更好,但需要更多的传输时间并降低了帧频,在该应用中,将相机的分辨率设定为240×180,一方面这是因特网视频的标准分辨率,另一方面它还有其它硬件方面的优势。从图4可以看到,当相机传输图像时,实际上就是列举图像阵列中的每个像素,但是只有当像素落在指定窗口中,HSYNC(水平同步)线才会发出信号。这意味着在100ms周期里,一帧图像的采集消耗了3/5的CPU时间。 初始化时,相机软件从存储器管理器中分配出95kB连续的存储区,用来完成双重缓冲。在Java中,一个线程用来处理图像采集,而另一个线程则用来通过网络传输图像,Java提供所有必须的线程及锁定机制来简化上述工作。 在软件设计中位于ISR(中断服务例行程序)上层的是为Java虚拟机提供相机驱动的本地方法。TINI平台使用TINl本地接口(TNl)可以使开发者从Java访问底层代码。本地方法可调用TINI OS本地Apl(应用程序接口),允许他们访问存储群管理器、调度器和其它操作系统的内部资源。它们可以传递参数,甚至象其它Java方法那样引发异常。它们通过TINI动态链接库(TLIB)与Java可执行程序链接,TLIB可以用TINI开发套件建立。 本地方法允许Java向相机发送指令。 主方法take Photo(发送图像)用于采集一幅图像到图像缓冲区中。首先,它开放中断,向相机发送摄取一帧图像的指令。这里会出现一个小的僵局。在这个时刻Java线程最好处于休眠状态,但是它却不能通过ISR(中断服务例行程序)被唤醒,这是因为TINI OS的函数是不可重入的。为解决这个问题,TINI OS允许开发者注册查询子程序,由系统每4ms调用一次。查询子程序快速查看图像摄取的完成情况,图像摄取完成后唤醒该线程。在将该线程置于休眠状态之前,注册查询子程序。该线程被唤醒后进人lava。正如上文提到的,相机是被双重缓冲的,因此必须指定将要被覆盖的图像缓冲区,为了使Java访问下层的图像缓冲区、还需要执行get Scanlines(取得扫描线),将扫描行数据块复制到Java字节数组中去。 接下来出现的是关于存储的问题。TINI运行环境占用了512kB闪存中的7个区,只为用户程序留下1个区。正如上文提到的,在高速设计中没有非易失的文件系统,所以必须创建文件系统。比较理想的做法是将上电时需要执行的全部程序放在闪存区中,包括HTTP服务器将要用于web浏览器的Java applet。为了将applet包含在可执行文件中,applet的二进制文件被转换为与汇编程序兼容的格式,并被包含在库的数据段中。然后,由一个本地方法将其从库拷贝到Java字节阵列中。启动时,Java代码读取applet的大小,并创建一个相应的阵列,然后将applet复制到阵列中,最后将内容写入文件系统中。这个过程的确有点麻烦,但是这意味着可以从一个干净的启动环境开始,只运行所有需要的任务。以下就是用来完成这项任务的方法: /** Extracts the sample jar file from the native library. The demo application had a iar file embedded inside the native library。 This allowed the lar file,the application,and the native library all to be embedded in flash format。 oparam dummy Array tO copy jar image into。Must be of greater size than that specified in getJarFileSize( ) */ static native void getJarFile(byte[ ]dumy); */ Gets the size Of the embedded jar file */ static native int getJarFileSlze( ); 运行在相机驱动器上层的Java就简单多了,它可以运行许多线程,这些线程中的大部分都是相互独立的。首先是HTTP服务器。HTTP服务器的代码来自包含在TINI SDK(软件开发者组件)中的HTFP服务器范例。该HTFP服务器是非常轻型的。文件由TINI文件系统读 取,它是一个运行于T1NI非易失存储器中的层次化文件系统。启动后,相机app1et从闪存读出、并写入文件系统,index.html(索引超文本标记语言)页便产生了。 接下来是相机图像服务器。相机服务器有两个主线程。第一个线程在42877端口打开一个TCP服务器套接字,并等待来自applet的连接。在一个嵌入式系统中,服务器套接字是如何被打开的呢?实际上,这和在PC上完成的过程很类似, 注意到服务器套接字被同时绑定到了IPv4和IPv6端口上。这意味着不需要作任何改动就可以使相机兼容IPv6.IPv6大得多的地址空间将给网络设备带来好处。目前,它们仍要同PC、蜂窝电话和其它网络设备争夺地址。 当进程连接时,发送‘A’表示连接,或发送‘D’表示断开连接.执行连接指令后,IP地址被加人已连接地址的共享向量,而断开连接指令将把地址从该向量中去掉。 另一个线程是图像传输-如果相机向量中有一个地址,那么采集的图像将以UDP(用户数据协定)数据包的形式传输到该地址中。相机的采集和传输经过优化可以并行运行。采集是双重缓冲的,允许传输使用其中一个缓冲区,而采集发生在另一个缓冲区。由于传输时相机只使用了CPU时间的50%,囚此这是可以实现的。异步锁存全部在Java内完成。 由于没有使用图像压缩硬件,所以传输的图像是原始的。数据包的组成非常简单,每个包有一个2字节的头,随后是5个扫描行的数据。第一个字节是帧号,它是一个滚动计数器,每传输一帧后加1;第二个字节是垂直偏移除以5。 最后,有一个配置工具在串口上运行。该应用,CAmera Shell(照相机命令解释程序)是一个菜单驱动的实用程序,用于设置IP地址和显示已连接的用户。这些功能中的大部分都来自TINI SDK(软件开发者组件)中的Slush外壳。要想配置相机,用户可将相机上电,并通过串口与其通信。CASH提供了一个简单的用户界面来设置IP地址。 一旦配置完成,相机就驻留在网络中,等待用户访问。当有人通过web浏览器接人时,相机会提供applet,产生与相机服务器的连接井显示图像。虽然TINI OS(操作系统)每次支持24个同时打开的套接字,但是由于速度的原因,将对相机的访问限制在每次4个用户。采用组播可以解决这个问题,但是Java applet不支持这种方法。 网络相机使用200kB/s的平均网络传输速率,每秒采集并传输4、5帧图像。要知道这是在极少硬件支持的情况下获得的。没有图像采集和编码硬件,DS80C400同时操持着图像采集、图像传榆,网络通信、web服务以及通过串口的用户交互等等操作。 结论 由于了解到TINI是针对网络门锁的产品的理想解决方案(即,一款足以应付网络和相机的微控制器),并以此可继续开展网络门锁的研制工作。由于它是低成本高性能的解决方案,则该开发制造商开创了网络门锁市场的先河。每个门上都有装网络门锁的时间己为期不远了。 需要指出的是嵌入式设备需要针对特定的问题进行设计。如何找到功能与成本之间合理的平衡点是其中的难点。尤其是要为嵌入式装置添加网络功能时,问题就更复杂了。一种解决方法是扩展8位微控制器,使其融入网络世界。尽管这种方法是可行的,但它的速度慢将不可避免的。另一种解决方法是使用嵌入式Linux、PC—104,或Pocket PC装置。尽管这种方法速度快且响应迅速,但同时也带来了相当多不必要的功能。当然也可以构建小型的32位方案,但那需要去购买操作系统和TCP/IP栈授权。 包含TINI的DS80C400是介于两者之间的很好的方案。它具有经过长期完善的强大而成熟的TCP/IP栈,具有支持多进程、Java,线程和同步化的操作系统。处理器可以应付类似于数码相机这样的重型任务,但不需要同样重型和臃肿的操作系统。如果这种方案适用于普通的制造商,其市埸前景看好。