基于NiosII的嵌入式网络通信系统

发布者:JoyousJourney最新更新时间:2010-03-11 来源: 中国传动网关键字:NiosII  RAM  Flash  网络通信 手机看文章 扫描二维码
随时随地手机看文章

1  引言

      随着internet技术的发展,在许多领域都引起了飞跃性的变化。嵌入式系统应用领域中一个新的趋势就是开始在嵌入式设备上集成网络通信功能,比如网络监控、网络数据采集系统等,以便于通过网络与远程设备进行信息的交互和增强系统的互连性,仅仅需要一根网线就可以轻轻松松完成系统的互连。

      目前市场上的嵌入式处理器的种类很多。altera公司推出了第二代片上可编程嵌入式软核处理器nios ii,再配上其低成本、高性价比的fpga器件,使得嵌入式系统的开发变得越发方便。再者由于nios ii可配置和fpga器件可编程的特点,与专用硬件相比灵活性得有很大的优势,从而使得fpga器件在现代电子设计中得到广泛的应用。

2  系统设计

2.1 nios ii简介

      nios ii嵌入式软核处理器是altera公司推出的第二代片上可编程的软核处理器,nios ii是可配置的,用户可以根据自己的实际需要进行处理器的配置,以达到资源的合理使用,其性能可以超过200dmips。nios ii采用哈佛结构,具有32位指令集,32位数据通道和可配置的指令及数据缓冲,而且支持用户自定义指令(最多256个)以扩展cpu指令集,提升系统的性能,为可编程片上系统(sopc)设计提供了一套完整的解决方案。nios ii提供了三种内核:nios ii/f是一种高性能的内核,速度最快但消耗的资源最多;nios ii/e是低成本内核,速度最慢消耗的资源最少;nios ii/s是一种性能和成本折中的内核。本设计采用的是nios ii/s内核。

      nios ii的优势就在于其灵活性,可以根据用户的需求进行灵活的配置和裁剪。基于nios ii软核的系统设计利用altera公司提供的系统设计工具sopc builder和集成开发环境niosii ide可以进行软硬件协同设计,很大程度上缩短开发周期,在系统开发的任何阶段要都可以很方便的对系统进行修改。fpga器件丰富的逻辑资源,结合nios ii强大的处理能力,将为嵌入式系统设计提供有效的解决方案。

2.2 系统设计

图 1  系统模块图

      系统模块图如图1所示。设计采用了altera公司的cyclone ii系列芯片。在其中配置niosii软核处理器控制外围设备和协议栈的运行。而且添加了一个计算校验和的用户指令(cal_checksum)。

      片上ram用作内存运行程序;flash使用了sharp公司的lh28f160s3t-l13a,用来存储程序和配置信息,系统上电后,先将程序从flash中拷贝到片上ram运行;网络接口芯片使用smsc公司的10/100m以太网接口控制芯片lan9c111,所以在sopc builder中配置系统时,需要加上altera免费提供的lan9c111接口控制器,嵌入式设备通过lan9c111就可以接入以太网,与网络上的其他设备进行网络通信;sdram选用micron公司的mt48lc8m16a2,用来缓存网络数据,其中sdram控制器使用altera免费提供的sdram控制器。

      要提高系统的性能,一方面是提高处理器的处理能力;另一方面就是将用软件处理比较费时间的模块使用硬件模块来实现。经过分析发现,在网络协议栈的运行过程中,最耗费时间的是校验和的计算,尤其是当数据量非常大的时候。为此,专门用硬件定制了一个用户指令校验和计算指令(cal_checksum),对数据校验和的计算实现硬件加速,作为一个指令添加到niosii系统中,在协议栈程序中调用来缩短计算校验和的时间,提高处理速度,达到提升系统性能的目的。

2.3 校验和计算指令(cal_chkusm)

      在上面的分析中已经提到过,在整个协议栈的处理中,最耗时间的就是数据校验和的计算,特别是当数据长度很大时。所以在设计中将数据校验和的计算采用硬件模块来实现,作为niosii的一个用户自定义指令,以提高校验和计算的速度。在协议栈的移植过程中,将数据的宽度修改为16位,方便最后将16位校验和的计算结果添加到相应的域。

      校验和的计算需要很多个时钟周期才能完成,所以校验和计算指令使用了multi-cycle用户指令结构。multi-cycle用户指令的端口操作有:固定长度和可变长度。因为网络传输的数据长度是不断变化的,所以校验和计算指令选择可变长度操作,这也影响到端口信号的选择。

  multi-cycle用户指令结构的信号有:reset,clk,clk_en,start,dataa[31:0],datab[31:0],done,result[31:0]。其中除了reset,clk,clk_en三个信号外,其他信号都是可选的,要根据具体的应用选择。本设计中校验和计算指令用到了start,dataa[31:0],done,result[31:0]。start信号作为数据有效信号,dataa[31:0]为数据输入信号,当校验和计算完成时done信号有效,通知cpu读取result端口上的数据,因此计算校验和指令逻辑必须确保当done信号有效时,result端口上的数据有效。

      在sopc builder中添加校验和计算指令,然后重新产生系统,再在quartusii中更新并编译,在ide的重新编译一次工程,系统库中的“system.h”文件包含校验和计算指令的宏定义如下:

  #define alt_ci_cal_chksum_n 0x00000000
  #define alt_ci_cal_chksum(a) __builtin_custom_ini(alt_ci_cal_chksum_n,(a))

      用户只需要在源文件中将计算校验和部分使用上面的宏做相应的替换就可以,对用户来说这再简单不过了,就像是调用一个子函数。由此可见,基于niosii软核处理器开发的嵌入式系统,具有一般嵌入式处理器不能比拟的优势。

3  软件设计

      协议栈使用了现在在嵌入式应用领域已经很成熟的uip。如果使用altera提供的lwip协议栈,那么就得考虑其在嵌入式操作系统上的移植,这样无疑会增加系统软件设计的复杂度和代码量。

      设计的关键部分是uip协议栈在nios ii上的移植。针对niosii的特点,将uip做适当的修改,使niosii处理器的处理能力得到充分发挥,提高系统的性能。uip原来是针对8位处理器的,现在将其修改为16位,这样理论上处理能力就提高了一倍,系统的性能也就提升了一倍。

      根据tcp/ip模型结构,数据链路层和物理层使用网络接口芯片lan9c111完成;网络层和传输层协议解析在niosii中由嵌入式tcp/ip协议栈实现;应用层由用户根据需要编写。各个模块合起来共同完成网络通信功能。

3.1  底层驱动程序的编写

      lan9c111芯片的底层驱动是由altera免费提供的,可以调用这些底层驱动来完成初始化、通信建立、监听等通信功能。这些底层驱动函数是已经封装好的,用户不需要了解其细节就可以编写网络通信程序,但是为了进行高级的开发,必须对整个程序的工作机制有一定的了解。

      几个主要的底层驱动函数来完成启动、复位和初始化phy、以太网packet的收发及中断处理函数等工作:

  static void r_lan91c111_enable():用于启动芯片工作,使能发送和接收。
  int  nr_lan91c111_reset():对芯片尽心复位。
  static  int  r_lan91c111_init_phy( ):完成物理层芯片的初始化。
  int nr_lan91c111_set_irq():设置芯片的中断

  上层的通信程序调用这些函数实现网络接口的控制,通信功能的实现以此为基础。

3.2 通信软件的实现

      通信软件完成设备之间通信的主要功能,主要是uip协议栈的。传输层实现了tcp和udp,这在软件设计时就需要做不同的考虑,不同的数据传输需求要求使用不同的传输层协议,比如,实时性要求高的传输应用就要求使用无连接的udp协议;对实时性要求不高并且要保证数据传输的可靠性的应用使用面向连接的、可靠的tcp协议可以保证传输的可靠性。

  程序框架如下:

      main()
      {
        netif_init(); // 网络接口初始化
        uip_init(); // 协议栈初始化
        arp_table_init(); // arp 表初始化
        netconn_new() // 建立新的连接
        netconn_bind() // 绑定端口号
        netconn_listen() // 侦听端口
        while(1)
        {
          if (收到数据){
             …… // 处理接收的数据
           }
           else if(发送数据){
             …… // 发送数据
           }
           else
             …… // 返回准备下次处理
         }
      }

  图2是软件处理流程。

图2  通信软件流程图

4  结束语

  采用niosii进行系统设计,由于sopc builder工具的强大系统开发功能再加上niosii ide集成开发环境,使得系统的设计变得简单方便、可扩展性强,并且系统软件的设计与系统设计同时进行,大大缩短开发周期。在该网络平台的设计中,使用了嵌入式领域非常成熟的uip,并且是开放源代码的,所以对uip的移植非常的方便,只是对其进行修改以最大限度的发挥niosii处理器的特点,再加上简单灵活的用户自定义指令,对系统性能的提升起到很大作用。这个系统已经在硬件上经过了验证,可以进行可靠、稳定的网络通信,并已经应用于一个要求远程网络通信功能的数据处理机系统。

关键字:NiosII  RAM  Flash  网络通信 引用地址:基于NiosII的嵌入式网络通信系统

上一篇:基于LabVIEW和ARM嵌入式数据采集与远程传输控制系统
下一篇:基于Windows CE的便携式数据采集与处理系统

推荐阅读最新更新时间:2024-05-02 21:01

uboot-2012.04.01移植到mini2440(一)启动流程、内存分布及重定位初步分析
编译环境:ubuntu9.10 uboot版本:u-boot-2012.04.01 开发平台:mini2440 u-boot-2012.04.01启动流程: 1. 设置为管理模式 2. 关闭看门狗 3. 关中断 4. 设置时钟分频比 5. 跳转到cpu_init_crit执行 a. 禁止MMU、关闭caches b. 跳入到lowlevel_init执行 *. 初始化内存控制器 6. 设置堆栈,为跳入board_init_f做准备 a. 跳入board_init_f执行 *. board_init_f函数中进行了各种初始化,并重新设置了堆栈,为重定位代码做准备 *. 调用
[单片机]
uboot-2012.04.01移植到mini2440(一)启动流程、<font color='red'>内存</font>分布及重定位初步分析
在磁盘操作系统实模式下直接存取4GB内存分析
作为软件开发人员,大多数对于保护模式都感到神秘和不易理解。本人在开发32位微内核抢占式多线程操作系统过程中,深入了解到CPU的地址机理,在这里将分析CPU的工作原理,解开保护模式的神秘面纱,读者将会发现保护模式其实与实模式一样简单和易于控制。在此基础上用四五十行C语言程序做到进出保护模式和在实模式之下直接访问整个4GB内存空间。 虽然有许多书籍对保护模式作解释,但没有一本能简单明了地解释清楚,冗长烦杂的术语让人看着想打瞌睡,甚至还有许多用汇编写的(可能根本不能运行的)保护模式试验程序,事实上用C语言本身就可以做保护模式的进出工作。 我们可能知道CPU上电后从ROM中的 BIOS 开始运行,而Intel文档却说80x
[单片机]
Ouster推出Digital Flash系列激光雷达 适用于汽车行业
11月4日,高分辨率数字激光雷达传感器供应商Ouster宣布推出高性能固态数字激光雷达Digital Flash(DF)系列。该系列十分灵活且可扩展,专用于汽车行业。 (图片来源:Ouster) DF系列是包含短程、中程和远程固态数字激光雷达传感器的套件,可在整个视场内提供均匀的精确成像,而不会产生运动模糊。该系列没有活动部件,旨在提供一流的可靠性、耐用性和经济性。此外,它还满足汽车制造商对ADAS和自动驾驶的要求,同时可无缝集成到车辆架构和设计中。Ouster预计将于2025年在消费车辆中使用DF系列,目前已经向OEM和一级合作伙伴运送功能原型和样品。 产品特点 超清3D数据:采用突破性的固态闪存架构,测距达2
[汽车电子]
Ouster推出Digital <font color='red'>Flash</font>系列激光雷达 适用于汽车行业
C51固定ROM地址初始化数据方法
查了很多资料,要用KEIL C51在ROM(FLASH)中固定的位置写入一个初始化数据,网上有很多办法,感觉都不是很好,我最近因为要用,所以想了一个办法来实现,大家都知道在C51成立工程时都有一个扩展名为A51的源文件,这个文件其实就是程序的初始化文件,也就是在程序的开始对堆栈等东西做一个初始化;好了话不多说;下面介绍如何使用。 1、一般的工程可以不用此文件,把此文件删除就可以;但是我们要对ROM的固定地址填入数据,所以这个文件要加在工程内。 2、打开这个文件会有很长的篇幅,这些其实都是没有用的,删除就可以,只留下最后三行就可以,因为有这个文件后,编译器要知道如何转移到你的main()。看第5条。 3、在上面一个位置就可以写入如下
[单片机]
苹果日本供应链灾情调查:内存价格或大涨
  那些正在纽约苹果旗舰店外彻夜排队抢购iPad2的职业黄牛们,或许已经开始在盘算日本地震可能带来的影响了。   在苹果长长的供应商名单中,日本是十分重要的一环,业内人士在接受本报采访时警告道,这其中只要有任何一环受到地震影响,就有可能影响苹果热销产品的出货。   “台湾厂商这几天都在紧急打电话给日本的供应商,看看货源是不是受到影响。”台湾元大证券分析师张文慧告诉记者,现在情况还相当不明朗。    牵动苹果供应链   苹果对日本零部件的依赖程度一向很高。按照日本一家研究机构的说法,iPhone中从日本采购的零件占到iPhone总成本的34%。   “我们这边已经感觉不到余震了。”位于日本京都的罗姆半导体的中国籍
[手机便携]
STM32 Flash 均衡保存算法
在实际应用中,经常需要在程序运行过程中保存或读取一些数据,这些数据在工作中经常会变化,而且掉电后也不能丢失,所以需要及时地进行存储,存储这些数据常用的存储器是 EEPROM。 STM32 虽然本身不带 EEPROM,但是它支持自编程技术,可以利用内部 FLASH 来模拟 EEPROM,这样不仅简化了设计,而且降低了成本。 FLASH 的擦写次数是有限的,一般是 10W 次, FLASH 单个存储单元bit只能从1变为0,而不能从0变成1。 想要变成1,只能 page 擦除,这里的 page 表示一个擦除单位,擦除过程就是把 page 所有的位都写1,这种硬件特性决定需要一种比较高效的写 flash 算法。 总不能一
[单片机]
FLASH模拟EEPROM实验
FLSH操作总结: 1, 锁定解锁函数 上面讲解到在对FLASH进行写操作前必须先解锁,解锁操作也就是必须在FLASH_KEYR寄存器写入特定的序列(KEY1和KEY2),固件库函数实现: void FLASH_Unlock(void); 同样的道理,在对FLASH写操作完成之后,我们要锁定FLASH void FLASH_Lock(void); 2,写操作函数 固件库提供了三个FLASH写函数: FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data); FLASH_Status FLASH_ProgramHalfWord(uint
[单片机]
<font color='red'>FLASH</font>模拟EEPROM实验
stm32位带操作中对内存的浅显理解
基础知识 进制   计算机以二进制代码储存信息,每个二进制数表示一位 (bit),每8个二进制数表示一个字节 (Byte) , 而再往上的KB,就是210倍的字节,总结有以下进制关系。 1 Byte = 8 bit 1 KB = 1024Byte(210=1024) 1 MB = 1024KB 1 GB = 1024MB 1 GB = 230Byte 内存地址   内存地址使用16进制数表示,内存地址只是一个编号表示,一个内存空间,计算机以字节存储数据,所以一个内存地址对应的应该是一个字节(8 bit)的大小,这个之后会详细解释。 这里用32位机的内存做一个图例。32位机的内存地址用8位16进制数表示。 0x00000
[单片机]
stm32位带操作中对<font color='red'>内存</font>的浅显理解
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

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

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