datasheet
超过460,000+ 应用技术资源下载
pdf

基于ARM_Linux的无线数据采集系统

  • 1星
  • 日期: 2014-03-05
  • 大小: 2.92MB
  • 所需积分:1分
  • 下载次数:2
  • favicon收藏
  • rep举报
  • 分享
  • free评论
标签: 基于ARM_Linux的无线数据采集系统

微处理器技术、传感器技术和无线通信技术的进步,推动了无线数据采集系统的产生和发展。数据采集技术广泛应用于雷达、通信、遥感遥测等领域。在各种信息的获取中,对高速数据采集的需求非常广泛。随着测控技术的发展,对数据采集系统的智能化和网络化水平也提出了更高的要求。并且由于通讯网络的飞速发展,移动通信与实际应用的结合使得各种基于GPRS网络的无线数据传输系统成为当前远距离无线通讯领域最为广泛的应用。本课题将广泛应用的嵌入式控制器引入到数据采集系统设计中,并结合GPRS优秀的网络特性,实现了一个低功耗、智能化、网络化、软硬件可根据具体测量任务适当裁减的无线高速数据采集平台。 本设计采用32位ARM处理器S3C2410为核心器件,配以FPGA+DDRSDRAM高速数据采集模块,GPRS数据通信模块,在Linux嵌入式操作系统和应用软件的支持下,实现了数字化高速采集,数字化无线数据网络传输的现场数据采集系统。该平台采集的现场数据主要为各种传感器输出的电压模拟量。前端数据采集模块的FPGA控制高速AD转换器将输入的模拟量信号采集后,存储在由DDRSDRAM构成的大容量缓存中,再经过嵌入式系统中的微控制器进行各种处理,然后将处理结果保存在ARM系统的SDRAM内存,最后通过在ARM系统模块扩展的GPRS模块,将采集到的数据通过GPRS网络发送出去。 IAnux由于其代码开放性以及强大的网络功能等特点,在许多的嵌入式网络设备中有着广泛应用,与其他的嵌入式操作系统相比,具有着更多的优势。因此本课题将其作为硬件平台的操作系统。基于ARM的嵌入式数据采集与处理系统结构清晰、通用性好、可扩展性强,可为各种嵌入式应用提供一套完整的硬、软件解决方案,在工业测量与控制领域具有较为广阔的应用前景。

分类号:U49 10710一¥20050697 谖孝犬海 硕士学位论文 基于ARM Linux的无线数据采集系统 孙晨 导师姓名职称 申请学位级别 论文提交日期 学位授予单位 楚岩副教授 答辩委员会主席 学位论文评阅人 巨永锋教授 冯晓明副教授 郝云芳副教授 摘要 微处理器技术、传感器技术和无线通信技术的进步,推动了无线数据采集系统的产 生和发展。数据采集技术广泛应用于雷达、通信、遥感遥测等领域。在各种信息的获取 中,对高速数据采集的需求非常广泛。随着测控技术的发展,对数据采集系统的智能化 和网络化水平也提出了更高的要求。并且由于通讯网络的飞速发展,移动通信与实际应 用的结合使得各种基于GPRS网络的无线数据传输系统成为当前远距离无线通讯领域最 为广泛的应用。本课题将广泛应用的嵌入式控制器引入到数据采集系统设计中,并结合 GPRS优秀的网络特性,实现了一个低功耗、智能化、网络化、软硬件可根据具体测量 任务适当裁减的无线高速数据采集平台。 本设计采用32位ARM处理器S3C2410为核心器件,配以FPGA+DDR SDRAM高 速数据采集模块,GPRS数据通信模块,在Linux嵌入式操作系统和应用软件的支持下, 实现了数字化高速采集,数字化无线数据网络传输的现场数据采集系统。该平台采集的 现场数据主要为各种传感器输出的电压模拟量。前端数据采集模块的FPGA控制高速 AD转换器将输入的模拟量信号采集后,存储在由DDR SDRAM构成的大容量缓存中, 再经过嵌入式系统中的微控制器进行各种处理,然后将处理结果保存在ARM系统的 SDRAM内存,最后通过在ARM系统模块扩展的GPRS模块,将采集到的数据通过GPRS 网络发送出去。 Linux由于其代码开放性以及强大的网络功能等特点,在许多的嵌入式网络设备中 有着广泛应用,与其他的嵌入式操作系统相比,具有着更多的优势。因此本课题将其作 为硬件平台的操作系统。基于ARM的嵌入式数据采集与处理系统结构清晰、通用性好、 可扩展性强,可为各种嵌入式应用提供一套完整的硬、软件解决方案,在工业测量与控 制领域具有较为广阔的应用前景。 关键字:数据采集系统、FPGA、嵌入式ARM Linux、GPRS Abstract Microprocessor technology,sensor technology and wireless communications technology,promote wireless data acquisition system of production and development. Data collection techniques are widely used in radar,communications,remote sensing remote sensing and other fields.Access to information in all,the high-speed data acquisition for a wide range of needs.Measurement and Control Technology With the development of intelligent data acquisition system and network level to a higher demand. communication And as a result of the rapid development of networks,mobile communications and the practical application of the combination of GPRS—based network enables wireless data transmission system has become the most remote areas of wireless communications applications.This issue will be widely used in embedded controllers into the design of data acquisition system,combined with excellent GPRS network characteristics,the realization of a low—power,intelligence,networking,hardware and software tasks can be measured in accordance with an appropriate reduction of the specific wireless high-speed data acquisition platform. The design uses 32-bit ARM processor¥3C24 1 0 as the core devices,with FPGA+ DDR SDRAM high-speed data acquisition module,GPRS data communication module, embedded in the Linux operating system and application software support,to achieve high-speed digital acquisition,digital wireless on—site data network data acquisition system. The platform of the field data collected for a variety of main sensor analog output voltage. Data acquisition front--end FPGA module of high·-speed AD converter to control the input of the analog signal acquisition,the DDR SDRAM memory constituted by the large-capacity cache,embedded systems go through.In a variety of microcontrollers and then the results will be stored in the SDRAM memory ARM systems,the final module in the ARM system GPRS expansion module,the data will be collected through the GPRS network to send out. Because of its open—source Linux as well as powerful features such as network functions, in many embedded network devices have broad applications, and other embedded operating systems,it has more advantages.Therefore this issue as the hardware III platform operating system.ARM—based embedded data acquisition and processing system structure clear,common good,scalability,and a variety of embedded applications for the provision of a complete set of hardware and software solutions in the field of industrial measurement and control、Ⅳith more extensive application prospects. Keywords:data acquisition system,FPGA、ARM—Linux,GPRS IV 论文独创性声明 本人声明:本人所呈交的学位论文是在导师的指导下,独立进行研究 工作所取得的成果。除论文中已经注明引用的内容外,对论文的研究做 出重要贡献的个人和集体,均己在文中以明确方式标明。本论文中不包 含任何未加明确注明的其他个人或集体已经公开发表的成果。 本声明的法律责任由本人承担。 论文作者签名:A,l,文 加夕年占月5日 论文知识产权权属声明 本人在导师指导下所完成的论文及相关的职务作品,知识产权归属 学校。学校享有以任何方式发表、复制、公开阅览、借阅以及申请专利 等权利。本人离校后发表或使用学位论文或与该论文直接相关的学术论 文或成果时,署名单位仍然为长安大学。 (保密的论文在解密后应遵守此规定) 嵌 泛文 彰锛名 弓 炭 理 % 导叫 签 系 疣袭 加{年6具§日 问年吞疑r日 长安大学硕士学位论文 第一章绪论 1.1课题背景及意义 嵌入式微处理器性能以及网络技术的不断发展,正有力地推动着工业生产、商业活 动、科学实验和家庭生活等领域的自动化和信息化进程。为嵌入式产品造就了崭新而美 好的前景,同时也对无线数据采集技术提出了新的机遇和挑战。这对包括无线数据的高 速采集以及数据采集的处理、传输等课题提出新的要求。 本课题就是在此背景下产生的,在嵌入式无线采集传输平台的开发中,我们采用当 前流行的ARM9结构的¥3C2410嵌入式处理器,利用其性价比高、功能丰富、接口完善、 可扩展性强等优点将最新的移动通信技术与嵌入式操作系统融合在一起。由于嵌入式操 作系统Linux对ARM技术的支持,并且利用Linux内核可裁减,网络功能强大,代码开 放等特点,把Linux应用到嵌入式技术中,这样能充分发挥Linux的优势。论文主要从 嵌入式系统应用与实践的角度出发,以ARM处理器¥3C2410为核心,阐述了嵌入式系统 基本理论及其开发与实际应用,并建立以此为核心的嵌入式无线数据采集系统。 1.2数据采集系统概述 无线数据采集【l】的最初发展是在军事方面的应用等方面。在军事上,使用声音、压 力等传感器采集数据可以用于侦探敌方阵地动静,如人员、车辆行动情况,从而实现战 场实时监督、战场损失评估等。还可以进行战场的实时监测、目标的定位、核攻击和生 物化学攻击的监测以及搜索等功能。通过飞机或者炮弹直接将传感器节点播撒到敌方阵 地内部,或者在公共隔离带部署传感器采集数据,就能够非常隐蔽而且近距离准确地收 集战场信息。利用随机分布的大量传感器进行数据采集并组成有效网络,即使一部分传 感器节点被敌方破坏,剩下的节点依然能够自组织地形成网络。传感器网络可以通过分 析采集到的数据,得到十分准确的目标定位,从而为火力控制系统和制导系统提供精确 地制导。利用生物和化学传感器,可以准确地探测到生化武器的成分,及时提供情报信 息,有利于正确防范和实施有效反击。此外,视频、声学和其它一些传感器件可以探测 到潜在的威胁,根据传感器收集的数据可以准确发出警报。虽然固定的传感器有线网络 可以完成大多数这方面的工作,但是无线网络在需要的时候可以提供更加灵活和更大覆 盖范围的监控。同时,随着数据采集网络通信功能的增强,成本的降低,在其它方面的 l 第一章绪论 用途也越来越广泛,例如设施安全,工业监控等等。 无线数据采集系统由测量站和主控站两部分组成。测量站主要完成现场信号的采集 存储,接收遥控指令并发送数据。主控站的主要工作是发送遥控指令,接收数据信息, 进行数据处理和数据管理,随机显示打印等。其系统组成框图如图1.1 1.3嵌入式系统概述 主控站 图1.1无线数据采集系统组成框图 电子工程师协会(IEEE)瞳3(Institute of Electrical and Electronics Engineers)的 定义是:“嵌入式系统是控制、监视或者辅助设备、机器和车间运行的装置” (原位为 device used to control,monitor or assist the operation of equipment,machinery or plants)。换 言之,嵌入式系统是应用软件与系统硬件的一体化,是软硬件紧密耦合在一起的计算机 系统。 目前国内普遍采用下面描述来定义嵌入式系统:嵌入式系统是一种以应用为中心, 以计算机技术为基础,其软硬件可配置、可裁减,对功能、可靠性、成本、体积、功耗 有严格约束的专用计算机系统。它结合了先进的计算机技术、半导体技术、电子技术以 及各个行业的具体应用,被看作技术密集、不断创新的知识集成系统。嵌入式系统由硬 件和软件两大部分组成,硬件包括了嵌入式处理器和外围硬件设备,软件一般由嵌入式 操作系统和应用软件组成,嵌入式系统是集软硬件为一体的可以独立完成某具体工作的 计算机系统。 2 长安大学硕十学位论文 1.4课题主要内容及内容设置 本论文从软件和硬件两个方面入手,阐明了基于ARM9处理器的高速无线数据采 集平台的设计和建立,以及嵌入式操作系统Linux操作系统的移植并在此基础上的设备 驱动程序和应用程序的设计。在数据无线传输方面利用ARM9s3c2410控制下的外挂 GPRS模块来完成对数据的发送。 在硬件方面,主要针对250MHZ采样频率以下信号的高速采集,所以本文采用 FPGA+ARM的高速数据采集设计。在FPGA平台上,我们首先利用乒乓操作的方式将 一路高速数据信号转换成频率为原来频率1/4的4路低速数据信号,再将这四路数据分 别存储到4个FIFO中,然后再对这4个FIFO中的数据存储在FPGA片上的双端口双 时钟RAM中,最后将FPGA的双端口双时钟RAM挂载到ARM系统的总线上。数据 无线传输利用与FS2410嵌入式开发板扩展挂接的GPRS模块,将数据通过GPRS网络 发送出去。 在软件方面为了更好发挥嵌入式控制系统功能,我们移植了ARMLinux操作系统, 并在¥3C2410平台上设计实现了基于Linux操作系统的自定义的FPGA模块驱动程序设 计。在研究PPP协议的过程中,完成在内核实现PPP协议的主要功能,完成数据的无 线发送功能。 本文共分成五章,其结构如下: 一 第一章绪论。介绍课题背景,目地意义,为课题的展开做好基础。 第二章系统总体设计方案。介绍了数据采集系统硬件总体方案,并详细介绍了该 统各个组成模块的功能及硬件实现过程,其中包括数据采集模块,嵌入式控制模块和 GPRS数据传输模块。 第三章嵌入式操作系统的移植。详细介绍了嵌入式LINUX操作系统移植过程。 第四章设备驱动程序设计。主要将了在ARM LINUX体系下设备驱动的实现过程, 重点讲述了字符设备驱动,尤其是FPGA模块驱动的实现 第五章GPRS模块。基于PPP协议下,对采集到的数据进行无线传输。 第六章总结与展望。对本无线数据传输系统进行系统测试,并对该系统进行了未 来发展的展望。 第二章系统的构成 第二章系统的构成 2.1数据采集平台的总体设计 嵌入式系统通常由硬件和软件两部分组成。硬件以嵌入式微处理器为核心,扩展各 种外围设备(如存储器、显示器、触摸屏、键盘)和硬件接口,从而实现对众多上层应用 的底层硬件支持。嵌入式系统的软件可分为两大部分:开发平台的嵌入式操作系统和高 级应用程序。作为其软件开发平台的嵌入式操作系统应具备如下特征:适应于多种CPU 和多种硬件平台、性能稳定、裁剪性好、开发和使用都很容易、生成的代码质量高、可 靠性好、有一定的实时处理能力,有良好的网络功能等。 本文中的硬件采集架构采用的是ARM+FPGA架构,其中充分利用了FPGA的并行处 理的能力,以及采用乒乓原理(乒乓原理是一种用于数据流控制的处理技术)进行前端 设计。同时又利用了ARM低功耗高性能比的优点,将采集到的数据在ARM核心处理平台 上加以处理和显示,从而在较低频率(最高频率为200HZ)的ARM9平台上实现了对高速数 据的快速但低功耗的采集与显示。最后利用ARM控制平台扩展的GPRS模块将数据传送 出去。 其硬件结构框图为如图2.1所示。 数据采集模块 A/D转换器 甲甲FL呷NOR]甲I NAND 数据传输模块 FPGA SDRAM 嵌入式ARM9 S3C2410 凿白曲 OPRS模块 图2.1系统硬件结构框图 2.2前端高速ADC(模数转换器) 本系统采用AD公司生产的14位高精度高速模数转换器AD9244,它采用先进的CMOS 4 长安大学硕士学位论文 制作工艺,并采用48脚表贴封装形式。 AD9244的优点如下:采用单+5V模拟电源供电,数字电源有+3V或者+5V两种选择: 采样率高达65MSPS:40MSPS采样率时功耗仅为340Mw,在65MSPS采样速率下,功耗为 590Mw:具有750MHz的模拟输入信号带宽:最高采样速率下的信噪比可达74dB:片内集成 有高性能的采样保持放大器,输入信号可以采用单端输入,也可以采用差分输入:片内 提供的+lV N+2V参考电压可通过改变接口的电阻值来设定:具有溢出指示位(OTR),当 输入信号超出正常工作范围时置1。该位信号与14位数字输出信号中的最高位以固定方 式组合可判定输入信号是上溢出还是下溢出:可高速并行输出14位数字信号,并可通过 DFS脚将其设置为直接二进制或二进制补码形式:具有很高的欠采样性能,当输入信号为 lOOMaz、采样频率为65MSPS时,其SNR(Signal to Noise Ratio信噪比)可达70dB,SFDR (Spurious Free Dynamic range无杂散动态范围)可达82dB: AD9244可用来处理峰峰值为+5一一5V的模拟信号。输入信号和时钟信号都可以采 用差分输入形式来处理,可以使系统获得最好的性能。14位数字输出信号可以表示为直 接二进制的形式,也可以是二进制补码的形式。一位溢出表示位(OTR)可以用来标明输 出溢出信号,将这一位信号和14位信号中的最高位用一定方式组合起来可用来判定输 入信号是上溢出还是下溢出。VIN+,VIN一为模拟信号输入端。采用单输入形式时,在VIN+ 端接输入信号,VIN一端接地:采用差分形式输入模拟信号时,VIN+,VIN一分别接到差分 信号的两端。差分形式的输入对于高精度高速度的应用效果更好。大多数输入信号都是 单路形式,为了便于差分采样系统进行高速采样,本设计采用差分转换芯片AD8138来 完成实现单路信号向差分信号的转换,其电路图2.2所示。因为单端输入以一个共同点 为参考点,这种方式适用于输入信号为高电平(大于lV)且信号源与采集端之间的距离 较短(通常小于5m)的应用场合。如果不能满足上述条件,则需要使用差分输入。在差 分输入方式下,每个输入可以有不同的参考点,并且有效地消除了共模噪声的影响,所 以差分输入方式的采集精度较高。 在这里,ADC(模数转换器)主要实现的功能是将高速模拟信号(最高采样频率为 500HZ)转换成为数字信号,然后分两路传入FPGA中,同时提供对应通路的时钟信号输 出。 第二章系统的构成 2.3 FPGA模块 图2.2差分信号转化电路 双时钟FIFOI AD9244 (高速模 数转换器) PottA r CL-U ——’ 高 时钟控制 单元 ci l咄 ci KB ———■ 双时钟FIF02 双时钟FIF03 PortB 双时钟FIF04 }P【jA懊 块 .数据 总线. r RAM控制块 地址 总线 中断信 号线. ARM S3C24lO 双端口 双时钟 R八M 图2.3数据采集模块原理图 数据采集模块ALTERA公司的Cyclone EPlC6现场可编程门阵列(FPGA)。数据采集 模块原理图如图2.3。 FPGA最显著的特点之一是其并行特性。我们利用VHDL语言和 Quartus II提供的IP,结合FPGA的乒乓原理设计了一个4 FIFO结构将高速采集到的 数据进行缓冲,然后将4个8bit的FIFO输出数值拼接成32位之后放入一个双端双时 钟的RAM,同时通过检测RAM的写地址信号线以此来判断RAM写入数据量是否达到阈值。 如果达到阈值话则就在嵌入式ARM控制平台的外部IRQ中断信号,然后ARM处理器通过 Linux下的FPGA驱动程序处理RAM中采集到的数据。 6 长安人学硕士学位论文 数据采集模块充分利用FPGA在并行处理和时序逻辑设计方面的优势,利用乒乓操作方 式达到用低速模块处理高速数据流的效果。数据采集模块包括数据缓冲和数据存储两部 分。乒乓操作的处理流程描述如下:AD转换后的数据流通过输入数据选择单元等时地将 数据流分配到2个SRAM中。在第1个缓冲周期,将输入的数据流缓存到SRAMI;在第2 个缓冲周期,通过输入数据选择单元的切换,将输入的数据流存放到SI洲2,同时,将 SRAM中第1个周期的数据通过输出数据选择单元的选择,送到运算处理单元进行处理。 在第3个缓冲周期,再次切换数据的进入与输出存储模块。如此循环,周而复始。 数据采集模块数据流如图2.4 (1)数据缓冲 图2.4数据采集模块数据流 数据缓冲部分的作用是将高速数据信号分成4路低速数据,并写入4个FIFO中。 然后再构建4个先进先出缓冲器FIFOI'~FIF04,以乒乓操作模块的方式将AD9244的输 出信号分别存储到4个FIFO中。其中Port A对应的两个数据缓冲区分别为FIF01和 FIF03,Port B对应的两个数据缓冲区分别为FIF02和FIF04。 8位字节宽度的FIF01—4组成数据缓存,它们具有同频不同相的写时钟信号,并且 具有相同的读时钟信号FIFO Rdclk。 由AD9244的时序图和数据缓冲的输入时序图可以知道,数据采集启动后数据缓冲 模块FIF01一FIF04中存储数据分别为N,N+I,N+2,N+3...。时序控制模块再限定每次 启动后,都将数据从FIF01开始存放,以便满足顺序读取的要求。 7 第二章系统的构成 利用AD9244的数据输出时钟DCO+和DCO-,产生数据缓冲时钟信号,数据信号 FIF01—4分别对应数据缓冲器的数据输入时钟Wrclkl-4,如图2.4。当启动一次数据采 集时,在DCO+第一个上升沿(AD9244输出第一个有效数据),开始产生数据缓冲器的输 入时钟信号,以此来保证有效数据顺序存储到各个缓冲器中。 (2)数据存储 数据存储部分的作用,就是将前端数据缓冲部分的4路数据信号,恢复成原来采样 信号的顺序,即将原来的4路8位信号拼接成一路32位信号,并需要保持其正确的顺 序。 在每个FIFO Rdclk上升沿,同时从FIFO卜4中读取8位数据信号,并拼接成32 位数据信号,存入一个32位位宽的双时钟双端口RAM中。RAM的写时钟R/udes Wrclk 与FIFO的FIFO Rdclk必须是同频信号。由于FIFO时钟与输出之间存在有延迟(tco), 所以在此设计中采用了把FIFO Rdclk相位向后偏移一定相位的时钟信号作为RAMwrclk 的方法,以此来避免产生竞争冒险。 在存储数据时,RAM采用小端结构。所谓小端结构就是指把低字节存在低地址中, 而高字节就存在高地址中。每写入一个字(即为4个字节)的数据时,只需将FIF01-4 的输出分别连到RAM的第一到第四个字节。FIF01存储到一个字的低8位, FIF04就存 储到了同一个字的高8位,使RAM中数据顺序与采集的数据顺序相同。 数据存储控制采用中断方式进行数据流控制。每当FIFO缓冲器中存储的数据达到 某一个阈值(设定本系统阈值为32字节,FIFO的容量64字节)时,控制模块从缓冲区读 出数据并存储到RAM中。当数据存储器RAM中的数据量达到某个阈值时(本系统RAM容 量为4K字节。阈值设置为4K,也可以设置小于RAM容量的其它值),控制模块向CPU 发出数据处理中断请求,CPU通过总线直接访问RAM。 理论上当FIFO_Rdclk=CLK/4时(CLK为采样时钟),信号的存储速度与采集速度相 同,此时FIFO缓冲区所存储的数据量是不变的。但是如果FIFO—Rdclk<CLK/4时会造 成FPGA数据缓冲区溢出,反之FIFO—Rdclk>CLK/4时则会造成FPGA数据缓冲区频繁的 发出空中断,所以系统设计时最好令FIFO__Rdclk=CLK/4。对于采样频率为AD9244的最 高频率2501哪-lz时,4路缓冲器中每一路只需工作在62.5MHz时钟频率下,同时通过软件 设置FPGA的时钟发生模块寄存器的值,可将FIFO的写时钟信号进行2。分频(0<n<=7), R 以此来实现数据采样的2“分频。它的原理就是通过改变FIFO的写时钟频率,实时改变 数据存储的频率,从而达到实现改变采样频率的功能。 数据缓冲器输入时钟时序图如图2.5 氅I耋:塞:£.2 z 1.2 l!::;k童‰ 帅-雌¨姗l№咐啦吐雎n删mL广L凡n门~-]厂 一’1一—__ 岫目怫岍舶w斜Ⅻ”t呻Ⅻ呻曲叫嘲硼,砌—壮—糯l—瑚l—盟』∞{8—旷厂 L—.—广乙]1…r]广 广,’—L广●_‘一L___』一r—_.]■L.…--一—■__‘1]—.j th“_·qmh“州b^■啦州_—叫——”———————————————————————————』L土———————————一J广—_1L———一jJ_二 —— ]——一_’- -——二L—一—一. 删一却蛐一吖删阿,lW蛐… 州二.删1互… 删=Y刊… 廷… 删芷々删=… =珊=…=盟 删=二…删. =删二.1二P皿一二慧 皿二…几慧 =眦二…n慧 =几二…旧=薯二… 脏二总叭二盯=卫 且二…捌=,= -·一--rw呻-嶂¨-n咖珊u九川jUV_1jUm川Ⅳ饥mn』九nJnl『九叫”ⅥⅢⅢmU时讥们仉川Ⅳu虮川Ⅵ吖刖nⅫ巩川Ⅲ巩uⅣ九m』肌m驵叮肌叫睚删_ 呻—唧嘣州一————J1一几』_U__九_nj_U1_几j_U1_九』_U1_n_厂L.’廿乙n门J 嘲一州神 i r1 n n n n n n r]n n几n n n■几n—n n 图2 5数据缓;4器输入时钟时序 当FPGA采集到数据后,ARM通过数据总线访问这些数据,ARM总线信号与FPGA接 口为RAl{控制模块,它同时还是FPGA数据采集系统主要控制块。它的主要功能如F: ①内部包含一个16位的FPGA系统控制寄存器。ARM处理器通过驱动程序向其中的 0到7位写入特定的值来改变采样频率并且如图2.6可知COIl为控制寄存器的值.可以 看出采样时钟发生变化。 ②为FPGA的数据存储RAM和控制寄存器与ARM总线提供接口逻辑:当嵌入式控制平 台读取RAM中的数据时,RAM的数据输出总线和读地址总线直接连接到A跏总线上:当 ARM系统向FPGA的控制寄存器写入数据时,RAM的数据输^总线和写地址总线直接连接 到嵌入式AM总线上:当FPGA将采集到的数据存储到RAM中时,RAM的数据输入总线和 写地址总线由FPGA控制模块控制,此时数据输入总线和写地址总线不与ARM总线连接。 @控制数据从FIFO缓冲区输出,将数据进行拼接并存储到R枷中。 第二章系统的构成 2.4嵌入式控制平台 ¥3C2410微控制器口1是一款由韩国SAMSUNG公司专为嵌入式设备开发的低功耗、高 度集成的微控制器。它是一款基于ARM920T内核的16/32位RISC嵌入式微控制器。如 图2.6所示,ARM920T核由ARM9TDMI、存储管理单元MM[J和高速缓存三部分组成。其中, MMU可以用来管理虚拟内存,高速缓存由独立的16KB地址和16KB数据高速Cache组成。 CPl5是ARM920T的内部协处理器,用于存储系统控制以及测试控制。 ¥3C2410芯片采用272脚FBGA封装,工作温度为-40。C~+85℃,集成了大量的功 能单元,主要包括H1: ·内置外部存储器控制器 ·LCD控制器,一个LCD专用DMA,.可支持STN和TFT型液晶显示器 ·16KB数据Cache,16KB指令Cache,写缓存和物理地址TAG RAM,减小了对主存 储器带宽和性能的影响 ·4个带外部请求线的DMA ·3个通用异步串行端口UART,2通道SPI,一个多主12C总线,一个12S总线控制 器 ·一个SD接口和一个MMC接口 ·两个USB HOST,一个USB DEVICE ·4个具有PWM功能的计时器和一个内部定时器 ·看门狗定时器 ·117个通用I/O ·56个中断源,24个外部中断 ·电源控制模式:标准、慢速、休眠、掉电 ·8通道10位ADC和触摸屏接口 lO 长安大学硕士学位论文 E[盈囝 l舢·BUs∞c弧FT州.·I №Ⅲo口"mt ∞㈤∞髑[[[[卫卫]] ∞㈢E[1翟●二—兰二■●盈]_- 图2.6 ARM9S3C2410内部结构图 ·内部先进的位控制器总线(AMBA) (AMBA2.0,AHB/APB) 在时钟方面¥3C2410微控制器也有突出的特点,该芯片集成了一个具有日历功能的 RTC和具有PLL(MPLL和UPLL)的芯片时钟发生器。MPLL产生主时钟,能够使处理器的 工作频率高达203MHz。这个工作频率能够使处理器轻松地运行Windows CE(WinCE), Linux等操作系统以及进行较为复杂的信息处理。UPLL产生USB功能模块所需的时钟。 ¥3C2410将系统的存储空间分成8个Bank,每个Bank的大小是128 MByte,共1GByte。 BankO到Bank5的起始地址是固定的,主要用于ROM或者SRAM。Bank6和Bank7用于 ROM,SRAM或SDRAM,这两个Bank可编程,且大小相同。Bank7的开始地址是Bank6的 结束地址,灵活可变。所有内存块的访问周期都可编程,外部wait管脚扩展了访问周 期。S3C2410采用nGCS[7:0],8个通用片选线选择8个Bank区。 ¥3C2410支持两类启动模式陋1:一是从NAND Flash启动,二是从nGCSO片选的外部 11 第二章系统的构成 的Nor Flash启动。而NAND Flash具有容量大、比Nor Flash价格低等特点。系统一 般采用NAND Flash与SDRAM组合,可以获得非常高的性价比。S3C2410具有三种启动方 式,可通过0M[1:0]管脚进行选择: ·OM[1:0]=00时处理器从NAND Flash启动: ·0M[1:0]=01时处理器从16位宽的ROM启动: ·oM[1:0]=10时处理器从32位宽的ROM启动。 用户可以将引导代码和操作系统镜像存放在外部的NAND Flash中,并从NandFlash 启动。当处理器在这种模式下电复位时,内置的NandFlash将访问控制接口,并将引导 代码自动加载到内部SRAM(此时刻SRAM定位于起始地址空间Ox00000000,容量为4KB) 并且运行。之后,SRAM中的引导程序将操作系统镜像加载到SDRAM中,操作系统就能够 在SDRAM中运行。启动完毕后,4KB的启动SRAM就可以用于其他用途。如果从其他方式 启动,启动ROM就要定位于内存的起始地址空间Ox00000000,处理器直接在ROM上运行 启动程序,而4KB启动SRAM被定位于内存地址的Ox40000000处。¥3C2410对于片内的 各个部分采用了独立的电源供给方式: ·内核采用1.8V供电: ·存储单元采用3.3 V独立供电,对于一般SDRAM可以采用3.3V; ·VDDQ等于3.0/3.3V: ·I/O采用独立3.3V供电。 ¥3C2410微控制器有各种不同的电源管理方案,能维持最佳的电源使用方法。以下 是¥3C2410的电源管理模块能提供的四种工作模式哺1: ·Normal mode:(一般模式)这个模式下,电源时钟控制模块为CPU和全部外围设 备提供时钟,当所有设备开启时他消耗的功率最大。能通过软件设置来控制外设的开启 或关闭,以此来控制电能消耗。 ·Slow mode:(低速模式)在这种模式下,PLL不工作,时钟信号直接由外 部晶振供应。 ·Idle mode:(空闲模式)这种模式下电源不给CPU供电,但任何对CPU的中断请 求都从IDLE mode惊醒。 ·Power—OFF mode:(掉电模式)在这个模式下除了给wake-up逻辑单元供电外,电 12 长安大学硕士学位论文 源断开了其他所有的电源供应。激活Power—OFF模式需要两个独立的电源,一 个用于wake-up逻辑。另一个用于包括CPU的其他内部电路。在Power—OFF模 式下CPU和内电路电源供应被断开。从Power—OFF模式返回可以通过设置 EINT[15:0]或者通过实时时钟报警中断。 2.5 GPRS模块 目前,用于的GPRS∞1数据传输的GPRS模块有很多,比如西门子的MC35,MC35T,爱立 信的GM47,GM48等。市场上关于GPRS的应用主要使用的是西门子的MC35模块。该模块主 要具有语音、数据传输、短信服务等功能,最大传输速率可以达N85.6Kbps,特别适用 于数据的监测和传输。根据系统要求及性能价格比,在本系统中GPRS模块选用性价比很 高的MC35作为GPRS通讯模块,来达到通过GPRS承载业务传送数据的目的。 MC35具有丰富的AT指令、网络功能强大、操作灵活方便等特点,它是传统调制解调 器与GPRS无线移动通信系统相结合的一种无线调制解调器。该模块体积小、重量轻、功 耗低等优点,具有GPRS CSD和USSD CSD二种数据传输方式以及SMS和FAX功能。MC35在硬 件接口上也作了特别完美优化,MC35具有40脚的ZIF接口,主要有电源接口、标准RS232 双向串口、SIM卡接口和模拟语音接口等,使之更适应嵌入式开发平台。 MC35模块的主要特点有: ①单电源供电,供电范围为3.3-4.8V,典型电压为4.2V: ②可工作于双频EGSM900和GSMl800(GSM Phase2+)模式,工作于EGSM900时功耗为2 瓦,工作于GSMl800时功耗为l瓦。 ③支持多时隙GPRS功能,其分为B类GPRS终端(即可附着在GPRS和GSM电路型业务上, 但两者不能同时工作): ④支持文本和PDU模式的短消息,内部提供2~5条短消息的存储位置: ⑤本模块支持GPRS上行数据传输速率最高达到21.4Kbps,GPRS下行数据传输速率最 高达N85.6Kbps,,支持CS一1, CS~2, CS-3,CS一4等四种编码方案。 MC35模块主要由GSM基带处理器、GSM射频部分、电源ASIC电路、Flash存储器、SRAM 13 第二章系统的构成 以及ZIF连接器和天线接口组成。MC35模块的结构如图2.7所示。 图2.7 MC35模块结构图 MC35的数据接口为支持TTL电平的RS232接口,共有九根信号线,分别是TxD, RxD,DTR,DSR,CTS,RTX,GND,RING,DCD,它提供给上位机与MC35模块命令和数据的传输 通道,可以通过AT指令集进行参数配置,最高速率可达1 15200bps。MC35模块与SIM卡 是机卡分离设计的,要登录至tJGPRS上,还必须通过其SIM卡接口扩展外部SIM卡插槽。MC35 模块的SIM卡接口符合ISO 7816-3 IC卡标准。 MC35模块的SIM卡接口共有6个引脚,各个引脚的作用和定义如下: ①CCRST: SIM卡复位。.由基带处理器提供。 ②CCCL.K:SIM卡时钟。基带处理器可以根据需要设置不同的时钟频率。 ⑨CCIO: 串行数据线。负责数据的输入和输出。 ④CCIN: 检NSlM卡。以此检测插槽中是否有卡,输入到基带处理器:如果SIM 卡在操作过程中SIM卡拔出,SIM卡接口将立即关闭。这个功能是为了防止SIM卡损坏。 虽然如此,还应该避免在工作过程中插入或者拨dJSIM卡。 ⑤CCVCC:为SIM卡供电电源。 ⑥CCGND:为SIM卡接地。 14 长安大学硕士学位论文 MC35模块在启动过程的一秒钟内对SIM卡进行初始化,这个操作过程和CCIN弓I脚的 高低密切相关,如果MC35启动过程中CCIN弓I脚为低,MC35模块将尝试初始化SIM卡,并 在这种情况下,仅当插槽内有SIM卡时初始化才能成功。 2.6本章小结 本章从硬件结构上分析了系统的构成,并对主要的4个模块进行了系统细致的分析。 这4个模块分别为前端高速ADC(模数转换器)、FPGA模块、嵌入式控制平台以及GPRS 模块。这4个模块从硬件上完成了数据从采集到无线传输的过程。 第三章嵌入式操作系统LINUX移植 第三章嵌入式操作系统Ll NUX移植 3.1嵌入式操作系统Linux Linux从1991年问世到现在,短短的十几年时间已经发展成为功能强大、设计完善 的操作系统之一,并且在新兴的嵌入式操作系统(Operating System,简称0S)领域中也 获得了飞速发展。嵌入式Linux是指对标准Linux经过小型化裁剪处理之后,能够固化 在容量只有几K或者几M字节的存储器芯片或者单片机中,适合于特定嵌入式应用场合 的专用Linux操作系统。嵌入式Linux的开发和研究是操作系统领域中的一个热点,目 前己经开发成功的嵌入式系统中,大约有一半的操作系统是使用Linux。Linux之所以 能在嵌入式系统市场上取得如此辉煌的成绩,与其自身的优良特性是分不开的。下面就 对Linux做如下介绍: 图3.1 Linux内核结构 如图3.1,Linux内核主要由5个模块组成,他们分别是:进程调度模块、内存管理 模块、文件系统模块、进程间通信模块和网络接口模块。进程调度模块用来负责控制进 程对CPU资源的使用。所采取的调度策略是各进程能够公平合理地访问CPU,同时保证 内核能及时地执行硬件操作。内存管理模块用于确保所有进程能够安全合理的使用主机 内存,同时内存管理模块还支持虚拟内存管理方式,使得Linux支持进程使用比实际内 存空间更多的内存容量。并可以利用文件系统把暂时不用的内存数据块交换到外部存储 设备上,当需要时再交换回来。这样有利于优化系统的系能。文件系统模块用于支持对 外部设备的驱动和存储。虚拟文件系统模块通过向所有的外部存储设备提供一个通用的 文件接口,隐藏了各种硬件设备之间的不同细节,从而提供并支持于其他操作系统兼容 的多种文件系统格式。进程间通信模块子系统用于支持多种进程间的信息交换方式。网 16 长安大学硕士学位论文 络接口模块提供对多种网络通信标准的访问并支持许多网络硬件。 嵌入式Linux是由Linux裁剪过来的,所以嵌入式Linux操作系统具有以下特点: 1)广泛的硬件支持。Linux能够支持x86,ARM,MIPS,ALPHA,PowerPC等多种体 系结构,目前它已经成功移植到数十种硬件平台,几乎能够运行在所有流行的CPU上。 Linux有着异常丰富的驱动程序资源,支持各种主流硬件设备和最新的硬件技术,甚至 可以在没有存储管理单元(删U)的处理器上运行使用,这些都进一步促进了Linux在嵌 入式系统中的应用。 2)内核高效稳定。Linux内核的高效和稳定已经在各个领域内得到了大量事实的验 证,Linux的内核设计非常精巧,分成进程调度、内存管理、进程间通信、虚拟文件系 统和网络接口五大部分,其独特的模块机制可以根据用户的需要,实时地将某些模块插 入到内核或从内核中移走。这些特性使得Linux系统内核可以裁剪得非常小巧,很适合 一 于嵌入式系统的需要。 3)开放源码,软件丰富。Linux是开放源代码的自由操作系统,它为用户提供了最 大限度的自由度。由于嵌入式系统千差万别,往往需要针对具体的应用进行修改和优化, 因而获得源代码就变得至关重要了。Linux的软件资源十分丰富,每一种通用程序在 Linux上几乎都可以找到,并且数量还在不断增加。在Li nux上开发嵌入式应用软件一 般不用从头做起,而是可以选择一个类似的自由软件作为原型,在其上进行二次开发。 4)优秀的开发工具。开发嵌入式系统的关键是需要有一套完善的开发和调试工具。 传统的嵌入式开发调试工具是在线仿真器(hi-Circuit Emulator,ICE),它通过取代 目标板的微处理器,给目标程序提供一个完整的仿真环境,从而使开发者能够非常清楚 地了解到程序在目标板上的工作状态,便于监视和调试程序。在线仿真器的价格非常昂 贵,而只适合做非常底层的调试。如果使用的是嵌入式Linux,一旦软硬件能够支持正 常的串口功能时,即使不用在线仿真器也可以很好地进行开发和调试工作,从而节省了 一笔不小的开发费用。嵌入式Linu为开发者提供了一套完整的工具链(Tool Chain), 能够很方便地实现从操作系统到应用软件各个级别的调试。 5)完善的网络通信和文件管理机制。Linux从诞生之日起就与Internet密不可分, 支持各种标准的Internet网络协议,并且很容易移植到嵌入式系统当中。此外,Linux 还支持ext2,fat32,romfs等文件系统,这些都为开发嵌入式系统应用打下了很好的 17 第三章嵌入式操作系统LINUX移植 基础。 由于以上几个特点和优势,结合本次设计的要求,在本课题中采用了嵌入式Linux 操作系统,这样更好发挥嵌入式控制系统功能。 ARM—Linux的移植应该遵循以下步骤: ①移植Boot loader: ②下载Linux内核及其关于ARM平台的补丁,并根据硬件平台修改内核源码: ③建立交叉编译环境并进行LINUX内核裁减: ④制作根文件系统: ⑤烧写内核及文件系统: 3.2嵌入式系统开发模式 宿主机 目标机 . Rs-232C,Ethemet,…… 图3.2福王机一目标机模式 宿主机一目标机(Host—Target)模式是嵌入式系统常用的开发模式,如图3.2。其中 宿主机是指完成操作系统的裁剪和应用软件开发的计算机(包括台式机和工作站),目标 机通常是指待开发的嵌入式系统的硬件平台。其原理:在宿主机上完成软件功能,然后 通过串口或网口将交叉编译生成的目标代码传输并下载到目标机上,并在监控程序或者 操作系统的支持下利用交叉调试器进行分析和调试,最后目标机在特定环境下脱离宿主 机单独运行。 采用宿主机一目标机开发模式进行嵌入式系统开发,具有整体设计思路清晰,便于 系统分工,容易同步开发的特点。在宿主机一目标机开发模式中,交叉编译和远程调试 是嵌入式系统开发的重要两个特征。 18 长安大学硕士学位论文 1)交叉编译。宿主机上的CPU结构体系和目标机上的CPU结构体系是不同的。为了 实现裁剪后的嵌入式操作系统和应用软件能在目标机上正常运行起来,这就需要在移植 它们之前,在宿主机上建立新的编译环境,进行和目标机CPU相匹配的编译,这种编译 方式称为交叉编译。新建立的编译环境称之为交叉编译环境。交叉编译环境下的编译工 具在宿主机上配置编译实现,必须是针对目标机CPU体系的编译工具。只有如此,对源 代码编译生成的可执行映像才会被目标机的CPU识别运行。 2)远程调试。远程调试是一种允许调试器以某种方式控制目标机上被调试进程的运 行方式,并具有查看和修改目标机上内存单元、寄存器以及被调试进程中各个变量值等 各种调试功能的调试方式。调试器是一个单独运行的进程。在嵌入式系统中,调试器运 行在宿主机的通用操作系统之上,被调试的进程运行在目标机的嵌入式操作系统中,调 试器和被调试进程通过串口或者网口进行通信,调试器可以控制、访问被调试进程,读 取被调试进程的当前状态,并能够改变被调试进程的运行状态。 3.3 Linux在ARM硬件平台上的移植的资源 1)硬件资源 嵌入式ARM—Linux移植所需的硬件资源n61有: PC机,嵌入式硬件平台,简易JTAG 烧写器,交叉串口线,M-F并口线,3.3V稳压电源。其中简易JTAG烧写器一端通过20 芯扁平线与开发板JTAG调试接口相连,另一端通过并口线与PC机并口相连,主要用于 嵌入式裸板程序烧写和简易调试。串口线一端与开发板串口1(CON600)相连,另一端与 PC机串口相连,是PC机与开发板交互的唯一通道。BootLoader(解释见后)写好后, 还可以用于烧写程序。 2)软件资源 Flash烧写程序。可通过简易JTAG向嵌入式开发板烧写程序。选择烧写程序是一定 要确定其支持板上的Flash型号,最好使用开发商提供的烧写程序,否则容易出现意外 错误甚至破坏Flash。 19 第三章嵌入式操作系统LINUX移植 3.4 BootLoader介绍与设计 3.4.1 BootLoader简介 BootLoader心们就是在操作系统内核运行之前运行的一段程序。通过这些程序,我们 可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适 正确的状态,以便为最终调用操作系统内核准备好正确的环境。从操作系统的角度看, BootLoader的总目标就是正确地调用内核来执行。 在嵌入式系统中,BootLoader是严重地依赖于硬件来实现的。不同的嵌入式体系结 构对于BootLoader的要求是不同的,此外,BootLoader对嵌入式板级设备的配置有具 体的要求。所以,在嵌入式系统开发中建立一个通用的BootLoader几乎是不可能的。 Bootloader乜31有两个主要模式,其功能如下: ①发布模式,自动引导Linux系统,为系统初始化各种参数。 ②调试模式,这样能够方便的下载内核,引导内核。 由此可见BootLoader是操作系统的必备前置程序。嵌入式Linux操作系统内核启 动时需要很多参数,这些参数必须通过BootLoader来传递,并且内核一般是压缩存放 到外存上的,从外存到内存的拷贝也是由BootLoader来完成的,BootLoader还能对操 作系统内核进行调试,所以嵌入式操作系统移植的成功与否与BoadLoader密不可分。 3.4.2 BootLoader的设计 根据ARM9S3C2410的体系结构以及本系统的需要,本系统BootLoader设计为2部 分,汇编部分(start.S)和C语言部分(2410bios.0)。汇编部分主要执行硬件初始化, 其中包括中断、时钟、端口、8个bank的总线宽度以及时序控制的初始化,汇编程序还 负责将BootLoader从Flash Rom到SDRAM的搬移过程。汇编代码执行完毕后就跳进入C 语言部分,C语言部分实现更加复杂的功能,具有更好的可读性和可移植性,主要功能 是负责初始化数据、设置启动参数、串口通信等复杂功能。C语言部分通过菜单完成加 载等管理功能或加载操作系统。 BootLoader启动流程如图3.3,具体分为以下几步: 1.初始化中断向量 长安大学硕士学位论文 ¥3C2410的中断向量表必须放置在从0地址开始的位置,连续32字节的空间里。每 当触发一个中断时,ARM处理器便强制将PC指针置为向量表中对应的中断类型的地址 值,程序执行将自动跳转到该向量所对应的地址空间。因为每个中断只能占据向量表中 1个字的存储器空间,只能放置1条ARM指令,因而中断向量表中通常放置一条调转指 r 开始 、 \ / ^ 屏蔽所有中断信号 』 设置CPU的时钟频率 』 存储器、控制寄存器 初始化 』 初始化堆栈 』 检测FLASH ROM、 ·完成数据搬迁 r 跳转到mai程序 』 设置系统时钟 』 GPIO端口初始化 』 中断向量初始化 i 串口、MMU等初始化 检测键盘与RTS状态 』 LCD初始化及检测 J 测试FLASH ROM状 态 l 加载操作系统 Start.S 2410biOS.O 图3.3 BootLoader流程图 令或向PC赋值的指令,使程序能从向量表里跳转到相应的中断服务程序(ISR)中再执行 相应的运算处理。 具体中断向量表的程序实现如下所示: AI迮A Boot,CODE,I冱ADONLY ENTRY B Reset Handler A复位中断木/ 2l 第三章嵌入式操作系统LINUX移植 B Undef Handler A未定义中断木/ B SWI Handler /木软件中断水/ B PreAbort Handler A指令预取中断术/ B DataAbort—Handler /木数据访问中断木/ B 办保留中断木/ B IRQ—Handler /水夕f、部中断术/ /木快速响应中断术/ 其中的关键字ENTRY是指定编译器保留这段代码,以避免编译器可能会认为这是一 段冗余代码而加以优化。连接的时候要确保这段代码被链接在0地址处,并且作为整个 程序的入口点。 2.设置时钟频率 在进入Linux系统前,CPU的频率设置为96MHz,进入嵌入式Linux内核后¥3C2410 以200MHz的全速频率运行。 3.初始化存储器系统 该部分主要包括存储器类型和时序配置的初始化以及存储器地址的分配。¥3C2410 中的内置存储控制器共有8个存储bank,其中bankO---bank5可以接ROM或SRAM型的存 储器,bank6"--bank7可接ROM或SRAM型以及FP/ED0/SDRAM型的存储器。¥3C2410中共 有13个存储控制寄存器。在这些寄存器里,对各个BANK的总线宽度、访问时序都有详 细的控制,因为BANK6与BANK7还可以与SDRAM接口,所以BANK CON6和BANK CON7中 还有对SDRAM列地址位数以及刷新周期的设置。在Start.S程序中,对整个内存控制 特殊功能器组定义了一个初始化好的双字数组,利用一个数据传输的循环来完成对所有 存储器系统控制的设置。 4.初始化堆栈 因为ARM处理器有7种状态,每一种状态的堆栈指针寄存器(SP)都是独立的(除了 System和Use模式使用相同的SP寄存器)。因此对程序中需要为每一种模式都要给SP 长安大学硕士学位论文 寄存器定义一个堆栈地址。方法是改变状态寄存器CPSR内的状态位,使处理器切换到 不同的状态,然后给SP赋值。进入Use模式后就不能再操作CPSR返回到其他模式了。 因此这样可能会对接下去的程序执行造成影响。 另外在Start.S定义了五种模式的SP指针,堆栈初始化代码如下: InitStacks mrs rO,cpsr bic rO,rO, #MODEMASK /术模式位清0,其他位不变术/ 01T rl,rO, #UNDEFMODE l NOINT/木设置模式位木/ msr cpsr cxsf,rl ldr sp,=UndefStack orr rl,rO,#ABORTMODE l NOINT /*Undef模式,lc/ /木0x33ff5c00术/ 序设置模式位木/ msr cpsrcxsf,rl ldr sp,=AbortStack 01T rl,rO,#IRQMODE l NOINT /*Abort模式木/ /水0x33ff6000木/ /半设置模式位木/ msr cpsrcxse rl ldr sp,=IRQStack /*IRQ模式,lc/ /水0x33 ff7000木/ OIT rl,rO,#FIQMODE I N01NT msr cpsr cxs£r1 ldr sp,=FIQStack bic r0,r0,#MODEMASK f NOINT 01T rl,rO,#SVCMODE msr cpsrcxs£ rl ldr sp,=SVCStack /木设置模式位木/ /,FIQ模式术/ /木0x33ff8000术/ /木模式位清0,其他位不变:Ic/ /木设置模式位木/ /*SVC模式木/ /木33ff5800半/ 第三章嵌入式操作系统LINUX移植 5.程序映像的搬移 嵌入式程序里,程序影像结构图如图3.4。 Zl(Zero Initialized R/W)Data 只定义了变量名 的全局变员 RAV(Read/Write Data) 定义时带初始值 的全局变员 RO(Code Ro Data) 编译结果 图3.4程序影像结构图 程序映像一开始总是存储在ROM/Flash里面的,因为RO段是只读的,在运行的时 候不可以改变,故它可以在ROM/Flash里面执行,当然也可以转移到速度更快的RAM中 去:因为RW段是可以读写的,Rw和ZI这两部分必须转移到可写的RAM里去,所以在运 行的时候RW段需要被装载到SDRAM或者SRAM里,并将ZI段清零,以保证程序的正常 运行。所谓应用程序执行环境的初始化,就是完成必要的从ROM到RAM的数据搬迁和ZI 段的内容清零。 6.初始化必要的GPIO端口 在启动程序里面初始化一些输出设备相关的GPIO乜33端口(如LED),可以验证程序 的运行是否正常。 7.主程序跳转 当所有的系统初始化工作完成之后,就需要把程序流程转入主应用程序。转入主程 序的最简单方法是直接从启动代码跳入应用程序主函数入口。在本系统里主程序函数为 main0,因此在start.s中的代码如下: GBLS main_entry main_entry_SETS ”Main” IMPORT¥main.entry 24 长安大学硕上学位论文 GotoMain DCD¥main__entry 8.Linux内核的调用 BootLoader:调用Linux内核的方法是直接跳转到内核的第一条指令处,即直接跳 转到Lviem START+OxS000地址处。在跳转时必须满足下列条件: (1)CPU寄存器的设置 ·RO为0: ·R1为机器类型ID; ·R2为启动参数,标记列表在RAM中的起始地址。 (2)CPU模式 ·必须禁止中断(IROs和FIQs): ·CPU必须设置为SVC(超级用户模式)模式。 (3)Cache和MMU的设置 ·MMU必须关闭: ·指令Cache可以打开也可以是关闭状态: ·数据Cache必须关闭。 3.5建立交叉编译环境并进行对LINUX内核裁减 3.5.1建立交叉编译环境 嵌入式系统开发环境‘11】一般采用宿主机一目标机(Host—Target)模式。其具体开发 过程就是首先在通用PC机上编写程序,通过交叉编译生成目标平台上可运行的二进制 代码,再下载移植到嵌入式平台上的特定位置上运行。在主机端和目标板之间需要通过 某种方式进行通信,如使用RS一232串口。这种通信的目的在于便于发送控制指令和传 输数据,同时获得反馈信息。采用交叉编译的主要原因在于,多数嵌入式目标系统不能 提供足够的资源供编译过程使用,因而只能将编译工程转移到高性能的PC机中进行,然 后再将系统代码进行移植。 第三章嵌入式操作系统LINUX移植 Linux下的交叉编译环境主要包括以下几个部分: 针对目标系统的编译器gcc 针对目标系统的二进制工具hinutiis,包括ar,objcopy,strip工具集 目标系统的标准C库glibc 目标系统的Linux内核头文件 GUN Make工具 可通过两种方式建立ARMLinux交叉编译环境:手动方式和使用集成环境。,这里我 们只介绍使用集成环境建立方法。在Internet上我们可以得到一些整套的开放源码嵌 入式Linux开发工具,常用的有Denx公司的ELDK和Timesys公司的Timesys Linu/GUN。 这些工具链包含了基本交叉编译工具GCC、Binutils、GDB,而且包括可以直接使用的 RAMDISK Image文件和文件系统制作工具等许多工具和元件。这里我们使用的是ELDK, 下面简单介绍ELDK配置安装和使用的过程: 1)首先从http://sunsite.utk.edu/ftp/pub/linux/eldk/获得源码光盘锄-2006-01—16.iso 2)建立ELDK安装目录。mkdir/opt/eldk 3)挂载源码光盘:mount/dev/cdrom/mnt/cdrom 4)运行install安装脚本,安装ELDK到指定目录: /mnt/cdrom/edld/eldk··arm—·linux--x86/install··d/opt/eldk 5)安装完成后,输出CROSS—COMPILE环境变量 export CROSS—COMPILE2arm—linux- 6)在PATH变量中加入编译工具目录 PATH=¥PATH:/opt/eldldusr/bin:/opt/eldk/bin 交叉编译环境建立好后,在目标机上运行的可执行代码都可以由它来编译,可以充 分利用主机的丰富资源,方便高效的生成目标应用程序。 长安大学硕七学位论文 3.5.2 Linux裁减与编译 Linux的配置菜单有好几个版本: 1)make config:进入命令行,可以一行一行的配置。 2)make menuconfig:进入菜单式配置。 3)make xconfig:目前刚刚推出的Linux 2.6.X[21]内核用QT图形库。由KConfig经由 脚本解释器产生。Linux2.6.X的xconfig界面比较友好,菜单结构清晰,使用也更方便, 容易掌握。但它却没有menuconfig菜单稳定,有些机器跑不起来。下面以较稳定,但不 够友好的menuconfig为主进行介绍。 menucortfig在选择相应的配置时,有三种选择方式,它们分别代表的含义如下: Y.将该功能编译进内核 N.不将该功能编译进内核 M一将该功能编译成可以在需要时动态插入到内核中的模块 使用make menuconfig时,需要使用空格键进行选取。在每一个选项前都有一个括 号,有的是中括号有的是尖括号,还有圆括号。用空格键选择时可以发现,中括号里要 么是空,要么是“+’’;,而尖括号里可以是空,“掌"和“M”。这表示前者对应的项要么 不要,要么编译到内核里;后者则多一样选择,可以编译成模块。而圆括号的内容是要 在所提供的几个选项中选择一项。 使用菜单式配置,而配置菜单本身结构庞大,内容复杂。刚开始时我们是参考目标 板的默认配置来进行修改的。¥3C2410默认配置文件是{1Path}/arch/arm/configs/s3c2410 defconfig。在此我们只对本系统相关配置项作一些必要介绍,其他项可以参考相应的 Kemel-config.Howto文档。这里具体到我们的移植工作,主要是对s3c2410 CPU及NAND 相关设备驱动的配置和文件系统支持的配置。 1)Code maturity level options代码成熟度选项,它有子项: prompt for development and/or incomplete code/drivers 该选项是对那些还在测试阶段的代码,驱动模块等的支持。一般应该选这个选项, 除非只是想使用Linux中己经完全稳定的东西。但这样有时对系统性能影响挺大。 27 第三章嵌入式操作系统LINUX移植 2)Loadable module support动态加载模块支持选项,其子项有: enable module support支持模块加载功能,选择此项。 kemel module loader如果启用这个选项,可以通过kemel程序的帮助在需要的时候 自动载入或卸载那些可载入式的模块。 3)System type系统类型。CPU类型和相关的内容,选中s3c2410 CPU。 4)General setup通用选项 support hot-plugable devices对可热拔插的设备支持,要对U盘等USB设备进行控 制,要选上。 Networking support网络支持,用到网络设备要选上。 NWFPE math emulation一般要选一个模拟数学协处理器,选上。 5)Networking option 网络选项,它主要是关于一些网络协议的选项。Linux号称网络操作系统,它最强 大的功能也就是在于对网络功能的灵活支持。这部分内容相当多,一般我们把以下几项 选上。 unix domain socket:对基本UNIX socket的支持。 TCP/IP networking:对TCP/IP协议栈的支持。 Networking deveices.-网络设备支持。主要是网卡,选CS8900支持。 Ethemet:(10 or 100Mbit)十至百兆以太网设备,是关于具体网络设备(一般就是网 卡)的信息。 6)Console drivers support.- 控制台设备支持。目前安装Linux的设备几乎都是带控制台的,所以这项是必选项。 7)Memory Technology Device(MTD)support.. MTD包含flash,RAM等存储设备。MTD在现在的嵌入式设备中应用得相当多,也 特别重要。选中该项可以对MTD进行动态支持。因为我们要驱动NandFlash,选中以 长安大学硕士学位论文 下几项: MTD partitioning support:该项支持对MTD的分区操作。我们在对嵌入式设备的操 作系统移植过程中往往要对MTD进行分区,然后在各分区放置不同的数据。以让系统 能被正确引导启动。 Direct char device access to MTD devices选该项为系统的所有MTD设备提供一个字 符设备,通过该字符设备我们能直接对MTD设备进行读写以及利用ioctl()函数来获取 该MTD设备的相关信息。 NAND flash device drivers子项中有几项是关于MTD设备驱动的,我们的平台选择 的是NAND flash,所以我们选上它。选上后在其二级子项中我们还要选上: NAND devices support NAND设备支持,在其子项中选中 verify NAND pages writes支持页校验 s3c2410NAND flash device support s3c2410 NAND设备支持 8)block devices块设备,该项下也有好几个子项,主要是关于各种块设备的支持。 把RAM的支持项选上。 RAM disk support RAM中虚拟的Flash盘 Initial RAM disk(initrd)support初始化启动盘 9)File systems文件系统支持 Kernel automounter version 4 support V3版本的升级,它兼容V3,在有NFS文件 系统的支持下,选择该项可使得内核可以支持对一些远端文件系统的自动挂载。 ROM file system support它是一个非常小的只读文件系统,主要用于安装盘及根文 件系统。 Second extended fs support EXT2(二版扩展文件系统),除非用DOS模拟器否则得选 它。 Ext3 journalling file system support是EXT2的日志版,通常叫它EXT3 0 Journalling Flash file system V20ffs2 support 29 Flash日志文件系统。 第三章嵌入式操作系统LINUX移植 proc file system support这是虚拟文件系统,能够提供当前系统的状态信息。 它运行时在内存生成,不占任何硬盘空间。通过CAZ,命令可以读到其文件的相关 信息。 NFS file system support对网络文件系统的支持。NFS通过SLIP,PLIP,PPP或以太网 进行网络文件管理。它是比较重要的。 10)character devices Linux支持很多特殊的字符设备,所以该项下的子项也特别多 virtual terminal虚拟终端 support for console on virtual terminal虚拟终端控制台 Serial drivers串口设置,一般选上自己开发平台相关的串口就行 ¥3C2410 serial port support和support for console on¥3C2410 serial port watchdog card support对看门狗定时设备的支持 Enhanced Real Time Clock Support在每台PC机上都内建了一个时钟,它可以产生 出从1Hz到8192Hz的信号。在多CPU的机器中这项必选。 11)USB support即对USB设备的支持,如果有相关设备就选上。 12)sound card support关于声卡的支持,根据自己的情况来配置。 在完成内核的裁减之后,内核的编译就是一个非常简单的过程。但是在首次编译时 应注意输出信息,以便针对出现的错误修改内核相应代码。 (1)make clean这条命令是在正式编译你的内核之前先把环境给清理干净,保证没有 不正确的文件存在。 (2)make dep这条命令是编译内核相关依赖文件。 (3)make zlmage这条命令就是最终的编译命令。 等编译完成以后,会生成镜像文件arch/arm/boot/zlmage,把这个文件下载到开发板 上的内核分区,重新启动,就会看到Linux2.6的内核启动信息。 长安大学硕士学位论文 3.6 YAFFS文件系统移植 11 YAFFS文件系统简介 YAFFS,Yet Another Flash FileSystem,是一种类似于JFFS/JFFS2的专门为 Flash设计的嵌入式文件系统。与JFFS相比,它减少了一些功能,因此速度更快、占用 内存更少。YAFFS还带有NAND芯片驱动,并为嵌入式系统提供了直接访问文件系统 的API。NAND Flash大多采用MTD+YAFFS的模式。 2)YAFFS文件系统的移植 yaffs代码可以从http://www.alephl.CO.ukJarmlinux/projects/下载(yaffs代码包括 yaffses ecc.C,yaffses fileem.c,yaffs_fs.C,yaffs-guts.C,yaffs_mtdi#c,yaffsramem.C) (1)内核中没有YAFFS,需要自己建立YAFFS目录,并把下载的YAFFS代码复制 到该目录下面。 #mkdir fs/yaffs #cp枣.C fs/yaffs (2)修改fs/Kconfig,使得可以配置yaffs: source”fs/yaffs/Kcontig” (3)修改fs/makefile,添加如下内容: obj一¥(CONFIG_YAFFS_FS) +=yaffs/ (4)在yaffs目录里面生成makefile和Kconfig文件。其中Kconfig主要是为了配置 YAFFS相关的选项。Makefile主要是指定要生成的.O文件,其内容为: yaffs-obj s:=yaffses_fs.O yaffsguts.O yaffs_mtdif.o yaffs—ece.o EXTRA—CFLAGS+=¥(YAFFS—CONFIGS)一DCONFIQKERNEL一2—6 (5)修改vivi分区,预留YAFFS空间。在/arch/arm/math—s3c24 1 0/mach—smdk24 1 0.C 找到smdk_default_nand_part结构,修改nand分区,如下: struct mtd__partition smdk_default_nand_part[]={ 31 第三章嵌入式操作系统LINUX移植 name ”vivi”, size =0x00020000, offset=0x00000000, name =”param”, size =0x000 1 0000 0frset=0x00020000 ) { name=”kemal”, size =0x00 1 d0000 OfrSet=0x00030000 name=”root” size =0x00200000 0frset=0x00200000 name--”user” 32 长安大学硕士学位论文 size =OxOlbfc000 0frset =0x00400000 (6)配置内核时选中MTD支持: Memory Technology Devices(MTD)…> <幸>Memory Technology Device(MTD)support [宰]MTD partitioning support ······User Modules And Translation Layers <幸>Direct char device access to MTD devices <幸>Caching block device access to MTD devices NAND Flash Device Drivers 一> <幸>NAND Device Support <宰>NAND Flash support for¥3C24 1 0 SoC [木]¥3C2410 NAND driver debug (7)配置内核时选中YAFFS支持: File systems 一> Miscellaneous filesystems …> <木>Yet Another Flash Filing System(YAFFS、file system support [木]NAND mtd suppoa [枣]Use ECC functions ofthe genetic MTD—NAND driver 【幸]Use Linux file caching layer 33 第三章嵌入式操作系统LINUX移植 [宰]Turn off debug chunk erase check [木]Cache short names in RAM (8)编译内核并将内核下载到开发板flash的相应分区中。 3.7根文件系统的创建 启动后系统引导会出现panic错误信息,原因是此时系统只是启动了一个核心,没 有提供系统启动后要运行的第一个程序init的根文件系统(rootfs),要使其启动到字 符界面交互状态,就要提供一个根文件系统。嵌入式Linux系统可以使用CRAMFS,JFFS2, RAMDISK等多种根文件系统。这里我们介绍使用BusyBox建立CRAMFS和RAMDISK根文件 系统的过程。 1)根文件系统的基本结构。根文件系统的顶层目录各有其特殊的用途,而且根据不 同的需要,顶层目录也不尽相同。下面是一般要包含在其中的重要目录: /bin一保存大多数象init,busybox,shell、文件管理实用程序等二进制文件: /sbin-保存系统启动过程通常需要的命令。 如e2fsck,mke2fs,fdisk,insmod,rmmod,depmod,modprobe,lsmod,shutdown,reboot, login,init,getty,mount,umount等: /dev-包含用在设备中的所有设备节点: /etc一包含系统的所有配置文件: /proc-这是一个必须设置的特殊目录,在系统运行之后它下面有许多内容, 这些内容是实时、不断跟踪系统内核和正在运行的进程的状态而产生的,但不占用任何 磁盘空间,而是驻留在内存中;在某些情况下,可以通过它来进行系统设置,许多工具 从这里获取信息,如dmesg,ps,top等;在内核编译选项文件系统选择中,我们选 择对文件系统proc的支持: /1ib-包含所有必需的库,根据/bin和/sbin目录下的可执行文件需要的动态 链接库来确定lib目录下的内容。 现在建立一个目录/mkdir/rootfs作为放置根文件系统的目录。并在其中建立必要的 目录:mkdir bin shin dev etc proc lib Bsro 2)编译BusyBox。BusyBox是一个著名的开源项目,它是许多嵌入式Linux系统的 基石,其网站目前位于http://www.busybox.netl。它用一个极小型的应用程序来提供 长安大学硕士学位论文 上述位于/bin和/sbin中的整个命令集的功能,它还支持动态和静态方式链接glibc, 允许根据需要修改缺省配置,选中或移除所包含的命令。Busybox提供的配置界面与 Linux菜单配置界面非常相似。下面简要说明其使用过程。 (1)首先要到网站下载busybox源代码,目前最新版本为busybox一1.1.1.tar.gz: (2)解压源文件包:tar—zxvf busybox一1.1.1.tar.gz; (3)建立一个符号链接并进入目录 In—S busybox-1.1.1 busybox cd busybox; (4)进行相关配置:make menuconfig。其中最主要的是指定交叉编译器路径和 busybox要运行的平台类型。我们的交叉编译器路径设为: /opt/eldk/usrlbin/arm·-linux·- 移植平台为: :ARCH=arm 选中不使用/usr项,否则生产的busybox命令会覆盖当前系统的原有命令。 其它都是相关命令,可根据需要进行选择。最后保存退出。 (5)交叉编译busybox。 Make all make instal l 完成后会在install目录下产生/bin和/shin目录,其中包含的就是可以在目标平 台上运行的命令。可以看到,除了busybox是可执行文件外,其它都是指向busybox的 链接,当执行一个命令时,会自动执行busybox,由busybox根据调用命令执行相应操 作。 (6)将生成的命令拷贝到上面建立的相应目录中。 cp—a./bin/木/bootfs/bin cp—a./sbin/术/bootfsi/sbin 再从交叉编译器中拷贝需要的glibc库文件至U/rootfs/1ib下。 3)建立CRAMFS。CRAMFS是只读压缩的根文件系统,不能修改,在安装介质中运 行。制作CARMFS较简单,使用mkcramfs工具: Mkcramfs/rootfs rootfs.cramfs 生成的rootfs.cramfs就是CRAMFS文件系统,可以直接烧到Flash相应分区中。 4)建立RAMDISKa RAMDISK文件系统制运行在am中,运行时可写,但掉电易失。 RAMDISK所占ram空间的大小取决于内核的配置,在内核配置的时候,可以修改RAMDISK 35 第三章嵌入式操作系统LINUX移植 大小(缺省为4096k)。以制作一个默认大小(4M)的RAMDISK为例,步骤如下: (1)在宿主机上编译运行在目标机Linux内核时,将block device中的Ramdislf 支持选上,设定Ramdisk的大小为缺省的4096K,对initrd的支持也选上。 (2)在宿主机上建立/myramdisk目录,按照上述的原则建立必要的目录和文件。 (3)执行下列步骤: 在根目录下建立一个文件myram,从设备文件/dev/zero中读取数据填充文件 myram(注:/dev/zero是一个特殊的设备文件,从这个文件读出来的数据全是off,以便 后面得到更高的压缩率): #dd if=-/dev/zero of=-/myram bs=lk count=4096 将此4M的Ramdisk空间格式化为ext2类型的文件系统: #mke2fs—mO-F/myram 4096 在/mnt下建立目录ram,将己格式化ext2类型文件系统的ramdi sk挂载至目录 /mnt/ram上: #mount一0 loop/myram/mnffram 将宿主机上/myramdisk目录下的文件结构拷贝至//mnt/ram目录中(这就相当于 拷贝至文件myram中了): #cp—av/myramdisk/幸/mnt/ram 卸载掉/mnt/ram: #umount/rnnffram 产生一个压缩的映象文件: #gzip-v9/myram/myramdisk.img.gz 最后将生成的myramdisk.img.gz下载到Flash相应的分区中。 5)关于启动脚本。一般系统启动时都会按要求执行相应的初始化操作。写在命令 行里就是init=/linuxrc,这个linuxrc是指向/etc/init.d/rcs文件的一个符号链接。在rcs 文件中列出了linux初始化时要执行的文件,例如,初始化进程init,挂载根文件系统, 挂载模块化设备驱动等。rcs的作用大致上相当于windows中的autoexec.bat文件。由 于对于不同应用,rcs的内容变化太多,在此不作叙述。具体内容可参考相关文档。我 们使用的rcs文件格式如下: #!/bin/sh /bi n/mount——a 长安大学硕士学位论文 mount—t yaffs/dev/mtdblock/l/usr/ ifconfig lo 127.0.0.1 ifconfig ethO 59.67.92.207 route add default gw 59.67.92.1 boa—c/usr/boa& 完成上述操作之后,通过命令mkcramfs root root.cramfs即生成了cramfs文件 系统的镜像root.cramfs。最后内核与文件系统镜像通过tftp烧写进ARM平台的。 3.8本章小结 本章成功的完成了ARM—Linux在嵌入式控制平台的移植,并对其核心技术的 BootLoader、YAFFS文件系统以及根目录的创建进行了详细的介绍,为在操作系统 hRM_Linux下完成各个设备的驱动做好了铺垫。 37 第四章设备驱动程序设计 第四章设备驱动程序设计 4.1设备驱动程序简介 设备驱动程序是介于硬件和Linux内核之间的软件接口,是一种低级的、专用于某 一硬件的软件组件,在Linux内核中扮演着特殊的角色。它是一个独立的并使某个特定 的硬件响应一个定义良好的内部编程接口,同时完全隐藏了设备的工作细节。用户操作 通过一组标准化的调用完成,而这些调用是和特定的驱动程序无关的。将这些调用映射 到作用于实际硬件的设备特定的操作上,则是完成设备驱动程序的任务过程。 Linux系统盯1的设备分为字符设备(char device)、块设备(block device)和网络设 备(network device)三种。下面我们就分别简单介绍如下: 字符设备是指存取时没有缓冲,能够像字节流(比如文件)一样被访问的设备,由字 符设备驱动来实现这种特性。字符设备通常至少要实现open,close,read和write这 些简单系统调用。字符设备可以通过文件系统节点(女I/dev/ttyl)来访问,它和普通文 件之间的惟一差别在于,对普通文件的访问可以前后移动访问指针,而大多数字符设备 时只能顺序访问的数据通道。然而,也存在和数据特性类似的字符设备,访问它们时可 以前后移动指针。例如,帧捕捉卡就是这样一个设备。 块设备也是通过/dev目录下的文件系统节点被访问的。块设备(例如磁盘)上能够容 纳文件系统。Linux允许应用程序像字符设备那样读写块设备,可以一次传递任意多个 字节的数据,块驱动程序除了给内核提供和字符驱动程序一样的接口以外,还提供了专 门面向块设备的接口。另外块设备的接口必须支持挂载(mount)文件系统。 网络设备在Linux里作专门的处理。Linux的网络系统主要是基于BSD UNIX的 socket机制。在系统和驱动程序之间定义有专门的数据结构进行数据传递。系统里支持 对发送数据和接受数据的缓存,提供流量控制机制和对多协议的支持。 由于本系统的FPGA都主要是字符设备,所以我们这里只对字符设备驱动作一下详 细介绍 4.2字符设备驱动程序的具体实现 4.2.1设备驱动中关键数据结构 设备驱动程序的关键数据结构n们有:fi le—operations数据结构、mode数据结构和 38 长安大学硕士学位论文 file数据结构。而写驱动程序的任务之一从某种意义上就是完成file—operationsqb的 函数指针。 内核内部通过file结构识别设备,通过file—operations数据结构提供文件系统的 入口点函数,也就是访问设备驱动的函数。file—operations定义在<linux/fs.h>中的 函数指针表。 struct file-operations{ stmct module木owner; loff t(木llseek)(struct file*,loff t,int); ssize—t(幸read)(struct file*,char*,size_t,loff_t·). ssize—t(*write)(struct file*,const char*,size_t,loff_t幸). int(木readdir)(struct file*,void*,filldir_t); unsigned int(幸poll)(stmct file*,struct poll—table_struct木); iIlt(宰loctl)(struct inode*,struct file*,unsigned int,unsigned long); i11t(mmap)(struct file*,struct vm_area_struct牛); int(木open)(struct inode木),stmct file宰); int(木flush)(struct file木); int(木release)(struct inode木,struct file木); int(}fsync)(struct file*,struct dentry*,int datasync); int(母fasync)(int,struct file*,int); int(幸lock)(stmct file木),int,street file-lock木); ssize—t(幸readv)(struct file*,const struct iovec*,unsigned long,lofft幸); ssizet(·writev)(struct file*,const struct iovec*,unsigned long,lofft·); ssize_t(木}sendpage)(struct file母),struct page幸),int,size t,loff t,int); 39 第四章设备驱动程序设计 unsigned long(木get unmapped_area)(struct file*,unsigned long,unsigned long,unsigned long,unsigned long); 这个结构的每一个成员的名字都对应着一个系统调用。在用户进程利用系统调用对 设备文件进行诸如read/write操作时,系统调用通过设备文件的主设备号找到相应的设 备驱动程序,然后读取这个数据结构相应的函数指针,接着把控制权交给该函数,这是 Linux的设备驱动程序工作的基本原理。 4.2.2设备驱动开发中的基本函数 设备驱动程序n钉所提供的入口点,在设备驱动程序初始化的时候向系统进行登记, 以便系统在适当的时候调用。在Linux系统中,通过调用register chrdev向系统注册字 符型设备驱动程序。 int register chrdev(unsigned int major,const char宰name,struct file_operations木fops) 定义中的major是为设备驱动程序向系统申请的主设备号,如果major为0,则系统 为该驱动程序动态地分配一个主设备号,不过系统分配的这个主设备号是临时的。name 是设备名。fops是对各个调用的入口点的说明。此函数返回0表示成功,返回一INVAL表 示申请的主设备号非法,一般来说使主设备号大于系统所允许的最大设备号。返回 -EBUSY表示所申请的主设备号正在被其他设备驱动程序使用。如果动态分配主设备号成 功,则此函数将返回所分配的主设备号。如果register—chrdev操作成功,则设备名就 会出现在/proc/devices文件里。 初始化部分一般还负责为设备驱动程序中请系统资源,包括内存、中断、时钟、I/O 端口等。这些资源也可以在open子程序或别的地方中请。 (1)内存操作 作为系统核心的一部分,设备驱动程序在中请和释放内存时不是调用malloc和 free,而代之以调用kmalloc和kfree函数。kmalloc等函数返回的是物理地址,而malloc 等返回的是线性地址。它们在mm/slab.c文件中定义。 void奉kmalloc(sizesize,int flags) 长安大学硕士学位论文 void kfree(const void木objp) 参数size为希望中请的字节数,objp为要释放的内存指针。 (2)中断 在Linux系统里,对中断的处理是属于系统核心的部分,因此如果设备与系统之间 以中断方式进行数据交换,就必须把该设备的驱动程序作为系统核心的一部分。设备驱 动程序通过调用request_irq函数来申请中断,通过free—irq来释放中断。它们的定义 如下: int request_irq(unsigned int irq, void(}handler)(int,void*,struct pt regs枣), unsigned long irq_flags, const char枣devname, void木devid) void free_irq(unsigned int irq,void幸dev._id); 在驱动程序初始化时,Linux内核通过register—irq注册这个中断,并把中断信息 添加到irqaction数组中,从而将中断号和中断服务联系起来。irqaction的数据结构如 下: struct irqaction{ . void(木handler)(int,void*,struct pt regs拳); unsigned long flags; unsigned long mask; const char’name; void·deV_id; struct irqaction}next; 4l 第四章设备驱动程序设计 根据设备的中断号可以在数组irq__action中检索到设备的中断信息。 (3)I/O端口 每个连接到I/0总线上的设备都有自己的I/O地址集,访问I/OH的函数有(以读字节 为例): inline unsigned int inb(unsigned short port); //读取某个端13的值 inline unsigned int inb_p(unsigned short port); inline void outb(char value,unsigned short port); //向某个端口赋值 inline void outb__p(char value,unsigned short port); 其中inb__p和outb_p插入了一定的延时以适应某些慢的I/0端口。 与中断和内存不同,使用一个没有中请的I/0端口不会使CPU产生异常,也就不会导 致诸如“Segmentation fault”这类错误的发生。在使用I/0端口前,应该检查此I/O端 口是否己有别的程序在使用。若没有,再把此端口标记为正在使用,在使用完以后释放 它。 (4)计时器 在Linux系统中,时钟是由系统接管,设备驱动程序可以向系统申请时钟。与时钟 有关的系统调用有: kemel/timer.c.> void add—timer(struct timer list事timer); int del—timer(struct timerlist+timer); inline void init timer(stmct timerlist幸timer); struct timerlist的定义为: struct timerlist{ strudt list head list; unsigned long expires; 42 长安大学硕士学位论文 unsigned long data; void(术function)(tmsigned long); ); 4.2.3字符设备驱动程序的基本方法 (1)初始化(initialize) 驱动程序必须有一个初始化方法,在把驱动程序载入系统的时候会调用这个初始化 程序。它做以下几个方面的工作: ①检测设备,在初始化程序里可以根据硬件的特征检查硬件是否存在,然后决定是 否启动这个程序; ②配置和初始化硬件,在初始化程序里可以完成对硬件资源的配置,比如即插即用 的硬件就可以在这个时候进行配置; ③配置或协商好硬件占用的资源后,就可以向系统申请这些资源,有些资源是可以 共享的,如中断,有些是不能共享的,女.IDMA,接下来需要初始化device结构中的变量。 最后,硬件正式开始工作。 (2)打开(open) open方法是驱动程序用来为以后的操作完成初始化准备工作的。此外,open还会增 加设备计数,以防止文件在关闭前模块被卸载出内核。open一般完成以下工作: ①检查设备相关错误(诸如设备未就绪等相关硬件问题); ②如果是首次打开,初始化设备; ③分配和填写要放在flip一>private_data里的数据结构; ④增加使用计数。 (3)关闭(release) release方法和pen相反的工作,可以释放某些资源以减少系统负担。release--般完成 的工作是: 43 第四章设备驱动程序设计 ①使用计数减l; ②释放在flip.>private_data67分配的内存。 (4)读取(read) 数据从设备复制到用户空间,返回负值表示出错,正值表示成功完成的字节传输数 目,如果这个值比理论值小,表示只有部分数据成功传送,这种情况下一般会重新读取 数据。 (5)写入(write) 写方法与读方法类似,它的任务是将数据从用户空间复制到设备。返回值含义和read 相同。 4.3 FPGA模块设备驱动程序设计 前面已经介绍过了FPGA模块的硬件设计,以及把它作为一个外设挂接到ARM ¥3C2410嵌入式控制平台的方法。为控铝tJFPGA,实现数据采集,需要一个FPGA模块的 驱动程序。在系统中FPGA模块n射会在新采集的数据量达到阈值之后I句S3C2410发出中断 信号,驱动程序接收并处理这个中断。因为¥3C2410执行数据处理应用程序负担很重, 所以驱动程序实现通过异步通知的方法告诉应用程序有新数据到达,而不是通过阻塞型 I/0方式或查询方式。图4.1是用户应用程序通过FPGA驱动程序控制系统工作的流程图。 长安大学硕士学位论文 图4.1 驱动程序要完成的功能如下: ①初始化FPGA模块,注册FPGA设备、申请中断号等。 ②接收FPGA模块的中断信号,并进行中断处理。 ③通过写FPGA模块的控制器改变采样频率。 ④异步通知应用程序有新数据到达。 ⑤将FPGA的存储空间映射到用户进程空间。 45 第四章设备驱动程序设计 初始化FPGA模块¨们和注册需要在FpgLillit()函数中完成,由于中断号是有限的 资源,所以应该在设备被打开时再申请中断号,函数的主要部分如下: s3c241 o-f1)ga_base=(unsigned int宰)ioremap(FPGA PHY START,4); devfs_fpga_dir=devfs mk dir(NULL,DEVICE_DIIt,NULL); devfs_fpga_raw=devfses_register(devfs_fpga__dir,DEVICE NAME, ’。 DEVFS—FL—DEFAULT,FPGA_MAJOR,FPGA_MINORS—IFCHR l S—IRUSR l S—IWUSR,&fpga_fops,NULL); ioremap(FPG—UHY_START,4)将4个字节I拘FPGA控制器的物理地址映射至内核空 间,这样驱动程序就能够通过操作指针s3c2410es fpga_base来控带IJFPGA,这样的设备控 制操作通过ioctl方法来支持的。 Ioctl系统调用为设备驱动程序执行“命令”提供了一个设备特定的入口点。与read 方法不同,ioctl是与设备密切相关的,它允许应用程序访问被驱动硬件的特殊功能,如 设备配置、进入或退出某种操作模式等。这些控制操作通常无法通过read/write文件操作 完成。例如向串口用write写入的所有东西都被作为数据发送,因此便使用了ioctl方法改 变波特率。而在FPGA模块中,我们需要改变FPGA的采样频率,与串口类似也需要通过 ioctl完成。 在用户空间内调用ioctl函数一般具有如下原型: Int ioctl(int fd,int cmd,...); 参数列表中的点代表可变数目的参数表,但是在实际系统中,系统调用不会真正使 用可变数目的参数,必须确定参数个数。所以原型并不是数目不一定的参数,而是可选 参数,并且它的具体形式依赖于要完成的控制命令,也就是第二个参数。某些控制命令 不需要参数,某些需要一个整数参数,而某些则需要一个指针参数。另一方面,设备驱 动程序的ioctl方法,是按照如下原型获取其参数的: Int(木ioctl)(struct mode幸inode,struct file+flip,unsigned int cmd,unsigned long arg); inode和flip两个指针的值对应于应用程序所传递的文件描述符fd,参数cmd由用户空 间不经修改地传递给驱动程序,可选的arg参数则无论用户程序使用的是指针还是整数 46 长安大学硕士学位论文 值,它都以unsigned long的形式被传递给驱动程序。如果调用程序没有传递第三个参数, 那么驱动程序所接收的arg没有任何意义。在FPGA驱动中,我们通过arg参数调整FPGA 采样频率,在我们FPGA驱动程序的ioctl方法中主要是一条语句: writel(arg,s3 c24 1 0_fpga_base); 语句向FPGA的控制器写入fljarg参数代表的命令,s3c2410_fpga_bas。这个命令是 Open方法中获得I拘FPGA控制器地址的映射。通过写入不同的参数argn-]'以获得不同的采 样频率。 在这个系统中我们处理FPGA设备的中断处理分为两部分,第一部分是中断处理程 序,主要任务是对FPGA数据采集系统的中断做出应答,并做一些复位操作。在我们的 系统中需要根据缓冲区中的数据量来决定是否停止FPGA数据采集系统,通过向FPGA控 制寄存器写入命令来实现。第二部分是中断处理的下半部,我们使用tasklet实现,主要 任务是异步通知应用程序。 。 异步通知的意思是一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需 要查询设备状态,这一点非常类似于硬件上“中断”的概念,‘比较准确的称谓是“信号 驱动(SIGIO)的异步UO”。为了启动文件的异步通知机制,用户程序必须执行两个步骤。 首先,它们制定一个进程作为文件的“属主(owner)”。当进程使用fcntl系统调用执行Fes SETOWN命令时,属主进程的进程ID号就被保存在filp.>fownerqb,这一步的目的是让 内核知道通知谁。然后为了真正地启动异步通知机制,用户程序还必须在设备中设置 FASYNC标志,这是通过fcntl命令F SETFL完成的。执行完这两步之后,输入文件就可 以在新数据到达时请求发送一个SIGIO信号。 4.4驱动程序编译 驱动程序编写完成后,接下来是对程序进行编译。Linux有两种方式使用驱动程序: 直接静态编译到内核中;在运行时动态加载(也就是内核模块)。静态编译就是把驱动程 序直接编译到内核里,系统启动后可以直接调用而无需安装。静态编译的缺点是调试起 来比较麻烦,每次修改一个地方都要重新编译下载内核,效率较低,而且这样也增加了 内核占用的空间。动态加载利用了Linux的module特性,可以在系统启动后用insmod命 令把驱动程序(.O文件)添加上去,在不需要的时候用rmmod命令来卸载。在台式机上一 47 第四章设备驱动程序设计 般采用动态加载的方式,在嵌入式产品里可以先用动态加载的方式来调试,调试完毕后 再编译到内核里。本系统在对驱动程序完成调试之后,都将它们静态编译入了内核。 静态编译驱动程序步骤如下: ①将驱动程序的源文件和头文件都拷贝到对应目录下,如char类型的设备 对应目录为driverslchar。 ②修改此目录下的Config.in和Makefile文件。 ⑨重新编译内核。 4.5本章小结 本章对系统的驱动程序的设计进行了详细的介绍,尤其是字符设备的驱动(字符设 备包括FPGA模块)。 长安大学硕士学位论文 第五章GPRS模块 5.I GPRS概述及其特点 GPRS(general packet radio service)简称通用无线分组交换业务,是一项高速 数据处理的技术,它以分组交换技术为基础,构建于GSM之上。用户通过GPRS可以在移 动状态下使用各种高速数据业务,包括收发E2mail,进行Internet浏览等,并提供端到 端、广域的无线IP连接。它将使得通信速率从56k一直上升到171.2k,与原有的GSM相比 较,GPRS不仅支持计算机和移动用户的持续连接,与在数据业务的承载和支持上具有非 常明显的通过多个GSM时隙的复用,支持的数据传输速率更高:不同的网络用户共享同一 组GPRS信道,但只有当某一个用户需要发送或接收数据时才会占用信道资源。这样,通 过多用户的业务复用,更有效地利用无线网络信道资源,特别适合突发性、频繁的小流 量数据的传输,很好地适应数据业务的突发性的特点。GPRS计费方式更加灵活,可以支 持按数据流量来进行计费;与无线应用协议(WAP)技术不同,GPRS能够随时为用户提供 透明的IP通道,可直接访问Internet中的所有站点和资源;采用信道复用技术,每一个 GPRS用户都能够实现永远在线;另外,GPRS还能支持在进行数据传输的同时进行语音通 话等等,而且相对于短消息等其它无线数据通信业务,GPRS的价格优势比较明显。 从以上对GPRS的介绍,可以得出GPRS具有以下特点: (1)接入范围比较广,GPRS是在现有的GSM网上升级,可充分利用全国范围的电信网 络,可以方便、快速、低成本的为用户数据终端提供远程接入网络的部署。 (2)高速传输,传输速率高,数据传输速度可达N57.6kbps,是常用有线Modem理想 速率的两倍,是当前GSM网络中电路数据交换业务速度的十余倍。 (3)快捷登陆接入时间短,GPRS接入等待时间短,可以快速建立连接,平均耗时为 两秒。 (4)永远在线提供实时在线功能。用户可以随时与网络保持联系,即使没有数据传 输,终端还一直与网络保持联系,这将使访问服务变得非常简单、快速。 (5)按流量收费。用户只是在发送或者接收数据期间才占用无线资源,用户可以一 直在线,计费时按照用户发送或者接收的数据包的数量,没有数据流量传递,即便是用 49 第五章GPRS模块 户挂在网上也是不收费的。 (6)切换自如用户,在进行数据传送时,不影响语音信号的接收,数据业务和语音 业务的切换有两种方式:自动和手动,以不同的终端而定其方式。 5.2 GPRS系统的基本原理与应用 5.2.1 GPRS系统的基本原理 GPRSn33是在GSM系统基础上引入新的部件而构成的无线数据传输系统,它采用分组 交换技术,能兼容GSM网络并在网络上更加有效的传输高速数据和信息。 GPRS采用与GSM相同的频段、相同的频带宽度、相同的突发结构、相同的无线调制 标准、相同的跳频规则以及相同的TDMA帧结构,因此在GSM基础上构建GPRS系统时GSM系 统中的绝大部分部件都不需要做硬件改动,只需软件升级。 构建GPRS系统的方法是: (1)在GSM系统中引入三个主要组件,这三个主要组件是SGSN(GPRS业务支持节点)、 GGSN(GPRS网关支持节点)和PCU(分组控制单元)。SGSN,CGSN又合称为GSN(GPRS支持节 点)。 (2)对GSM系统中的相关部件进行软件升级。 5.2.2 GPRS的应用 以GPRS为基础的无线数据系统有很广泛的应用,GPRS网主要为用户提供突发性的数 据业务,GPRS可以分为面向个人用户的横向应用和面向集团用户的纵向应用两种。 对于横向应用,GPRS可以提供网上冲浪、E-Mail、文件传输、数据库查询、增强型 短消息等业务。 对于纵向应用,GPRS可提供以下几类应用: (1)运输业:车辆及智能调度: (2)金融、证券和商业:无线POS、无线ATM、自动售货机、流动银行等: (3)PTM业务可以完美的支持股市动态、天气预报、交通信息的实时发布: (4)公共安全业:随时随地接入远程数据库: Sn 长安大学硕士学位论文 (5)遥测、遥感、遥控:如气象、水文系统收集数据,对灾害进行遥测和报警、远程 操作: (6)提供VPN(虚拟专用网)业务,使企业员工能够随时随地与总部保持联系,降低公 司建设自己的广域网的费用。 5.3基于GPRS的数据传输协议 GPRS技术['31是移动通信技术和IP技术相结合的产物,数据在传送过程中要遵循 TCP/IP协议,也就是要有源点和目的IP地址。监控中心直接和因特网相连,被分配一固 定的IP地址。但是,监控终端处于GPRS网络中,它不会被分配固定的IP地址,也就是说 它的IP地址是变化的,是动态分配的。由于MC35只内嵌PPP协议栈,要实现GPRS无线上 网功能,单片机相当于TE,MC35相当于ME,所以要在单片机上实现PPP、IP以及相应的上 层应用协议。PPP协议正是用来接入GPRS网络,并动态申请IP地址的。整个传输过程中 涉及到的协议主要有TCP/IP,PPP协议及其各部分组成。 (1)PPP协议 点到点协议(PPP)是一种在点到点链路上传输多协议分组的标准方法,它是为在两 个对等实体间传输数据包建立简单连接而设计的,这种连接提供了全双工的操作,并且 假定数据包是顺序发送的,PPP为基于各种主机、网桥和路由器的简单连接提供一种共 通的解决方案。其位置在七层协议的数据链路层和网络层之间。在GPRS的协议参考模型 中,要使用PPP协议封装IP数据包,再将其重组成GPRS的数据包,通过GPRS的空中接口 发送出去’。 PPP协议包括以下三个组成部分: 1)封装多种协议数据包的方法。 2)链路控制协议LCP(Link Control Protoc01):它用于对封装格式选项的自动协 商,建立和终止连接,探测链路错误和配置错误,PPP连接的两端使用LCP来协调链路连 接选项。 3)针对不同网络层协议的一族网络控制协议NCP(Network Control Protoc01),PPP 协议规定了针对每一种网络层协议都有相应的网络控制协议,并用它们来管理各个协议 第五章GPRS模块 不同的需求。 (2)LCP协议 LCP协议用于交换配置信息包(Configure packets),建立连接。一旦一个配置成 功信息包(Configure—Ack packets)被发送且被接收,就完成了交换,进入了LCP开启 状态。所有的配置选项都假定使用默认值,除非被配置交换所改变。有一点要注意:只 有不依赖于特别的网络层协议的配置选项2J一被LCP配置。在网络层协议阶段,个别的网 络层协议的配置由个别的NCP来处理。在这个阶段接收的任何非LCP packets必须被 silently discarded(默认丢弃)。收至IJLCP Configure—Reject(LCP配置要求)能使 链路从网络层协议阶段或者认证阶段返回到链路建立阶段。 LCP包有3类: ①链路配置包,用于建立和配置链路(Configure—Reject,Configure-Ack, Configure—Nak,和Configure—Reject): ②链路结束包被用于结束一个链路(Terminate—Request和Terminate—ACK). ③链路维修包被用于管理和调试一个链路(Code—Reject,Protocol—Reject, Echo—Request,Echo—Reply和Di scard—Request)。 为了简单处理,LCP包里没有版本域。一个正确运作的LCP的执行将总是对带有简单 地可以识别的LCP包的未知协议和代码进行响应。这样一个确定性的可靠的机制可用于 其他版本的执行。 不管哪个配置选项被允许,所有的LCP链路配置,链路终止和代码一拒绝包(代码1 到7)总被发送,就像没有配置选项被协商一样。特别是每个配置选项都指定缺省值, 这就保证了这样的LCP包总是可以被识别的,甚至当一个链路的结束错误的相信该链路 是开着的。确切的说1个LCP包被封装在PPP信息域中,该PPP协议域表示类型为十六进制 C021(LCP)。 (3)PAP协议 PAP协议用于本端认证远端连接方的身份。它发生在LCP认证之后和NCP认证之前, 被封装在PPP信息域中,该PPP协议域表示类型为十六进SJJOxC023。PAP认证是二次握手, 52 长安大学硕士学位论文 它是直接在网络上传送明文的用户名和密码。~般,那些经由电路交换或拨号连接至lJppp 网络服务器的主机和路由器才使用这种认证方式。在网络层协商、认证失败或断开连接 中,服务器使用连接主机和路由器的身份进行相应参数选择。 (4)IP控制协议 点对点连接可能和当前的网络协议产生许多问题。例如,基于进行电路交换的点对 点连接(比如拨号模式服务),分配和管理IP地址等。这些问题即使在LAN环境中,处 理起来也非常困难。NCP是用来处理这些问题的,每一个协议管理着各自的网络层协议 的特殊需求。经过PPP会话,用户已经被认证,下一阶段是网络层协议。网际协议控制 协议(IPCP)是在PPP连接时,协商配置网际协议(IP)环境。选项包括IP地址、IP压缩、 域名服务器等等。一旦IP协议配置成功,IP数据报就能够通过我们建立起来的链路在网 络上双向传输了。 IPCP负责构造、建立和断开点对点连接双方的IP协议模型。通过IPCP打开连接后, 即可传送IP数据包。IPCP的格式基本跟LCP格式相同:一个字节的协商代码字段,接着 是ID字段、长度字段和选项字段。只有以下几点不同: 1.协议类型为0x8021,Code域值为l至lJ7,分别为Configure-Reject, Configure—Ack,Configure—Nak,Configure-Rej ect,Terminate—Request,Terminate-Ack和 Code-Reject。 2.IPCP构造选项,IPCP构造选项报文中类型值分配如下: ①IP—Addresses:此选项己不再使用。 ②IP-压缩协议:本配置可选项提供协商特定的压缩协议的使用方法。在默认情况 下,压缩不使用。 ③IP-Address:本配置选项提供协商在数据链路本端上被使用的IP地址的方法。它 允许Configure—Rejected的发送方声明要求哪个IP地址,或者请求对端提供信息。对端 口通过NAK选项提供本信息,返回有效的IP地址。 5.4 GPRS网络连接模块 系统数据传输是通过GPRS进行的,而GPRS数据的传输要通过Internet传送,所以 第五章GPRS模块 GPRS终端设备首先要实现自动拨号接入Internet的功能,然后才能进行数据通信,GPRS 终端设备的自动上网实现,是整个系统的重点。 GPRS模块向外提供RS-232接口,可以在嵌入式操作系统中编写相应的PPP脚本拨号 程序,直接驱动GPRS模块连接上GPRS骨干网和Internet。这样数据就可以通过TCP/IP通 道发送到任意一个具有GPRS网络私有IP地址或公网IP地址的主机上去,从而实现数据的 无线传输。 GPRS拨号上网的具体通信流程如下: ①TE发送AT指令设定初始配置参数以便进入PPP模式,ME会给TE返回相应的值; ②TE发送ATD*99***I#拨号,准备与ME建立PPP连接; ③ME内的PPP协议发送LCP Configure—Request包,为了在TE与ME间建立PPP连接; ④TE返回给ME LCP Configure—Ack包来证实开始准备建立PPP连接,当然也可能返 回LCP Configure—Nak包,导致ME重新发送LCP Configure—Request包; ⑤TE内的PPP协议发送LCP Configure—Request包来协商认证协议。如 CHAP(Challenge Handshake Authentication Protoc01)协议或PAP(Password Authenticate Protoc01)协议; ⑥ME返回给TE LCP Configure—Ack包来证实所用的认证协议。当然也可能返回LCP Confi gure—Nak包,导致TE重发LCP Confi gure—Request包; ⑦不管认证协议是CHAP或PAP,TE都通过认证协议向ME认证自己,ME也存储必要的认 证信息对TE的认证请求作认同回答。如果没有支持认证协议就不进行认证; ⑧TE内的PPP协议发送给ME NCP Configure—Request包。以便激活IP协议; ⑨如果ME还没有GPRS附着状态,TE发送AT+CGATT命令以便使ME执行GPRS附着; ⑩TE发送AT+CGDCONT命令,ME执行PDP上下文激活; 11.ME给TE发送NCP Configure—Ack命令激活TE内的IP协议。 由于在本文的系统中,单片机相当于TE,MC35相当于ME,在进q亍GPRS上网操作之前, 首先要对GPRS模块进行一定的设置。 长安大学硕士学位论文 主要的设置工作有: 1.设置通信波特率,可以使用AT+IPR=115200命令,把波特率设为115200b/s或其它 合适的波特率,默认的通信速度为9600b/s: 2.设置接入网关,通过AT+CGDCONT=I,“IP’’,“CMNET"命令设置GPRS接入网关为 移动梦网; 3.测试GPRS服务是否开通,使用AT+CGACT=I,1命令激活GPRS功能。如果返回0K,则 GPRS连接成功;如果返回ERROR,则意味着GPRS失败。这时应检查一下SIM卡的GPRS业务 是否已经开通,GPRS模块天线是否安装正确等问题。 由于中国移动在GPRS与Internet网中间建立了许多相当于ISP(Internet Service Provider)的GGSN,以连接GPRS网与外部的Internet网。GPRS模块在设定好初始值后就 可以按照GPRS拨号上网的通信规程,建立PPP连接,为访问Internet网络做好准备。 !!?:一 ‘。’ 从物理实现上看,GPRS终端是通过GPRS无线调制解调器(如MC35)来完成无线上网的 功能。中国移动的接入网关CMNET与GPRS无线终端进行通信协商时使用的是PPP协议。 MC35提供RS232接口,并且支持点到点协议PPP(Point to Point Protoc01); 因此就可以在操作系统中编写相应的PPP拨号程序,直接驱动MC35连接至IJGPRS网上。 Linux系统下的拨号程序需要利用pppd和chat两个程序。pppd程序是一个PPP守护进程, 提供对PPP协议的支持,它的用途是建立并维持与服务器的PPP连接,传输数据。chat程 序的用途是拨号并等待提示,然后根据提示输入用户名和密码等登录信息。 pppd和chat两者调用关系如下: ①[扫pppd程序调用chat会话程序: (趸)chat会话程序负责拨号,启动服务器端的pppd程序,验证身份,然后chat会话程 序结束: ③由pppd程序继续chat会话程序的工作,与服务器端的pppd程序进行握手,建立PPP 连接。 在嵌入式系统中一般采用脚本拨号的方式来完成上面的拨号过程,GPRS拨号程序可 以用Shell脚本程序来实现。Linux下面拨号方式为:由pppd程序调用chat会话程序,chat 第五章GPRS模块 会话程序负责拨号,启动服务器端的pppd程序,验证身份,然后chat会话程序结束;pppd 程序继续chat会话程序的工作,与服务器端的pppd程序进行握手,建_立PPP连接。整个 拨号过程涉及的脚本文件如下: 1 PPP—on文件 拌!/bin/sh TELEPHONE=*99***1撑 #Eg话号码的连接 ACCOUNT=GPRS 群帐户名称登录 PASSWORD=GPRS 撑此帐户的密码 accountLOCAL IP=0.0.0.0 拌本地I P地址=0.0.0.0 REMOTE IP=0.0.0.0 存远程工P地址=0.0.0.0 NETMASK._255.255.255.0 群网络掩码=255.255.255.0 export TELEPHONE ACCOUNT PASSWORD DIALER_SCRIPT=/etc/ppp/ppp--on--dialer exec/usr/sbin/pppd debug lock nocIrtscts modem/dev/ttyS0 1 1 5200 asyncmap 0 kdebug 4¥LOCAL——IP:¥REMOTE——IP noipdefault netmask¥NETMASK defaultroute connect¥DIALER SCRjPT 2 PPP——On—‘dialer #This is part 2 of the PPP—on script.It will perform the connection exec chat.v TIMEOUT ABORT’\11BUSY、r’\ ABORT’knNO ANSWE耻t\ ABORT-\nR INGINGh'hah'haRINGn、JG\rt\ ABORT‘\nUsemame/P。assword Incorrecth"’\ 长安大学硕士学位论文 ”\rAT’OK.十H.\c—OK’ATHO\ TIMEOUT 30 OK ATDT¥TELEPHONE CONNECT”login:~login:¥ACCOUNT\ password:SPASSWORD 所有的设置完成以后,将执行这些文件的命令编写成Shell脚本,然后把编写的脚 本放到公共启动脚本/etc/rc.d/rc.sysinit中,这个脚本是与运行级别无关的脚本, 该脚本运行时,其它脚本不能运行。这个脚本中包括了其它的系统初始化命令,这样系 统每次启动时,将自动执行拨号上网程序。然后系统会自动用ifconfig命令检查本地主 机的IP地址,若拨号没有成功,就反复执行,直到拨号成功,这里就可以看到本地主机 获得了~个IP地址。GPRS网络连接模块的具体的流程如图5.1所示。 图5.1 GPRS网络连接模块的具体流程图 5.5 GPRS各模块软件功能的实现 5.5.1串口通信模块 串口通信模块是用来和用户的设备终端相连获取采集到的数据,Linux对串口的操 57 第五章GPRS模块 作是通过设备文件访问的。为了访问串口,只需要打开相应的设备文件即可。在Linux 下,默认串NCOMI和COM2对应的设备文件分别为/dev/ttyS0和/dev/ttySl。串口通信模 块的流程如图5.2所示,设置串的各种属性,如串口波特率的设置及奇偶校验等。 —■] 5.5.2网络数据通信模块 幽5.2串1:3通信模块的流程图 GPRS终端和监控中心之间的数据通信是网络通信,而网络通信的本质就是进程间的 通信。网络编程中广泛使用套接字(Socket),简而言之就是网络进程中的ID。在网络中, 每个节点都有唯一一个网络地址,即通常说的IP地址。两个进程在通信的时候,必须首 先要确定通信双方的网络地址。但是网络地址只能确定进程所在的PC机,而同一台PC上 同时可能有好几个网络进程,只有网络地址还不能够区分出是哪个进程。所以套接字还 需要提供其他信息来最终确定是哪一台PC上的哪一个进程,这个信息就是端口号。在同 一台PC机上,一个端口号只能分配给一个进程。因此,网络地址和端口号结合在一起, 才可以共同确定整个Internet中的一个网络进程。 网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具 有一个类似于打开文件的函数调用Socket 0,该函数返回一个整型的Socket描述符,随 长安大学硕士学位论文 后的连接建立、数据传输等操作都是通过该Socket实现的。常用的Socket类型有两种: 流式Socket和数据报式Socket。流式是一种面向连接的Socket,针对于面向连接的TCP 服务应用:数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。TCP 传输的特点是可以保证数据传输的可靠与稳定,确保发送数据以相同顺序、相同状态到 达目的地。在本系统中采用了基于TCP/IP通信的最基本模式即客户/服务器模式,如图 5-5所示为一个简单的客户机/服务器通信流程图,即GPRS网络数据通信模块与监控中心 的通信模块进行连接通信的一个简单流程。其中,TCP服务器(监控中心主机)首先建立 一个socket,然后将Socket与本地端口号绑定。绑定成功之后,使用listen0函数将套 接字设置为侦听客户机的连接请求:然后实际的连接就可以由accept 0函数来完成。当 服务器运行至Uaccept 0语句时,如果没有客户连接服务请求到来,服务器就会停止在此 等待请求的到来。一旦客户机套接字与服务器套接字建立了连接,双方就可以通过 write 0和read()函数来发送和接收数据。 5.5.3主控制模块 在Linux系统中,主控制模块程序可以采用Shell脚本语言编写,通过依次调用子模 块来实现数据的读取和传输。主控制模块的流程如图5-3所示。Shell是二个命令语言解 释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。用户 在提示符下输入的命令都由shell先解释然后传给Linux核心。shell先检查命令是否是 内部命令,若不是再检查是否是一个应用程序(这里的应用程序可以是Linux本身的实用 程序,也可以是程序员编写的应用程序)。然后shell在搜索路径里寻找这些应用程序(搜 索路径就是一个能找到可执行程序的目录列表)。如果键入的命令不是一个内部命令并 且在路径里没有找到这个可执行文件,将会显示一条错误信息。如果能够成功找到命令, 该内部命令或应用程序将被分解为系统调用并传给Linux内核。一般而言,Shcll Script 的地位和其它的可执行文件(或命令)是完全相同的,只不过Shell Script是以纯文本的 方式储存,而非二进制文件。而要执行Shell Script时,必须有一个程式将其内容转成 一道道的命令执行,而这个程式其实就是Shell。 59 第五章GPRS模块 图5.3主控制模块的流程图 一般而言,Shcll Script的地位和其它的可执行文件(或命令)是完全相同的,只不 过Shell Script是以纯文本的方式储存,而非二进制文件。而要执行Shell Script时, 必须有一个程式将其内容转成一道道的命令执行,而这个程式其实就是Shell。对于已 经写好的脚本程序,通过chmod命令将其设定成可执行文件: chmcd+x filename f;0 长安大学硕士学位论文 下面给出一个shell脚本程序的例子,ff,[JGPRS网络连接模块的脚本程序gprs-mc35. sh的片段(#后为注释): #文件名:gprs—mc35.sh #用串口COMI连接mc35 #设置串口速率 57600 #用串口通信是使用硬件流控制 #用来设置中国移动的GPRS节点服务器的APN名称和属性 OK AT+CGGDCONT=I,‘‘IP”,‘‘CMNET’’、\ #设置MC35附着于中国移动的GPRS网络 OK AT+CGATT=I\ 为了使GPRS终端在加电之后,能自动运行GPRS网络连接程序和GPRS终端主控制程 序,必须将uClinux系统设置为单用户模式启动行,并把编写好的GPRS终端软件放到公 共启动脚本/etc/rc.d/rc.sysinit中执行。这个脚本中包括了基本的系统初始化命令。 由主控制模块来统一调试执行,控制算法如下: //主控制程序模块 Main() { Pid_t pid_gprs,pid_com,pid net; Pid_gprs--vforkO; If(pid—gprS—O){ //在子进程空间中的pid_gprs为O 61 第五章GPRS模块 //进入新生成的子进程空间 Execl(“/bin/gprs_connect","gprs connect","exec by execl",NULL); Exit(0); ) ∥等待连接 Waitpid(pid_gprs,NULL,0)//wait for the child //检查是否连接 SendAT GPRSCommand(); //如果GPRS网络模块连接成功,则进入下面的模块,如果失败则要重新执 行连接功能 Pid_com=vfork0; If(pid_com==0){ //进入串口通信模块,取得要传输的数据,如果没有数据则休眠 //如果有数据到来,则通知网络通信模块发送数据 If(pid_ne产0){ //进入网络通信模块,传输要发送的数据 //如果有来自网络的数据则接收,然后交给GPRS网络通信模块,看是否是 合法的控制GPRS模块的命令 长安大学硕士学位论文 5.6本章小结 本章将嵌入式ARM平台扩展的GPRS模块单独进行了详细介绍,并在PPP协议下完 成了数据的传输功能,以及实现GPRS软件功能的各模块进行了分析并给出了关键代码。 63 第六章总结 第六章总结 6.1系统测试 6.1.I软件调试测试 为了节约成本,在本文中测试采用NI提供的应用于ARM微处理器的NI LabVIEW嵌 入式模块。该模块心钔是第一款由两家公司共同合作下,结合LabVIEW的易操作性和ARM 微处理器性能的产品。它是LabVIEW图形化系统设计平台的延伸,直接适用ARM 7,ARM 9和Cortex—M3微处理控制器系列产品。新模块结合图形化系统设计平台与世界最流行 的微控制器以简化嵌入式系统开发。LabVIEW针对ARM微处理器的嵌入式模块具有 LabVIEW驱动功能,帮助该领域专家在图形化界面下完成对ARM微处理器所有控件的编 程,包括模拟和数字I/0。该模块还具有桌面模拟能力的功能,这样用户就能够在他们 的台式电脑上运行开发的适用于ARM微控制器的程序,而不借助任何其他硬件。 在LabVIEW中,可采用ASCII字节流、数据记录文件和二进制字节流三种文件格 式存储或者获得数据。数据记录文件只能通过G语言访问;必须把数据转换成二进制字 符串才能保存为二进制字节流格式。ASCII字节流是最常用的数据文件格式,把数据保 存为文本(ASCII)字节流的最大好处是,方便别的软件,如字处理程序。为此,就需 要将数据转换为ASCII字符串。LabVIEW提供了一个专门用于这种格式转换的函数—— Array To Spreadsheet String,该函数将一个数组以指定的精度转换为字符串形式的 电子表格,并以tab字符分隔各列, EOL(End Of Line)字符分隔各行,使用该函数 可以很方便地将采集数据转换为ASCII字符串格式,然后存储到文本文件中。这样就不 仅可以对模拟输入信号进行高精度的采集,而且还可以对采集的信号以实时图像的方式 显示出来。 LABVIEW整个设计程序包括四个部分:面板设计、初始化、数据采集、数据处理和 结果显示,通过精心设计程序,基本完成了预定的各项测量功能,并保证了系统的运行 速度。这里只是简单对各部分功能介绍如下: (1)面板设计:提供友好的操作界面,符合常规测量仪器的操作习惯- (2)初始化:完成系统初始化功能,包括复位、送工作方式字、设置程序运行参数 等. 长安火#顽}学位论女 (3)数据采集:1.abVIEW不能直接访问用户自己设计的硬件,作为~个开放式开发 甲台,LabVIEW提供了DI.L接口,使用户在LabVIEW平台L能调用其他软件平台编译的 模块.并提供对象连接和嵌入技术(简称OLE)的支持。这里利用vc¨6 0编写了DLL文 件,并在LabVIEW环境下调用该文件,实现了LabVlEW程序与数据采集卡的数据通信。 下面即为读写驱动设备所创建的DLL编译项目的相关文件: DLLBul k.h:声明变量或功能函数的头文件; BLLBulk.def:模块定义文件,是由若干个描述DLL模块参数的语句组成的文本文 件; DLLBulk.cpp:是DLI,的主要代码文件: 对DLLBulk dsw下的各个文件进行编译之后,在菜单栏中选择Build一>Build DLLBulk dll就生成了可以被LabVIEW调用的DLL文件。 (4)数据处理及显示:对内存中的采样数据进行各种处理用于不同测量目的。包括 信号波形实时显示、自动测量信号幅度和时问、图盘、删除图形以及回放等附加功能。 图6 l为对正弦波信号进行数据采集所得到的图形。 篓鳖鐾拦蓬:雾4菱096 4瓣.!一 薹二干.…-i赁.-她-一2暑.∑.-c.yd磐《蒹,‘爵搿蒿T№‘● 6 4 Z 0 m君2宝 2 4 6 0 500 1000 1500 200。2500 Count 3000 3500 4095 6.I.2环境系统谭试 图6 1正弦波信号进行数据采集 将本采集采集系统放黄到环境)【jso'c,并模拟干扰源做了频率响应与幅度响应测 试。 第六章总结 1.频率响应测试 采用加速度传感器安装在振动传感器校准仪JX一3B上,加速度(速度,位移)峰值恒 定为lOm/s2,(有效值为7.07m/s2),有规律调节振动台,改变其输出频率,记录相应通 道的测量值,如表6.1所示。 豢—絮 表6.1频率响应表 IOHZ 30HZ 100 ItZ 200 HZ 400 ttZ 测量值 7.09 7.07 7.04 7.08 8.08 1 绝对误差 +0.02 0 一O.03 +0.01 +1.01 相对误差 0.28% 0 0.42% 0.14% 14.29% 测量值 7.08 7.07 7.03 7.08 8.11 2 绝对误差 +0.0l O 一0.04 +0.01 +1.04 相对误差 0.14% 0 0.56% 0.14% 14.7l 2.幅度响应测试 采用加速度传感器安装在振动传感器校准仪JX一3B上,调节振动台的输出频率为 30Hz,有规律调节振动台,改变其输出加速度(速度,位移)峰值,记录相应通道的测量 二心 值,如表6.2所示。 表62幅度响应表 5 10 15 20 25 测量值 3.59 1 相对误差 1.4% 7.07 0 10.49 1.1% 13.97 1.2% 17.41 1.8% 测量值 3.63 2 相对误差 2.5% 7.07 0 10.5l 0.9% 13.98 1.1% 17.44 1.4% 测试结果分析如下: 从表5—1看本系统的频率响应在400Hz以下的低频范围内效果比较好,当输入信号 频率大于400Hz时,测得结果的误差都比较大。用示波器测量调理电路的输入和输出, 发现误差主要来自于这部分模拟电路,受设计的信号调理电路的频率响应、温漂等因素 长安大学硕士学位论文 的影响,故采集到误差比较大。 从表5-2看本系统的幅度响应误差在5%内,能够比较好的满足一般的采集要求。 6.2系统分析及展望 6.2.I系统分析 本文研究并实现了基于ARM9S3C2410的无线数据采集系统,将ARM处理器的低功耗 和FPGA的灵活性结合起来,同时运用嵌入式开发板扩展的GPRS模块,将数据通过GPRS 网络发送出去。本文成功的完成了嵌入式ARM Linux的移植,有了ARM..Linux强大 的系统支持,有利于系统的再开发以及扩展,为系统的进一步完善打好基础。 本文设计开发的无线数据采集系统体积小、功耗低。本系统将数据采集和无线传输 系统有效的结合起来,集数据采集、处理和无线传输于一体,大大减轻了测试人员的劳 动强度。本系统不仅适合于长时间、大容量现场数据的采集和存储,而且可方便的与网 路数据中心进行无线数据交换,提高了检测结果的科学性和公正性,为定期检测其技术 状态、分析产品质量和工作性能提供了科学的依据,该系统具有广阔的应用前景。 从原理验证和实现的角度来说,系统基本实现了要求。但是从系统的准确性和稳定 性方面的考查来看,在一些方面系统还需要继续改进以臻完善。 6.2.2系统改进及展望 ~ 从现阶段本系统设计实现的情况来看,由于分模块的硬件设计和Linux的引入,使 得整个系统无论从硬件还是软件上都比较容易进行功能升级。同时,一些在测试中发现 的问题也还有待进一步完善。 1)硬件方面 (1)平台互连信号干扰的改善 由于连线和接口都比较简陋,所以当FPGA平台以较高频率运行的时候,ARM平台 会受到比较大的信号干扰,导致系统有时可能会出现正常工作。该问题应该可以从改善 连线和接口方式和质量上加以改善。 (2)更灵活的系统采样控制 提供更完善、更方便的控制操作。通过ARM上层的用户操作界面以及ARM与FPGA 互连接口,用户可以随时改变前端信号采集触发的阈值;加上外围晶振频率调整电路的 67 第六章总结 配合,用户可以选择性地调整前端信号的采样频率。 (3)引入新的硬件模块 因为系统设计之初,就考虑到方便的扩展性,所以FPGA、ARM的GPIO是添加外设 的方便途径,IfU Linux广泛的网络软件资源更是为新硬件模块的驱动和相应的应用提 供了可参考甚至是现成的程序。所以,在本系统上为扩展系统功能,引入新的硬件模块 是比较容易实现的。需要添加硬件模块的同时,加入相应的设备驱动(一般都可以再找 到类似或者相同的驱动),重新编译生成到Linux内核即可。 2)软件方面 (1)更友好的用户界面 一方面,Linux的引入,为我们在系统上移植GUI提供了很好的平台,例如MiniGUI、 Qt都可以很方便地移植到Linux上这样跟有利于用户对现场采集数据进行分析和处理。 (2)多线程的软件控制程序实现 线程(thread)技术心朝早在60年代就被提出,但真正应用到操作系统中则是80年代 中期的事。现在许多操作系统都支持了多线程技术,包括Windows/NT,Solaris等等, 当然,也包括Linux。 我们在本系统中提出可以使用多线程操作方式心6|,主要是基于以下几个方面的原因: 第一,同多进程相比,多线程是一种非常“节俭"的多任务操作方式。在Linux下,启 动一个新的进程必须分配给它独立的地址空间、建立众多的数据表来维护它的代码段、 堆栈段和数据段。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间, 共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程的花费,同样的, 线程间切换所需的时间也远小于进程间:第二,线程之间有着方便的通信机制,这是由 于同一个进程下的线程共享同一个数据空间,所以一个线程的数据可以直接为其它线程 使用,不仅快捷而且十分方便;第三,提高应用程序响应。这对图形界面的程序尤其有 意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、 鼠标、菜单的操作,而且使用多线程技术,将耗时长的操作至于一个新的线程,就可以 避免这种尴尬的问题。第四,改善程序结构。一个既长又复杂的进程可以考虑分为多个 线程,成为几个独立或半独立的运行部分,这样的程序会便于理解和修改。 长安大学硕:上学位论文 参考文献 [1】马明建.数据采集与处理技术(第二版)【M]西安:西安交通大学出版社,2005 [2】魏洪兴等.嵌入式系统设计与实例开发实验教材【M】.清华大学出版社.2005. [3】周立功.ARM嵌入式系统基础教程[M】,北京:北京航空航天大学出版社,2005 【4】窦振中.嵌入式处理器ARM技术及芯片[D】.世界电子元器件,2003(3)15.17 【5】范艳开.基于ARM的嵌入式Linux操作系统移植[D】.西安:西北工业大学硕士学位论 文,2004:2.5 【6】吕捷.GPRS技术[M】.北京邮电大学出版社,200 [7】王田苗.嵌入式系统设计与实例开发[M].北京:清华大学出版社,2002 [8】江俊辉.基于ARM的嵌入式系统硬件设计【D】,微计算机信息(嵌入式与SoC).2005, 21(7—21:120—122 [9】邹思轶.嵌入式Linux设计与应用[M】,北京:清华大学出版社,2001. 一, [10]吕西臣.嵌入式数据采集系统中的关键技术研究[D】,郑州.郑州大学,2007 【11】曲晋立,顾亮,黄华.嵌入式操作系统与Linux.嵌入式系统论文集[D】, 2000.11.258-262 【12】陈颐.ARM嵌入式技术实践教程【D】.北京:电子工业出版社,2005 [13】李善平,刘文峰,王焕龙等.Linux与嵌入式系统[D】.北京:清华大学出版社,2006:42.56 [14]田泽.嵌入式系统开发与应用(第一版)【M】.北京:北京航空航天大学出版社,2005 [15】肖金球、刘传洋、仲嘉霖.基于FPGA的高速实时数据采集系统[D】.电路与系统学报, 2005.(12).128-13l [16】韩斌杰.GPRS原理及其网络优化[M】..北京机械工业出版社..2003 [17】杨恒,李爱国,王辉等.FPGA/CPLD最新实用技术指南[M】.北京:清华大学出版社, 2005 [18】万国光.中国移动通信网向第三代过渡的探讨[D】.电信快报.2000.2.5.8 [19】毛德操等著.Linux内核源代码情景分析[D】.浙江大学出版社.2001.9.10—13 [20】王学龙著.嵌入式Linux系统设计与应用[M】.清华大学出版社.2001 【21】倪继利著.Linux内核分析及编程[M】.电子工业出版社.2005. 【22】詹荣开.嵌入式BootLoader技术内幕嵌入式应用[D】.2003(2):21.22 【23】AlteraCorp.Avalon Bus Speeifieation Referenee Manual[D].2004(2)3 1.33 参考文献 [24]张爱平.LabView入门与虚拟仪器[M】电子工业出版社2004 [25】俞磊.Linux下的多进程编程..http://www.neteliek.cn 【26】肖海桥.实时多任务操作系统及其嵌入式微处理器性能比较[D】.电子产品世界, 1 998.(4).32-33 70 长安大学硕上学位论文 致谢 首先,我要深深地感谢导师楚岩副教授。在研究生学习三年期间,楚岩老师从各方 面都给予我极大的关怀和悉心的教导。楚老师严谨求实的治学态度、渊博的专业知识给 我留下了非常深刻的印象,使我在研究工作中受益匪浅。在此论文完成之际,谨向楚老 师致以深深的敬意和衷心的感谢! 同时,我还要感谢我的同学,谢谢他们长期以来对我学习和生活上的支持和帮助, 确保我能够顺利完成研究。还要感谢我的好友无所谓(网名)及他的朋友,能和他们一起 共同的学习、交流嵌入式ARM学习,使我受益匪浅,终身难忘。 基于ARM_Linux的无线数据采集系统 作者: 学位授予单位: 孙晨 长安大学 相似文献(10条) 1.期刊论文 孙丽飞 基于GPRS的无线生理数据采集系统 -科教导刊2009(9) 本文将数据采集技术和GPRS远程无线数据传输技术相结合,很好地应用于远程医疗系统中,提高了测控系统的灵活性. 2.会议论文 孔照林.唐慧强.郭杨 移动通信网络远程无线数据采集系统的设计 2006 介绍了CDMA1X网络在自动气象信息远程无线数据采集系统中的应用,描述了系统架构和无线DTU的配置,给出了下位机通信和上位机接收数据管理的软件 编程.该系统在江苏省自动雨量监测系统与高速公路自动气象站中得到广泛的应用,具有较大的实用价值和经济价值. 3.学位论文 吕增良 多路无线数据采集系统的设计 2006 文章介绍了基于nRF401 芯片的多路无线数据采集系统的设计。系统采用主机-从机体系结构,主机可同时对多个采样点进行数据读取。为了保证数据传 输的可靠性,必须对数据传输制定简单的通信协议,用户可以通过与系统进行交互来控制诸如采样频率之类的系统参数. 随着无线通信技术的发展,无线数据传输系统的应用领域不断扩大,基于射频技术的监控系统是无线数据传输在通信领域和自动化控制领域的重要应用 的典型实例,根据工业控制传感器分布特点,开发了一个基于射频技术的嵌入式网络监控系统。主控芯片选择Philips 公司的P89V51RD2,实现对无线射频模 块数据传输的控制。射频模块的设计基于Nordic 公司的nRF401 射频收发芯片,通过在国际通用的ISM 频段实现数据的短距离无线传输。 论文详细介绍了无线数据传输平台硬件模块的设计及其功能的实现,利用无线数据传输模块构建一个小型无线局域网络,该网络包括一个主控机,一个 主机和多个终端,主机和终端之间通过串口进行数据通信,通过应用程序完成数据的处理。基于无线数据传输的嵌入式网络监控系统平台可以广泛的应用于 工业控制领域,具有广泛的发展前景。 4.会议论文 陈刚.律方成.王胜辉.陈昱同 避雷器在线监测数据采集系统的设计 2007 该系统综合应用了基于nRF905射频芯片的短程无线数据传输技术、GSM/GPRS无线数据传输技术和internet数据传输技术,实现了对避雷器泄漏电流的远 程定时监测和历史数据的存储。设计了下位机数据采集模块,并采用短距无线通信技术发布采集命令,保证了下位机各种信号的同步采集。应用nRF905无线 射频收发芯片设计了无线通讯模块,调试了GPRS数据传输模块,并与internet的整体调试实现了下位机与监控计算机的数据传输。 5.学位论文 张耀锋 基于人工神经网络温度补偿的压力传感器的无线数据采集系统 2007 在工业生产中,监测和控制生产过程中的各个参数经常要使用压力传感器。为了在一定的温度和压力下有效改善传感器的非线性及温度变化引起的误差 输出特性,本文分析了三种温度补偿算法,分别是多项式拟合与牛顿插值相结合的方法,BP 神经网络算法,我们自己提出的人工神经网络算法,重点介绍了 最后一种方法,它包含4 个权值的调整,分别代表输出信号的一次项,二次项以及温度的一次项,二次项系数,经过迭代以后获得一个最佳输出公式。该公 式既能够满足样本值,也能够满足非样本值,并最终可校验神经网络迭代结果的正确性。由于我们提出的神经网络算法具有精度高,速度快,成本低等优点 ,我们采取了这种方法。 本文给出了一种基于PTR2000 无线传输模块的多路智能压力传感器数据采集系统的设计。通过制定简单的传输协议来协调主从机间的数据发送,以保证 数据的可靠传输。该系统可以在一些特殊的场合所实现信号的采集、处理和发送,解决了复杂的现场连线,并且具有成本低、可靠性好、实用性强等优点。 6.会议论文 刘瑾.杨海马 蓝牙技术在流量检测中的应用 基于蓝牙技术的短距离无线通信技术应用于水流量的检测中,设计了流量传感器与单片机及计算机数据采集系统间的无线数据通信系统,实现了供水网络 测量参数的无线传输功能,简化了供水网络流量检测中线路的连接密度. 7.期刊论文 李亮之.冯丽.赵松.LI Liang-zhi.FENG Li.ZHAO Song 基于nRF401的多点通用无线数据采集系统设计 - 辽宁工学院学报2006,26(3) 介绍了一种基于单片射频收发芯片nRF401的多点无线通用数据采集系统的设计与实现方法.重点论述了数据控制器与终端节点的组成、通信协议及抗干 扰的设计.试验过程表明了系统的有效性. 8.期刊论文 李露蓉 基于GPRS的远程数据采集系统关键技术研究 -管理与财富2009(9) 现代家庭中的水、电、气表(俗称"三表")的读取是人们生活息息相关的事情.目前我国的水费计量方式主要依靠抄表人员入户抄收,不仅浪费人力物力 ,又不可避免存在人为因素造成的误差,而且对用户的日常生活造成不便.随着城市现代化建设的发展,建设智能小区成为必然趋势,原来的人工抄表已不能胜 任现在的工作,新的抄表方式应运而生,随着通信和计算机技术的发展,使得远程抄表成为可能. 9.会议论文 胡准庆.房海蓉.方跃法.吉鸿涛 基于GSM的列车无线数据传输系统的研究 2001 本文对列车监控装置无线数据转储发送系统进行了研究.移动台系统采用可以入GSM网的无线电手机,用来传输监控装置记录板插件产生的原始数据;转储 发送系统采用8031单片机作为微控制系统,它通过与记录板相连的RS-232口来读取记录板的数据,同时又通过16550芯片扩充的标准RS-232口同移动台的串行 口相连接,用来将数据发送至地面PC机;地面分析部分主要为PC机,它采用Visual C++6.0编程语言设计了友好的图形化用户界面,可以实时监控机车运行状况 .该系统采用大规模集成电路,简单灵活,传输可靠.实践表明该系统具有良好的稳定性和可靠性,可满足远距离监控和数据采集系统的需要. 10.学位论文 王中杰 基于PTR4000的无线数据传输系统的研究 2006 有线通信由于其布线、组网、成本等方面的局限性,已经不能满足技术发展和应用的需要。在许多领域无线通信技术已越来越受到重视,而且发展迅速 。本论文主要研究的是基于PTR4000的无线数据传输系统的硬件电路与软件设计。 论文介绍了本课题的背景、研究现状以及研究内容。并对无线数据传输系统的模型作了研究,包括系统的组成、性能指标以及影响无线传输的主要因素 的内容;另外,对数字调制方式、差错控制和通信协议等无线数据传输中的关键技术进行了讨论。论文根据数据采集系统的基本结构,提出了基于无线数据 传输的分布式数据采集系统的总体框架。针对数据采集系统的无线数据传输部分作了研究。阐述了基于PTR4000的无线数据传输系统的方案设计和实现,提 出了系统的总体设计思想,详细地阐述了硬件电路的组成,重点介绍了系统中采用的以nRF2401为核心芯片的PTR4000无线数传模块、AT89LV51单片机,以及 硬件设计;同时,详细地阐述了软件的设计,重点介绍了系统的主程序和几个主要的子程序。并对所设计的无线数据传输系统的传输距离和可靠性进行了空 阔地带、有障碍物地带及旋转状态下的实验,对实验结果进行了分析。 最后论文总结了在无线数据传输系统研究设计中的工作,提出了下一步需要完善和解决的问题。 本文链接:http://d.g.wanfangdata.com.cn/Thesis_Y1526169.aspx 下载时间:2010年5月25日
更多简介内容

评论

下载专区


TI最新应用解决方案

工业电子 汽车电子 个人电子
$(function(){ var appid = $(".select li a").data("channel"); $(".select li a").click(function(){ var appid = $(this).data("channel"); $('.select dt').html($(this).html()); $('#channel').val(appid); }) })