当前位置:
文档之家› 基于ARM+Linux的嵌入式温度监测系统设计与实现
基于ARM+Linux的嵌入式温度监测系统设计与实现
访问DSl8820都需要遵循固定的流程: (1)初始化:发送一个初始化脉冲(复位脉冲),信号线上 的传感器都被复位,传感器发送在位脉冲(presence pulse),表示 已经就绪; (2)ROM命令:对DSl8820独一无二的“位ROM ID号 进行操作,指定需要通信的DSl8820,没有指定的传感器不会 响应; (3)DSl8820功能命令:功能指令允许主控系统读写 DSl8820的存储器(包括读取温度的指令),初始化温度转换,
系统硬件设计以¥3C2410微处理器为核心,通过GPIO数 字接口采集数字温度传感器DSl8820的温度数据。其他外围 电路包括2个RS232串口和1个RJ45网络接口,以及64 M SDRAM和64 M NANDFLASH闪存,另有4个按键用于功能输 入,4个LED灯用作状态指示。
ARM处理器通过GPIO数字接口向温度传感器发送指令 进行交互,温度传感器在得到指令后将数据传送给ARM处理 器进行处理。
0x56000068,4); }(unsigned long+)gPg—up&=0xfffffdff;
为上拉
//设置GPG9
gPg—con=(unsigned long)ioremap((unsigned long)
0x56000060,4);
}(unsigned long})gpg_eon&=Oxfff3ffff; ·(unsigned long})gPg—con I=Ox00040000;//初始化的 时候设置GPG9为输出模式
作者简介:禹业中 1985年生,硕士研究生。主要研究方向为嵌入式系统以及Linux在嵌入式领域的应用。 余有灵 1973年生,博士。副教授。主要研究方向为智能信息处理技术、嵌入式系统应用、计算机应用等。
万方数据
2010.,j机电一体化53
基于ARM Linux的嵌入式温度监测系统设计与实现
圈1系统结构圈 温度传感器DSl8820是一种使用单总线协议数字式温度 传感器,测量温度范围为一55一+125。C,在一lO一+85℃范同
的移植应用。在ARM平台上的移植项目主要有ARMLinux
Projeet和应用于无MMU的ARM7的uCLinux。Linux应用于嵌
入式系统有以下的优势:(1)Linux免费,源代码公开;(2)有
很高的适应性和可靠性;(3)具有成熟的开发工具;(4)可以根
据需要灵活地配置内核。由于上述优点,Linux在ARM平台有 着越来越广泛的应用。软件开发的主要任务包括:Linux驱动
加载的内核模块可以将内核映像的尺寸保持在最小,并具有很
大的灵活性,这样便于检验新的内核代码,而不需要重新编译内 核并重新引导。因此本系统采用了动态加载的模块。
ARM的GPG9数字端口跟单总线通过接口芯片相连,需要
在驱动程序的初始化模块里面进行端口映射:”1
gpg_up。 (unsigned long)ioremap((unsigned long)
在驱动程序模块写好后,编译源文件为目标代码:
gee-C·D—KERNEL一-DMODULE io__gp99.c一0 io_gp99.0
生成的目标文件即为驱动程序。需要加载驱动时,首先用 mknod命令建立一个目录项和一个特殊文件的对应索引节点。 第一个参数是设备名称,C表示字符设备,105是主设备号,0代 表次设备号。
Key words:embedded ARM Linux 1-wire DSl 8820
0引 言 在工农业生产和日常生活中。对温度的监测始终占据着极
其重要的地位。当前使用广泛的单片机温度采集系统可以满 足大部分的需求,但是随着科学技术的不断发展,对温度监测 的要求不断提高,比如在精度、实时性、和功能扩展性等。此时, 单片机系统的性能局限性问题就比较突出。
禹业中 余有灵 (同济大学电子与信息工程学院,上海201804)
摘要:研究了基于ARM9的嵌入式Linux系统在温度监测系统中的应用,介绍了系统的硬件结构和软件实现 过程,讨论了如何在主控制器端口驱动能力不足时的解决方法,以及如何在嵌入式Linux下实现单总线协议的问题。 与传统的单片机控制相比,系统具有测温精度高、扩展性强,可靠性高等特点,为中规模温度监测应用提供了一种良 好的解决方案。
gPg—dat=(unsigned long)ioremap((unsigned long) 0x56000064.4)
Major=register—ehrdev(DRAM—MEM—MAJOR,DEVICE—
NAME,&io_gp99_ops);
i蕊丽甬i蕊iii焉iiiii蕊蔫蕊ii两商蕊丽丽藉i丽Research.Development洄腑瞳嘲
关键词:嵌入式ARM Linux.单总线DSl8820 doi:10.3969/j.issn.1007—080X.2010.01.01 1
Abstract:This paper presents an embedded temperature monitoring system based on ARM and Linux.Describes the hardware architecture and software implementation.Focuses on the problems of how to increase current drive capability and how to implement 1-wire protocol under Linux.As compared to conventional single—chip systems,this system achieves higher accuracy,scalability and reliability,provides a good solution for medium—scale temperature monitoring applications.
单总线读写代码包括4种基本的操作:复位(reset)、写I (write 1 bit)、写O(write 0 bit)和读位(read bit)。进行这些基本 操作需要严格遵循单总线时序标准的要求,使用Maxim提供的 单总线典型时序值可以使系统具有最大的鲁棒性。字节操作 可以通过对位操作的组合调用来实现,进行特定的连续字节操 作,就构成了DSl8820的指令,如常用的指令SKIP ROM,其指 令码为CCh。
系统以ARM9系列的微处理器¥3C2410A为核心,使用嵌
入式Linux操作系统。系统的主要组成部分包括:嵌入式控制 器、前端温度采集模块、GPRS无线通信模块和远程监控中心。 本文着重介绍温度采集相关的软硬件在ARM Linux平台的实 现。GPRS数据传送部分都有相当成熟的产品,可以直接使用。 系统结构如图1所示。 2系统硬件结构设计
对单总线设备进行读写,具体来讲就是按照单总线协议的 要求输出电平信号序列和读入电平信号序列。单总线属于串 行总线,要进行可靠的数据传输,必须严格按照协议标准执行。 根据Maxim公司的数据手册,要进行标准单总线通信。需要做 到精确的1US延时,并且通信过程不能中断。Linux驱动程序运 行在内核空间,2.4版本Linux内核不支持内核抢占,内核代码 可以~直执行,直到完成为止。为了确保时序的准确,需要把单 总线协议实现的代码都放在驱动程序里面。 3.2单总线协议的实现
圈2驱动电路圈
万方数据
弘机电一体化l 2010.1
个双向总线收发器,其DIR引脚控制数据的传输方向。ARM处
理器的GPIO口中的GPG9作为单总线的数据输入/输出口。当
ARM发送数据时,设置DIR为高,数据传输方向为:GPG9-+ 74HC245的AO一单总线;当ARM接收数据时,设置DIR为低, 数据传输方向为:单总线--+74HC245的BO--+GPG9。74HC245
输出电流可以达到最大6mA,可满足中规模测温要求,同时电
路比较简单。 3软件设计与实现
在ARM平台上已经能够运行很多成熟的操作系统,如
Linux、WinCE、VxWorks和wC/OS—lI等,本系统采用的是嵌入 式Linux。Linux是一个类似于Unix的操作系统,目前Linux不 仅支持i386平台,还在ARM、MIPS和POWERPC等平台有成功
i蕊iiii斋iii蕊iiii蕊i蕊酾蕊丽蕊丽蕊丽酾丽Research.Development i团圄■啷
基于ARM Linux的嵌入式温度 监测系统设计与实现
Design and Implementation of an Embedded Temperature
Monitoring System Based on ARM and Linux
如图3,在程序中对DSl8820的操作分成三个部分。首先, 需要搜索连在单总线上的所有DSl8820序列号;然后对所有的 传感器发送温度转换指令,在12位精度下,转换时间不超过 750ms,经过转换后,温度值会写到DSl8820内部暂存器中;最 后,依次读取所有传感器的温度值。
gp99”,0一RDWR)这样的语句来打开设备,然后通过read()和 write()进行读写。
圈3 DSl8820操作流程图
一个读取某个温度传感器温度值的典型程序代码段如下:
ds—init();
//初始化
ds_write_byte(MATCH_ROM);
//发送match—ROM
指令
for(i=0;i<8;i++)
//发送64位序列号
ds_write—byte(the_rom[i]);
ds_write—byte(CONVERT);
上面这段代码实现了对GPG端口相应的寄存器地址进行 的映射。最后,使用register_chrdev()函数向系统注册设备号。
在映射端口和注册设备号之后,就需要添加读写代码。在 Linux系统中,设备被当成文件进行读写。编写设备文件驱动程 序,需要完成struct file—operations中定义的llseek、read、write、 open和release的函数实现。