嵌入式Linux系统下I2C设备驱动程序的开发(范文模版)

时间:2019-05-14 23:02:45下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《嵌入式Linux系统下I2C设备驱动程序的开发(范文模版)》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《嵌入式Linux系统下I2C设备驱动程序的开发(范文模版)》。

第一篇:嵌入式Linux系统下I2C设备驱动程序的开发(范文模版)

嵌入式Linux系统下I2C设备驱动程序的开发

【摘 要】 I2C总线是一种很通用的总线,具有简单、高效等特点,广泛应用在各种消费类电子产品及音视频设备上,在嵌入式系统的开发中也经常用到。本文分析了嵌入式 linux系统中I2C驱动程序的结构,并结合一个具体的I2C时钟芯片DS1307,说明在嵌入式linux系统下开发I2C设备驱动程序的一般流程。【关键字】I2C总线 嵌入式linux 驱动开发

1、I2C总线简介 I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线最主要的优点就是简单性和有效性。

1.1 I2C总线工作原理

I2C总线是由数据线SDA和时钟SCL构成的串行总线,各种被控制器件均并联在这条总线上,每个器件都有一个唯一的地址识别,可以作为总线上的一个发送器件或接收器件(具体由器件的功能决定)[1]。I2C总线的接口电路结构如图1所示。

图1 I2C总线接口电路[1] 1.2 I2C总线的几种信号状态[1]

1.空闲状态:SDA和SCL都为高电平。2.开始条件(S):SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。3.结束条件(P):SCL为低电平时,SDA 由低电平向高电平跳变,结束传送数据。

4.数据有效:在SCL的高电平期间,SDA保持稳定,数据有效。SDA的改变只能发生在SCL的底电平期间。

5.ACK信号: 数据传输的过程中,接收器件每接收一个字节数据要产生一个ACK信号,向发送器件发出特定的低电平脉冲,表示已经收到数据。1.3 I2C总线基本操作

I2C总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟(SCL),同时控制总线的传输方向,并产生开始和停止条件。

数据传输中,首先主器件产生开始条件,随后是器件的控制字节(前七位是从器件的地址,最后一位为读写位)。接下来是读写操作的数据,以及 ACK响应信号。数据传输结束时,主器件产生停止条件[1]。具体的过程如图2所示。

图2 完整的I2C数据传输过程[1] 2.Linux下I2C驱动程序的分析 2.1 Linux系统I2C驱动的层次结构

Linux系统对I2C设备具有很好的支持,Linux系统下的I2C驱动程序从逻辑上可以分为3个部分:

1.I2C总线的驱动 I2C core :实现对I2C总线、I2C adapter及I2C driver的管理。2.I2C控制器的驱动 I2C adapter :针对不同类型的I2C控制器,实现对I2C总线访问的具体方法。

3.I2C设备的驱动 I2C driver :针对特定的I2C设备,实现具体的功能,包括read, write以及ioctl等对用户层操作的接口。这三个部分的层次关系如图3和图4所示。

2.2 I2C 总线驱动 I2C core

I2C core是Linux内核用来维护和管理的I2C的核心部分,其中维护了两个静态的List,分别记录系统中的I2C driver结构和I2C adapter结构。I2C core提供接口函数,允许一个I2C adatper,I2C driver和I2C client初始化时在I2C core中进行注册,以及退出时进行注销。同时还提供了I2C总线读写访问的一般接口(具体的实现在与I2C控制器相关的I2C adapter中实现),主要应用在I2C设备驱动中。

2.3 I2C控制器的驱动 I2C adapter

I2C adapter是针对不同类型I2C控制器硬件,实现比较底层的对I2C总线访问的具体方法。I2C adapter 构造一个对I2C core层接口的数据结构,并通过接口函数向I2C core注册一个控制器。I2C adapter主要实现对I2C总线访问的算法,iic_xfer()函数就是I2C adapter底层对I2C总线读写方法的实现。同时I2C adpter 中还实现了对I2C控制器中断的处理函数。

2.4 I2C设备的驱动 I2C driver

I2C driver中提供了一个通用的I2C设备的驱动程序,实现了字符类型设备的访问接口,对设备的具体访问是通过I2C adapter来实现的。I2C driver构造一个对I2C core层接口的数据结构,通过接口函数向 I2C Core注册一个I2C设备驱动。同时I2C driver 构造一个对用户层接口的数据结构,并通过接口函数向内核注册为一个主设备号为89的字符类型设备。

I2C driver实现用户层对I2C设备的访问,包括open,read,write,ioctl,release等常规文件操作,我们可以通过open函数 打开 I2C的设备文件,通过ioctl函数设定要访问从设备的地址,然后就可以通过 read和write函数完成对I2C设备的读写操作。

通过I2C driver提供的通用方法可以访问任何一个I2C的设备,但是其中实现的read,write及ioctl等功能完全是基于一般设备的实现,所有的操作 数据都是基于字节流,没有明确的格式和意义。为了更方便和有效地使用I2C设备,我们可以为一个具体的I2C设备开发特定的I2C设备驱动程序,在驱动中 完成对特定的数据格式的解释以及实现一些专用的功能。3.一个具体的I2C设备驱动程序的开发

DS1307是一款小巧的I2C接口的实时时钟芯片,具有低功耗,全BCD码时钟和日历输出,12 /24小时工作模式,时分秒、星期、年月日计时数据,润年自动补偿,有效期至2100年,外加56 Bytes的NV RAM(非易失性的RAM)等特点[3]。下面以DS1307为例,说明一个具体的I2C设备驱动程序的设计要点。3.1 I2C设备驱动程序的一般结构

一个具体的I2C设备驱动需要实现两个方面的接口,一个是对I2C core层的接口,用以挂接I2C adapter层来实现对I2C总线及I2C设备具体的访问方法,包括要实现attach_adapter,detach_client,command 等接口函数。另一个是对用户应用层的接口,提供用户程序访问I2C设备的接口,包括实现open,release,read,write以及最重要的 ioctl等标准文件操作的接口函数。对I2C core层的接口函数的具体功能解释如下: attach_adapter:I2C driver在调用I2C_add_driver()注册时,对发现的每一个I2C adapter(对应一条I2C 总线)都要调用该函数,检查该I2C adapter是否符合I2C driver的特定条件,如果符合条件则连接此I2C adapter,并通过I2C adapter来实现对I2C总线及I2C设备的访问。

detach_client:I2C driver在删除一个I2C device时调用该函数,清除描述这个I2C device的数据结构,这样以后就不能访问该设备了。

command:针对设备的特点,实现一系列的子功能,是用户接口中的ioctl功能的底层实现。

3.2 DS1307驱动程序实现对I2C core层的接口

在驱动中必须实现一个struct i2c_driver 的数据结构,并在驱动模块初始化时向I2C core注册一个I2C驱动,并完成对I2C adapter的相关操作。struct i2c_driver ds1307_driver = { name: “DS1307”, id: I2C_DRIVERID_DS1307, flags: I2C_DF_NOTIFY, attach_adapter:ds1307_probe, detach_client:ds1307_detach, command: ds1307_command };数据结构ds1307_driver中的name:“DS1307”,Id:I2C_DRIVERID_DS1307用来标识DS1307驱动程序。flags: I2C_DF_NOTIFY表示在I2C总线发生变化时通知该驱动。

ds1307_probe对应i2c_driver数据结构中的attach_adapter,主要功能:调用 I2C core 层提供的i2c_probe函数查找一条I2C总线,看是否有DS1307的设备存在,如果存在DS1307,则将对应的I2C adapter 和DS1307设备挂接在一起,并通过该I2C adapter来实现对DS1307的访问。同时使能DS1307, 并调用i2c_attach_client()向I2C core层注册DS1307。

ds1307_detach对应i2c_driver数据结构中的detach_client,主要功能:调用i2c_detach_client()向I2C core层注销DS1307,并不使能DS1307,这样I2C驱动就不能访问DS1307了。

ds1307_command对应i2c_driver 数据结构中的command,主要功能:针对DS1307时钟芯片的特点,实现一系列的诸如DS1307_GETTIME,DS1307_SETTIME,DS1307_GETDATETIME,DS1307_MEM_READ,DS1307_MEM_WRITE等子功能,是用户接口中的ioctl功能的底层实现。

以上3个接口函数使DS1307的驱动程序实现了对I2C 总线及I2C adpater的挂接,因此就可以通过I2C core的提供对I2C总线读写访问的通用接口,来开发实现DS1037驱动程序对用户应用层的接口函数。3.3 DS1307驱动程序实现对用户应用层的接口

在驱动中必须实现一个struct file_operations 的数据结构,并向内核注册为一个字符类型的设备(用单独的主设备号来标识),或者注册为一个miscdevice设备(所有miscdevice设备共同 一个主设备号,不同的次设备号,所有的miscdevice设备形成一个链表,对设备访问时根据次设备号查找对应的miscdevice设备,然后调用其 struct file_operations中注册的应用层接口进行操作)。

struct file_operations rtc_fops = { owner: THIS_MODULE, ioctl: ds1307_rtc_ioctl, read: ds1307_rtc_read, write: ds1307_rtc_read, open: ds1307_rtc_open, release: ds1307_rtc_release };数据结构rtc_fops 中的ds1307_rtc_open 和ds1307_rtc_release对应file_operations中的open和release,分别用来打开和关闭DS1307。ds1307_rtc_ioctl对应file_operations中的ioctl,对用户提供的一系列控制时钟芯片的具体命 令:RTC_GET_TIME: 以固定的数据格式读取实时时钟的时间。RTC_SET_TIME:以固定的数据格式设定实时时钟的时间。RTC_SYNC_TIME:系统时钟和实时时钟 之间的时间同步。

ds1307_rtc_read 对应对应file_operations中的read,实现与ds1307_rtc_ioctl 的子功能RTC_GET_TIME相同的功能,以及从NV RAM读取数据。

ds1307_rtc_write 对应file_operations中的write,实现与ds1307_rtc_ioctl的子功能 RTC_SET_TIME相同的功能,以及将数据写入NV RAM。3.4 DS1307驱动程序的加载和测试

在DS1307驱动模块的初始化函数ds1307_init()中,首先通过i2c_add_driver(&ds1307_driver)向I2C core层注册一个I2C的设备驱动,然后再通过misc_register(&ds1307_rtc_miscdev)将DS1307注册为一个miscdevice设备,这样用户程序就可以通过主设备号10 次设备号 135的设备节点/dev/rtc来访问DS1307了。

将DS1307的驱动程序编译成模块的方式,通过insmod命令加载进内核,然后用测试代码进行测试,DS1307驱动程序中实现的所有功能都达到了预期的效果。由于DS1307驱动程序在底层实现了对DS1307时钟芯片数据的解释和转换,所以在用户程序中得到的就是有固定格式和意义的数据,这样就方便了用户程序的访问,提高了应用开发的效率。4.总结

I2C总线是一种结构小巧,协议简单的总线,应用很广泛,访问起来简单方便。linux系统下I2C的驱动程序具有清晰的层次结构,可以很容易地为一个特 定的I2C设备开发驱动。本文通过对linux系统下I2C驱动,以及一个具体的DS1307时钟芯片驱动结构的分析,基本上可以很清楚看出一个I2C设 备驱动的开发过程。实现的关键分为两个部分,1.对I2C core的接口,必须实现 struct i2c_drvier 数据结构中的几个特定的功能函数。这些函数是I2C驱动与I2C总线物理层(I2C控制器)和I2C设备器件之间通信的基础。2.对用户应用层的接口,必须实现struct file_operation数据结构中的一些特定功能的函数,如 open,release , read ,write,lseek等函数。以上两类接口中,对I2C core的接口是对I2C设备访问的基础,实现对I2C总线具体的访问方法;对用户应用层的接口则是方便应用程序开发,实现设备特定功能的必不可少的部 分。参考文献:

[1] Philips Corporation,I2C bus specification version 2.1,2000 [2] Linux kernel,version 2.4.30 [3] Maxim Integrated Products , inc.USA.DS1307 Datasheet , 2004 [4] Aless and Robin著,魏永明等译,《LINUX设备驱动程序(第二版)》,北京,中国电力出版社,2004年

第二篇:linux设备驱动程序开发总结

不管我们学习什么编程语言,和我们见面的第一个程序就是“hello world!” 相信各位道上的朋友都遇到过这种个程序!

学习驱动程序也不例外,我学的第一个驱动程序就是“hello world!” 具体的程序代码如下:

#include

#include

MODULE_LICENSE(“Dual BSD/GPL”);

static int hello_init(void)

{

printk(KERN_ALERT“Hello, world!n”);

return 0;

}

static void hello_exit(void)

{

printk(KERN_ALERT“byby FriendyARM mini2440!n”);

}

module_init(hello_init);

module_exit(hello_exit);

将其复制到工作目录下,并编写一个简单的Makefile文件:

由于每个人使用的Linux系统不一样且每个人内核源代码所存放的位置也不是一样的。所以编写Makefile文件的时候,参考别人的进行修改是一个很不错的的学习Makefile文件的方法。当然你能把Linux内核的Makefile文件了解一下,对你了解Linux内核有很大的帮助的。

学习心得:

1、驱动模块运行在内核空间,运行是不能依赖任何函数库和模块连接,所以在写驱动程序的时候

所调用的函数只能是作为内核一部分的函数。

2、驱动模块和应用程序的一个重要不同是:应用程序退出时可不管资源释放或者其他的清除

工作,但模块的退出啊哈念书必须仔细撤销初始化函数所做的一切,否则,在系统想重新引导之前某些

东西就会残留在系统中。

3、处理器的多种工作模式其实就是为了操作系统的用户空间和内核空间设计的,在Unix类的操作系统

中只是用到了两个级别:最高级别和最低级别。

4、要十分注意驱动程序的并发处理。在Linux驱动程序中必须解决的一个问题就是多个进程对共享资源的并发访问.Linux对解决并发访问可能导致的竟态问题提供了几种机制:中断屏蔽、原子操作、自旋锁、信号量等机制。

5、内核API中具有下划线(__)的函数,通常是接口的底层组件,应该慎用。

6、内核代码不能实现浮点运算。内核中没有提供一套进行浮点运算的完整的环境。

7、Makefile文件的分析:

obj-m := hello.o 代表了我们要构建的模块名为hello.ko,make会子啊该目录下自动找到hello.c文件进行编译。如果hello.o文件是有其他的源文件生成(比如file.1和file1.c)的,则在下面加上:

hello-objs := file.o file1.o......(其中用红色标志的是对应关系)$(MAKE)-C $(KERNELDIR)M=$(PWD)modules

其中-C $(KERNELDIR)指定了内核源代码的位置,其中保存有内核的顶层makefile文件。

M=$(PWD)指定了模块源代码的位置

modules 目标指向obj-m变量中设定的模块

8、insmod使用公共内核符号表来解析模块中未定义的符号,公共内核符号表中包含了的、所有的全局内核项(即函数和变量的地址),这是实现模块化驱动程序所必须的。

9、Linux使用模块层叠技术,我们可以将模块划分为多个层次,通过简化每个层可以缩短开发周期。如果一个模块需要向其他模块导出符号,则使用下面宏:

EXPORT_SYMBOL(name);

EXPORT_SYMBOL_GPL(name);

符号必须子啊模块文件的全局变量部分导出,因为这两个宏将被扩展为一个特殊变量的声明,而该变量必须是全局的。

10、所有的模块代码都必须包含下面两个头文件:

#include

#include

11、所有模块代码都应指定所使用的许可证:

MODULE_LICENSE(“Dual BSD/GPL”);

12、初始化和关闭

初始化的实际定义通常是:

staticint _ _init initialization_function(void)

{

/*初始化代码*/

}

module_init(initialization_function)

清除函数的实际定义是:

static int _ _exit cleanup_function(void)

{

/*清除代码*/

}

module_exit(cleanup_function)

13、还有一些是可选的其他的描述型的定义:

MODULE_AUTHOR(“");

MODULE_DESCRIPTION(”“);

MODULE_VERSION(”“);

MODULE_ALIAS(”“);

MODULE_DEVICE_TABLE(”");

这些模块的声明习惯性的放在模块程序的最后面。

14、Linux内核模块的初始化出错处理一般使用“goto”语句,通常情况下很少使用“goto”,但是出错处理是(可能是唯一的情况),它却非常的有用。

在大一学习C语言的时候,老师就建议不要使用“goto”语句,并说很少会用到,在这里遇到第一个建议使用“goto”语句的。在追求效率的代码中使用goto语句一直是最好的错误恢复机制。下面是我截下来的一段关于使用goto语句实现错误处理的程序:

struct something*item1;

struct somethingelse*item2;

int stuff_ok;

void my_cleanup(void)

{

if(item1)

release_thing(item1);

if(item2)

release_thing2(item2);

if(stuff_ok)

unregister_stuff();

return;

}

int __init my_init(void)

{

int err=-ENOMEM;

item1= allocate_thing(arguments);item2= allocate_thing2(arguments2);if(!item2||!item2)

goto fail;

err= register_stuff(item1, item2);if(!err)

stuff_ok= 1;

else

goto fail;

return 0;/* success*/

fail:

my_cleanup();

return err;

}

第三篇:嵌入式开发实训室设备维修制度

嵌入式开发实训室设备维修制度

为做好分院实验室仪器设备的维修管理工作,确保实验室仪器设备的完好,特制定本制度。

一、仪器设备的使用管理人员应熟悉仪器设备,会正确操作使用,平时要做到精心维护,认真保养,加强检查,及时排除隐患。

二、仪器设备维护保养要根据其性能进行,认真做好防锈、防火、防潮、防震工作,同时还应做好清洁润滑、紧固、通电、更换易损零部件等工作。

三、仪器设备出现故障隐患苗头时,应停止使用,及时检查,并做好安全检查记录。

四、仪器设备的维修必须在认真做好故障诊断记录的基础上,由管理人员向分院提出维修申请报告,经批准后,方可进行修理。仪器设备的修理采取鼓励校内修理,控制校外修理,尽可能减少异地修理。

五、仪器设备修理后,必须组织有关专业技术人员进行测试鉴定,并写出鉴定结论,经确定为合格后方可投入正常使用。

六、仪器设备的维修记录,应妥善保管,不得丢失。

七、实验室各类技术人员都要认真学习修理技术,增强修理能力,做到仪器设备的一般故障,本室即可排除。

电子与信息工程分院2012年8月29日

第四篇:基于嵌入式ARM平台的远程IO数据采集系统的研究和开发.

Research and Development of the Remote I/O Data Acquisition System Based on Embedded ARM Platform

INTRODUCTION

With the wide use of the networked, intelligent and digital distributed control system, the data acquisition system based on the single-chip is not only limited in processing capacity, but also the problem of poor real-time and reliability.In recent years, with the rapid development of the field of industrial process control and the fast popularization of embedded ARM processor, it has been a trend that ARM processor can substitute the single-chip to realize data acquisition and control.Embedded ARM system can adapt to the strict requirements of the data acquisition system, such as the function, reliability, cost, size, power consumption, and so on.In this paper, a new kind of remote I/O data acquisition system based on ARM embedded platform has been researched and developed, which can measure all kinds of electrical and thermal parameters such as voltage, current, thermocouple, RTD, and so on.The measured data can be displayed on LCD of the system, and at the same time can be transmitted through RS485 or Ethernet network to remote DAS or DCS monitoring system by using Modbus/RTU or Modbus/TCP protocol.The system has the dual redundant network and long-distance communication function, which can ensure the disturb rejection capability and reliability of the communication network.The new

generation remote data acquisition and moni-toring system based on the high-performance embedded ARM microprocessor has important application significance.STRUCTRUE DESIGN OF THE WHOLE SYSTEM

The whole structure chart of the remote data acquisition and monitoring system based on embedded ARM platform is shown in Figure 1.In the scheme of the system, the remote I/O data acquisition modules are developed by embedded ARM processor, which can be widely used to diversified industries such as electric power, petroleum, chemical, metallurgy, steel, transportation and so on.This system is mainly used for the concentrative acquisition and digital conversion of a variety of electrical and thermal signals such as voltage, current, thermal resistance, thermo-couple in the production process.Then the converted data can be displayed on the LCD directly, and also can be sent to the embedded controller through RS485 or Ethernet network communication interface by using Modbus/RTU or Modbus/TCP protocol.The data in the embedded controller platform is transmitted to the work-stations of remote monitoring center by Ethernet after further analyzed and pro-cessed.At the same time, these data can be stored in the real time database of the database server in remote monitoring center.The system has the dual redun-dant network and long-distance communication

function, which can ensure the disturb rejection capability and reliability of the communication network.The hardware platform of the Remote I/O data acquisition system based on emb-edded ARM uses 32-bit ARM embedded microprocessor, and the software plat-form uses the real-time multi-task operating system uC/OS-II, which is open-source and can be grafted, cut out and solidified.The real time operating system(RTOS makes the design and expansion of the application becomes very easy, and without more changes when add new functions.Through the division of the appli-cation into several independent tasks, RTOS makes the design process of the application greatly simple.Figure 1 Structure of the whole system THE HARDWARE DESIGN OF THE SYSTEM

The remote I/O data acquisition system based on embedded ARM platform has high universality, each acquisition device equipped with 24-way acquisition I/O channels and isolated from each other.Each I/O channel can select a variety of voltage and current signals, as well as temperature signals such as thermal resis-tance, thermocouple and so on.The voltage signals in the range of 0-75 mV ,1-5V ,0-5V, and so on, the current signals in the range of 0-10mA and 4-20 mA, the thermal resistance measurement components including Cu50, Cu100, Pt50, Pt100, and the thermocouple measurement components including K, E, S, T, and so on.Figure2.Structure of the remote I/O data acquisition system based on ARM processor The structural design of the embedded remote I/O data acquisition system is shown in Figure 2.The system equipped with some peripherals such as power, keyboard, reset, LCD display, ADC, RS485, Ethernet, JTAG, I2C, E2PROM, and so on.The A/D interface circuit is independent with the embedded system, which is independent with the embedded system, which is system has setting buttons and 128*64 LCD, which makes the debugging and modification of the parameters easy.The collected data can be sent to the remote embedded controller or DAS, DCS system by using

Modbus/RTU or Modbus/TCP protocol through RS485 or Eth-ernet communication interface also, and then be used

for monitoring and control after farther disposal.The system of RS485 has a dual redundant network and long-distance communication function.As the embedded Ethernet interface makes the remote data exchange of the applications become very easy, the system can choose RS485 or Ethernet interface through jumper to communicate with host computer.Ethernet interface use independent ZNE-100TL intelligent embedded Ethernet to serial port conversion module in order to facilitate the system maintenance and upgrade.The ZNE-100TL module has an adaptive 10/100M Ethernet interface, which has a lot of working modes such as TCP Server, TCP Client, UDP, Real COM, and so on, and it can support four connections at most.Figure3.Diagram of the signal pretreatment circuit

Figure 3 shows the signal pretreatment circuit diagram.The signals of thermo-couple such as K,E,S,T etc and 0-500mV voltage signal can connect to the positive end INPx and the negative end INNx of the simulate multiplexers(MUX directly.The 4-20mA current signal and 1-5V voltage signal must be transformed by resis-tance before connecting to the positive end INPx and the negative end INNx of the MUX of certain channel.The RTD thermal resistance signals such as Cu50, Cu100, Pt50 and Pt100 should connect one 1mA constant current before connecting to the positive end INPx and the negative end INNx of the MUX of certain channel.Figure4.Diagram of ADC signal circuit Figure 4 shows the ADC signal circuit, which using the 16-bit ADC chip AD7715.The connection of the chip and the system is simple and only need

five lines which are CS(chip select, SCLK(system clock, DIN(data input, DOUT(data output and DRDY(data ready.As the ARM microprocessor has the characteristics of high speed, low power, low voltage and so on, which make its capacity of low-noise, the ripple of power, the transient response performance, the stability of clock source, the reliability of power control and many other aspects should be have higher request.The system reset circuit use special microprocessor power monitoring chip of MAX708S, in order to improve the reliability of the system.The system reset circuit is shown in Figure 5.Figure5.Diagram of system reset circuit

SOFTWARE DESIGN AND REALIZATION OF THE SYSTEM

The system software of the remote I/O data acquisition system based on embedded ARM platform use the real-time operating system(RTOS uC/OS-II, which is open-source and can be grafted,cut out and solidified.The key part of RTOS is the real-time multi-task core, whose basic functions including task management, resource management, system management, timer management, memory management, information management, queue management and so on.These functions are used though API service functions of the core.The system software platform use uC/OS-II real-time operating system core simplified the design of application system and made the whole structure of the system simple and the complex application hierarchical.The design of the whole system includes the tasks of the operating system and a series of user applications.The main function of the system is mainly to realize the initialization of the system hardware and the operating system.The initialization of hardware includes interr-upt、keyboard、LCD and so on.The initialization of operating system includes the control blocks and events control blocks, and before the start of multi-task schedu-ling, one task must be started at least.A start task has been created in this system, which is mainly responsible for the initialization and startup of clock, the start-up of interruption, the initialization of communication task module, as

well as the division of tasks and so on.The tasks must be divided in order to complete various functions of the real-time multi-task system.Figure6.Functional tasks of the system software Figure6 shows the functional tasks of the system software.According to importance of the tasks and the demands of real-time, the system applications are divided into six tasks with different priority, which including the tasks of A/D data acquisition, system monitoring, receive queue, data send, keyboard input, LCD display.The A/D data acquisition task demands the highest real-time requirements and the LCD display task is the lowest.Because each task has a different priority, the higher-priority task can access the ready one by calling the system hang up function or delay function.Figure7.Chart of AD7715 data transfer flow Figure 7 shows the data conversion flow of AD7715.The application A/D conversion is an important part of the data acquisition system.In the uC/OS-II real-time operating system core, the realization process of A/D driver depends mainly on the conversion time of A/D converter, the analog frequency of the conversion value, the number of input channels, the conversion frequency and so on.The typical A/D

conversion circuit is made up of analog multiplexer(MUX, amplifier and analog to digital converter(ADC.Figure8.Diagram of the application transfer driver Figure8 shows the application procedure transfer driver.The driver chooses the analog channel to read by MUX, then delay a few microseconds in order to make the signal pass through the MUX, and stabilize it.Then the ADC was triggered to start the conversion and the driver in the circle waiting for the ADC until its completion of the conversion.When waiting is in progress, the driver is detecting the ADC state signal.If the waiting time is longer than the set time, the cycle should be end.During waiting time of the cycle, if the conversion completed signal by ADC has been detected, the driver should read the results of the conversion and then return the result to the application.Figure9.Diagram of serial receive Figure9 shows the serial receive diagram with the buffer and signal quantity.Due to the existence of serial peripheral equipment does not match the speed of CPU, a buffer zone is needed, and when the data is sending to the serial, it need to be written to the buffer, and then be sent out through serial one by one.When the data is received from the serial port, it will not be processed until several bytes have been received, so the advance data can be stored in buffer.In practice, two buffer zones, the receiving buffer and the sending buffer, are needed to be opened from the memory.Here the buffer zone is defined as loop queue data structure.As the signal of uC/OS-II provides the overtime waiting mechanism, the serial also have the overtime reading and writing ability.If the initialization of the received data signal is 0, it expresses the loop buffer is empty.After the interrupt received, ISR read the received bytes from the UART receiving buffer, and put into receiving buffer region, at last wake the user task to execute read operation with the help of received signal.During the entire

process, the variable value of the current bytes in recording buffer can be inquired, which is able to shows whether the receive buffer is full.The size of the buffer zone should be set reasonable to reduce the possibility of data loss, and to avoid the waste of storage space.CONCLUSIONS

With the rapid development of the field of industrial process control and the wide range of applications of network, intelligence, digital distributed control System, it is necessary to make a higher demand of the data accuracy and reliability of the control system.Data acquisition system based on single-chip has been gradually eliminated because the problem of the poor real-time and reliability.With the fast popularization of embedded ARM processor, there has been a trend that ARM processor can alternate to single-chip to realize data acquisition and control.The embedded ARM system can adapt to the strict requirements of the data acquisition system, such as the function, reliability, cost, size, power consum-ption, and so on.In this paper, A kind of ARM-based embedded remote I/O data acquisition system has been researched and developed, whose hardware platform use 32-bit embedded ARM processor, and software platform use open-source RTOS uC/OS-II core.The system can be widely applied to electric power, petroleum, chemical, metallurgy, steel, transportation and so on.And it is mainly used in the collection and monitoring of all

kinds of electrical and thermal signals such as voltage, current, thermal resistance, thermocouple data of the production process.Then these data can be sent to the remote DAS, DCS monitoring system through RS485 or Ethernet interface.The system has the dual redundant network and long-distance communication function, which can ensure the disturb rejection capability and reliability of the communication network.基于嵌入式ARM平台的远程I / O数据采集系统的研究和开发

导言

随着网络化,智能化,数字化分布式控制系统的广泛使用,基于单芯片的数据采集系统不仅在处理能力上受限制,并且在实时性和可靠性方面也出现了问题。近几年来,随着工业过程控制领域的迅速发展和嵌入式ARM处理器的迅速普及,ARM处理器代替单芯片实现数据的采集和控制成为了趋势。嵌入式ARM系统能适应数据采集系统的严格要求,如功能性,可靠性,成本,体积,功耗等等。

在本文中提出一种新型的基于ARM嵌入式平台的远程I / O数据采集系统已被研制开发,它可以衡量各种电气和热参数,如电压,电流,热电偶,热电阻等等。那个测量数据可以显示在液晶显示器的系统中,同时可通过使用Modbus / RTU或的Modbus / TCP协议从RS485或以太网网络传送到DAS或DCS远程监控

系统。该系统具有双冗余网络和长途电通信功能,它可以确保通信网络的干扰抑制能力和可靠性。基于高性能嵌入式ARM微处理器的新一代远程数据采集和监控系统具有重要的应用意义。

整个系统的结构设计

基于嵌入式ARM的平台的远程数据采集和监控系统的整个结构图在以下的图1中展示。在这系统的计划中,通过使用广泛用于多种行业如电气电力,石油,化工,冶金,钢铁,运输等的嵌入式ARM处理器来开发远程I / O数据采集模块。该系统主要用于的集中采购和将各种电和热信号如电压,热电阻,热电偶在生产过程中进行数字转换。转换的数据可直接在液晶显示器上显示,也可以通过使用的Modbus / RTU或的Modbus / TCP协议的RS485总线或以太网网络通信接口被发送到嵌入式控制器。嵌入控制器平台的数据通过进一步以太网的分析和处理被传送至远程监控中心的工作站。与此同时,这些数据可以存储在远程监控中心数据库服务器的实时数据库中。该系统具有双冗余网络和远程通讯功能,它可以确保通信网络的干扰抑制能力和可靠性。

基于嵌入式ARM远程I / O数据采集系统的硬件平台使用32位ARM嵌入式微处理器和软件平台使用的是开源的并且可移植,削减和巩固的实时多任务操作系统的第二代UC / OS核心。实时操作系统(RTOS)使设计和应用的扩大变得非常容

易,增加新的功能时也没多大变化。通过几个独立的任务的应用,实时操作系统使得应用的设计过程极为简单。

系统的硬件设计

基于嵌入式ARM平台的远程I / O数据采集系统具有很高的普遍性,每个购置设备配备24收购方式的I / O渠道且彼此孤立。每个I / O通道可以选择不同的电压和电流信号,以及温度信号如热电阻,热电偶等。在05V的,010毫安和4100TL智能嵌入式以太网串口转换模块。该ZNE500mV的电压信号可以直接接到模拟多路复用器(复用器)的INPx正极和INNx负极。45V的电压信号必须用阻抗转换。热电阻的电阻信号如Cu50,Cu100,Pt50和Pt100应在接到某些频道的复用器INPx正极和INNx负极前连接一1毫安的恒流源。

图4显示了使用16位ADC芯片AD7715的ADC信号电路。芯片与系统的连接非常简单,只需要CS(芯片选择),SLCK(系统时钟),DIN(数据输入),DOUT(数据输出)和DRDY(数据准备)5根线。

由于ARM微处理器具有高速,低功耗,低电压等优点,这使它在低噪音,纹波权力,瞬态响应性能,时钟来源的稳定,功率控制和许多其他方面需要有更高的要求。为了改善系统的可靠性该系统复位电路中使用特殊的微处理器电源监测芯片MAX708S。图5展示了该系统复位电路。

系统软件的设计与实现

基于嵌入式ARM平台的远程I / O数据采集系统的软件使用的是开源的并且可移植,削减和巩固的实时多任务操作系统的第二代UC / OS核心。RTOS的关键部分是实时多任务的核心,其基本功能包括任务管理,资源管理,系统管理,计时器管理,内存管理,信息管理,队列管理等。通过API服务职能核心使用这些功能。

该系统软件平台使用的是单一化的uC/ OS第二代实时简化操作系统核心,使整个结构系统简单和应用层次复杂。整个系统的设计包括操作系统的任务和一系列的用户应用程序。系统的主要职能是实现系统硬件和操作系统的初始化。硬件初始化包括中断,键盘,液晶显示器等。操作系统初始化包括控制模块和事件控制,在多任务调度前,至少有一个任务开始。一个开端任务已建立在这一系统,这系统主要负责初始化和启动的时钟,开办中断,通信任务模块的初始化,以及任务分工等。为了完成实时多任务系统的多种职能那个任务必须被划分。

图6显示系统软件的功能任务。根据任务的重要性和实时要求,系统的应用曾划分为六个不同优先级的任务,其中包括A / D数据采集任务,系统监控,接受队列,数据传送,键盘输入,液晶显示屏显示。A / D数据采集任务要求最高的实时要求和液晶显示器显示任务是最低的。因为每个任务都有不同的优先事项,通过使用系统挂断功能或延迟功能更高的优先任务可以开始已经准备好的任务。

图7显示的是AD7715的数据转换流。A / D转换器的应用是数据采集系统的一个重要组成部分。在uS/ OS的第二代实时操作系统的核心中,A / D驱动程序的实现过程主要取决于A / D转换器的转换时间,有转换价值的模拟频率,输入通

道的数量,转换频率等等。典型的A / D转换电路由模拟复用器(复用器),放大器和模拟到数字转换器(ADC)组成。

图8显示了申请程序转移的驱动程序。驱动程序可以在模拟通道读取由复用器,那么几微秒的延迟,以便使信号通过多路开关,并使其稳定。然后,当转换开始时,ADC被触发,并且驱动程序在一个周期内等待ADC的触发,直到完成转换。当等待的进展,该驱动程序检测ADC的状态信号。如果等待时间比规定的时间越长,周期应该结束。在等待的周期时间,如果转换完成ADC的信号被检测到,驱动程序应改为转换的结果,然后将结果返回给应用程序。

图9显示了缓冲区和信号量的序列接收图。由于外围串行设备的存在CPU的运行速度匹配,一个缓冲区是必要的,当数据发送到序列,它必须被写入缓冲区,然后通过串行逐一地被发送出去。当从串行端口收到数据,这些数据将不会被处理直到收到一些字节,因此先前的数据可以存储在缓冲区中。在实践中,两个缓冲区,一个接收缓冲区和一个发送缓冲区,它们是需要从内存开放出来。在这里缓冲区像循环队列数据结构一样被定义。

由于uC/OS-II提供额外时间等待机制的信号,串口也具有额外的阅读和写作能力。如果收到的数据信号初值为0,它表示循环缓冲区是空的。在中断收到后,ISR从UART接受缓冲区中读到收到的数据,并投入接收缓冲区域,最后通过收到的数据开始用户执行读操作的的任务。在整个过程中,变量价值目前字节在存储缓冲区中的字节的变量值是可以被询问的,这能够表明接收缓冲区是否已满。为了降低数据丢失的可能性和避免浪费存储空间应合理地设置缓冲区的大小。

结论

随着工业过程控制领域的快速发展和网络,智能,数字化分布式控制系统广泛应用,有必要发展对数据准确性和控制可靠性要求更高的系统。由于较差的实时性和可靠性基于单片机数据采集系统已逐步被淘汰。随着嵌入式ARM处理器的迅速普及,ARM处理器替代单芯片实现数据采集与控制成为了一种新的趋势。嵌入式ARM系统能够适应数据采集系统的严格要求,如功能,可靠性,成本,大小,耗电量等等。

在本文中一种基于ARM的嵌入式远程I / O数据采集系统已被研究和开发,其硬件平台采用32位嵌入式ARM处理器和软件平台的使用开源的RTOS uS/ OS-Ⅱ核心。该系统可广泛应用于电力,石油,化工,冶金,钢铁,交通运输等方面。这是主要用于收集和监测各种电气和热信号,如电压,电流,热电阻,生产过程中的热电偶数据。然后通过RS485或以太网接口将这些数据发送到远程的DAS,DCS控制系统的监测系统。该系统具有双冗余网络和长途通信功能,它可以确保干扰抑制和通信网络的可靠性。

第五篇:采用服务器端嵌入式脚本语言PHP3进行Linux下的网站开发

中国搜课网 http://www.xiexiebang.com

课件 教案 试题 论文 图书 中考 高考 新课标

采用服务器端嵌入式脚本语言PHP3进行Linux下的网站开发 ux下安装,不过如果用于商业用途需要付费.PostgreSQL也是Linux下的免费数据库,RedHat5里面就带了,不过我没有用过,就不说了.mSQL与MySQL既然本来就是差不多的两个东西,PHP中对它们的访问语句也都差不多,例如msql_close与mysql_close就分别完成同样的关闭动作.所以以下介绍时只对mysql介绍,msql的访问语句只需换个前缀即可(特殊情况另行说明).注意:mSQL与MySQL访问函数都需要有相应的权限才能运行.(1)mysql_connect(主机,用户名,口令);返回一个连接号.注意:mysql各用户的口令可以随该用户所在机器IP地址不同而改变.另外,mSQL没有用户名机制,所以msql_connect只需要一个主机参数.主机可以是IP地址或域名.(2)mysql_create_db(数据库名);(3)mysql_select_db(数据库名,连接号);连接一个数据库.(4)mysql_query(SQL语句,连接号);如果SQL语句是select,则返回一个结果号.否则返回的值可以不理会.如果失败,返回false.(5)mysql_fetch_array(结果号);取出下一行,返回一个数组.可以用数字下标访问(第一个字段是下标 0),《采用服务器端嵌入式脚本语言PHP3进行Linux下的网站开发》一文由中国搜课网搜集整理,版权归作者所有,转载请注明出处!

中国搜课网 http://www.xiexiebang.com 提供中小学全科课件、教案、论文、中高考试题、新课标资源、电子图书搜索与下载服务。

下载嵌入式Linux系统下I2C设备驱动程序的开发(范文模版)word格式文档
下载嵌入式Linux系统下I2C设备驱动程序的开发(范文模版).doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐