版权归原作者所有,如有侵权,请联系我们

[科普中国]-嵌入式智能网桥

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

概述

目前,各类智能网桥设计方案基本都是CPU+MAC+PHY+RTOS+TCP/IP STACK的方式,如:PC Gateway+专用网、32位MCU+RTOS、8位或16位单片机+网络协议包,它们在实时性、可靠性、开发周期、实现难度、价格、开放性和通信效率等方面各有千秋。

PC Gateway+专用网:该方案采用专用网络(如RS232、RS485、CANBUS等)可以连接多种单片机系统。但存在如下缺点:需要依赖PC机作为网关进行协议转换,专用网络布线极为不便;需要在PC机上安装价格昂贵的专门的协议转换软件。

32位MCU+RTOS:采用32位的高性能嵌入式处理器,在RTOS(实时多任务操作系统)平台上进行软件开发,该方案可以完成很多复杂的功能。但这种方案存在如下缺点:高性能嵌入式处理器价格较贵,开发周期长;需要购买昂贵的RTOS软件,对开发人员的开发能力要求较高。

8位或16位单片机+网络协议包:该方案有如下优点:不依赖PC机或高性能嵌入式处理器,真正实现8位或16位单片机系统直接接入网络,整个系统完全自给自足;使用外围器件少,系统成本低。但是这种方法在实现过程中也存在一些问题,如8位或16位单片机的资源相对较少,提供的功能有限。随着科技的发展,一些高速度的单片机(如DS80C400)己能基本满足通常的嵌入式产品对处理性能的要求,采用软件来实现各种协议处理,便于将来在不改变硬件的情况下,只需改变内置程序即可升级整个嵌入式系统的功能。

这里提出以 DS80C400为核心处理器的一种方案1。

DS80C400介绍DS80C400是一款功能强大的网络微处理器。其内部ROM固件集成了大量可被用户程序调用的库函数,但从C中调用ROM函数比较复杂,必须将Keil C编译器规范的参数转换成ROM所使用的规范。Dall Semiconductor编写了访问ROM函数的库,可完成Keil调用用规范与ROM参数规范间的翻译工作,这样在C程序 中使用ROM函数时,只需导入相应的库,并包含一个头文件,就可使用任何一个ROM函数。这些ROM库可以支持:ROM初始化、DUCP客户端操作、进程管理、套接字函数、TFTP客户端操作、一些实用函数。除了ROM库,还有许多扩展库提供了很多ROM中没有的实用功能。这些扩展库包括文件系统、DNS客户端、I2C等等。将内部强大的ROM库应用到智能网桥系统中,不仅方便了整个系统的开发,而且大大缩短了系统开发周期和难度2。

嵌入式智能网桥介绍嵌入式智能网桥的硬件设计分析在嵌入式智能网桥的开发中,必不可少的要用到DS80C400的内部函数,要使用这一内部功能强大的ROM固件,在硬件设计时必须满足以下条件:

(1)至少64KB的SRAM,映射地址为000000h-00FFFFh。

(2)使用SRAM或FLASH存储器存放用户程序,

(3)DS2502-E48单总线器件用来保存单一的MAC地址。DS80C400在C语言应用程序中,其MAC地址可以编程获得,其方法是修改StarUp.a51文件。

(4)外接晶振振荡器或时钟。

(5)DS80C400的EA、P1.7引脚接高电平。

(6)如果使用网络启动,则P5.3引脚要接低电平,并且振荡频率至少达到7M。若要网络启动达到100M,振荡频率至少为25M2。

系统初始化及进程管理分析嵌入式智能网桥的初始化模块主要完成网络协议栈、内存管理、进程调度等相关的功能模块的加载。DS80C400的内部ROM函数是为系统初始化服务的,系统初始化最好的方法是调用init_rom()函数,该函数将拷贝其自己的中断向量表到内存,并且采样可应用的单总线器件频率作为时钟节拍,并自动寻找DS2502-E48获取MAC地址。

ROM任务管理库函数可以创建、挂起、删除任务。在C语言开发中,由于是KEIL编译器分配变量,在创建任务调用task_fork函数时,应当在临界区之内调用,且要在推出临界区之前保存号创建子任务的ID号。在主任务离开临界区之前,子任务永远得不到执行。在临界内的程序不能过长,一般100-200us是最长的时间2。

系统内存管理及文件系统内存是任何一个嵌入式系统的重要组成部分,且是一种宝贵又紧俏的资源,如何对它进行管理,不仅直接影响到存储器的利用率,而且对系统的性能有很大的影响。ROM内存管理库函数通过内存管理模块从内存池中分配和回收内存。内核内存是用户用来分配给以太网和任务控制结构作缓冲区的。内核内存库函数允许用户分配不同数量的内存作为内核缓冲区,此缓冲区与以太网缓冲区和任务控制结构一样用来系统运行速度。由内部ROM缺省分配的内核内存可能不够充足,因为多进程和多SOCKET函数都消耗内核内存。这一库函数允许用户为应用程序分配更多的内核内存。使用这一库函数有两种方法:①在init_rom()之前调用kmem_install();②使用手动初 始化函数,使用kmem_init()代替init_km()。kmem_init()是一个系统函数,应当在进程调度启用前只调用一次。

文件系统库函数是为文件系统操作和格式化输入输出数据所开发的。这个文件系统不仅能从JAVA运行环境运行,也适应于C程序函数。文件系统必须居留在连续的存储空间内。文件系统使用的最大内存容量要远远大于应用程序所占用的内存。文件系统能管理15MB的文件。文件系统库函数中包括大量的功能函数思考供用户代码直接
调用2。

嵌入式及软件系统实现嵌入式智能网桥内嵌一个WEB服务器,Web Server将参数通过网页的统一界面呈现给用户,用户也可通过网页提交修改的参数。智能网桥作为以太网和现场总线网络数据传输交换的枢纽,完成从CAN到以太网或是从以太网到CAN网络数据的转发功能。DS80C400内部ROM嵌入的TINI OS使各个任务相互独立且具有不同的优先级来保证紧急任务及时响应,从而有效地实现任务调度2。

(1)嵌入式WEB的实现

内部嵌入的工业标准SOCKET套接字方便了web服务器及ETHERNET数据的发送与接收的实现2。

(2)内嵌网页的实现

网页是一个WEB服务器必不少的,将网页以文件的形式存入到文件系统中,WEB服务器就可以从文件系统中查找相应的网页文件来响应客户端请求,在本系统采用了定义一个指针数组的方法来存放系统所需的网页。应当注意的是在使用C语言开发时,由于KEIL C本身的制约性,网页文件不能大于64K2。

(3)任务划分

本系统根据各个任务的重要性,把整个模块分成以下几个不同优先级的应用任务,嵌入式智能网桥划分了系统监控、web服务器、CAN-ETHERNET数据转发、LCD显示等任务。任务划分以后,各任务便具有独立的堆栈空间,彼此争夺CPU的使用权2。

(4)任务实现

各个任务一旦获得CPU使用权,就会独立运行,完成相应的功能。
系统监控:确保系统中每个任务工作正常,一旦发现有任务丢失,及时的创建新任务 。
WEB服务器:将参数显示和监控等功能均通过网页的统一界面呈现给用户,用户通过网页提交修改的参数。
CAN-ETHERNET数据转发:完成从CAN到以太网或是从以太网到CAN网络数据的转发LCD显示:显示智能网桥的工作状态2。

(5)任务的同步与调度

智能网桥系统中任务的执行要遵循系统调度规则,否则有可能导致系统崩溃或死机。DS80C400内嵌的任务调度程序有其独到之处,用户可以直接利用系统的接口函数编写应用程序,不需另行开发2。