当前位置:首页 > 物联网 > 智能应用
[导读]分析RX-8025实时时钟的工作原理和Linux的I2C总线驱动程序,构建了高速公路视频监控系统下基于I2C实时时钟控制系统,完成了基于ARM和Linux的I2C驱动程序设计、I2C应用程序设计和实时时钟控制应用程序设计,实现了同步实时时钟,并应用于高速公路视频监控嵌入式系统中,能进行准确计时和系统时钟同步,具有良好的效果和较高的社会应用价值。

摘要:分析RX-8025实时时钟的工作原理和Linux的I2C总线驱动程序,构建了高速公路视频监控系统下基于I2C实时时钟控制系统,完成了基于ARM和Linux的I2C驱动程序设计、I2C应用程序设计和实时时钟控制应用程序设计,实现了同步实时时钟,并应用于高速公路视频监控嵌入式系统中,能进行准确计时和系统时钟同步,具有良好的效果和较高的社会应用价值。

随着社会的发展,汽车不断增多,高速公路上违章的车辆也逐渐增多,为了构建一个平安交通和智能交通,视频监控系统在交通行业的应用也越来越多,为了能对高速公路进行监控,高清视频监控也应用越来越广泛。

文中将研究详细分析RX8025和I2C的工作原理和通信协议和Linux的I2C总线驱动程序,设计一个应用在高速公路视频监控的基于I2C的RX-8025实时时钟控制系统,为高速公路的高清视频监控提供一个设计方案。

1 高速公路视频监控系统以及实时时钟系统设计

本研究课题的高速公路高清视频监控系统采用TI公司的TMS320DM368,DM368是一款面向多媒体技术应用的高性能芯片,功能强大,集成了ARM9、硬件编码协处理引擎(HDV ICP)、图像处理子系统(VPSS)。DM368最高可以支持H.264编码1080P格式30帧/s的速度。该处理器有I2C总线等外围接口等,其中ARM9运行性能稳定的Linux嵌入式操作系统。

视频监控系统中实时时钟控制的设计采用DM368的I2C总线接口,设计基于ARM9的I2C云台电机,完成驱动程序设计和应用程序设计,以及应用程序控制RX-8025实时时钟,应用于视频监控系统中,达到全方位的高速公路视频监控。

2 RX-8025实时时钟硬件构成和通信协议

2.1 RX-8025简介

RX-8025是一种具有高精度,包括32.768 kHz晶振时钟I2C总线接口的实时时钟芯片,该芯片提供的功能有6个中断,2个系统闹钟功能、电源电压监测和数字时钟精度调节功能来满足不同精度要求,其中计时功能可以进行至阳历二位数和年、月、日、时、分、秒为止的数据设定,包括计时和读取,当阳历的下二位数为4的倍数时,可自动识别至2099年。因此RX-8025适用于高清视频监控的嵌入式系统,用于计时同步。

2.2 RX-8025管脚功能

SCL:I2C通信用的串行时钟输入,与时钟信号同步。

SDA:与I2C通信串行时钟同步,进行地址、数据、应答等的输入输出。

FOUT:由FOE控制的32.768 kHZ时钟输出端;

FOE:控制FOUT输出时钟信号的输入脚内置,当它接高电平时,FOUT脚输出时钟信号;

RX-8025使用I2C和外围芯片进行数据通信,因此,本系统中ARM9和RX-8025通信需要通过I2C总线,因此需要完成Linux在ARM9的I2C驱动。

2.3 I2C硬件构成和通信协议

I2C总线是由双向数据线和时钟线构成的二线制串行总线,总线采用主从双向通信,即总线上在某一时刻只有一个主设备总线上的其他设备都作为从设备,任何能够进行发送和接收的设备都可以成为主设备,但是在同一时间内只能有一个设备作为主设备,通常为处理器,其他器件作为从设备与主设备进行通信,采用唯一的 I2C地址识别。

如图2所示I2C的工作时序图所示,I2C总线在传送数据过程中使用了3种信号。1)开始信号:SCL为高电平时,SDA由高电平向低电平跳变,表示将要开始传送数据;2)应答信号:从设备在接收到1个字节数据后向主设备发出一个低电平脉冲应答信号,表示已收到数据,主设备根据从设备的应答信号做出是否继续传输数据的操作;3)结束信号:为低电平时由低电平向高电平跳变,表示数据传送结束。

总线具体的通信工作原理:主设备首先发出开始信号,接着发送的1个字节的数据,其由高7位地址码和最低1位方向位组成。系统中所有从设备将自己的地址与主设备发送到总线上的地址进行比较,如果从设备地址与总线上的地址相同,该设备就是与主设备进行数据传输的设备。接着进行数据传输,根据方向位,主设备接收从设备数据或发送数据到从设备。当数据传送完成后,主设备发出一个停止信号,释放I2C总线,然后所有从设备等待下一个开始信号的到来。

3 I2C的LinuxX和ARM驱动设计

3.1 Linux2.6.32的I2C驱动分析

I2C由主设备和从设备构成,通信上通过识别I2C地址进行通信,即可以存在多个i2c adapter适配器和多个外设i2cdevice,Linux的I2C驱动采用分层设计实现的思想,层与层之间不存在耦合,增加adapter和增加device不会影响其他驱动,具体分层如下。

第一层:提供i2c adapter的硬件驱动,探测、初始化i2cadapter(如申请I2C地址和中断号),驱动处理器控制的i2cadapter在硬件上产生信号(开始、停止、应答)以及处理i2c中断,涉及图2中的硬件实现层;

第二层:提供i2c adapter的algorithm,用具体适配器的函数来填充i2c_algorithm的master_xfer函数指针,并把赋值后的 i2c_algorithm,再赋值给i2c_adapter的成员指针,主要涉及图2中访问抽象层、i2c核心层:

第三层:实现i2c设备驱动中的i2c_driver接口,用具体的i2c device设备的i2c_add_driver()、i2c_del_driver()方法赋值给i2c_driver的成员函数指针,采用Probe探寻方式实现设备device与总线的挂接,涉及图2中的driver驱动层,此层是本文实现的驱动部分;

第四层:实现i2c设备所对应的具体device的驱动,i2c_driver只是实现设备与总线的挂接,挂接在总线上的设备千差万别的,所以要实现具体设备device的write()、read()、ioctl()等方法,赋值给file_operations,然后注册字符设备,涉及图2中的 driver驱动层,此层是本文实现的驱动部分。

第一层和第二层又叫i2c总线驱动(bus driver),第三层和第四层属于i2c设备驱动(device driver)。在Linux驱动架构中,不需要再开发总线驱动,因为Linux内核几乎集成所有总线驱动,驱动设计主要是实现第三层和第四层的设备驱动。

3.2 Linux系统中i2c驱动中结构体分析

Linux中的I2C驱动分层设计涉及了多个数据结构,数据结构的设计在I2C分层设计中起了非常重要的作用,数据结构有i2c_driver、i2c_client、i2c_adapter,下面具体分析这三个数据结构之间的关系。

1)i2c_driver与i2c_client

i2c_driver对应Linux的一种驱动方法,它不对应于任何的物理实体。

i2c_client对应于真实的物理设备,每个I2C设备都需要一个i2c_client来描述,i2c_client代表一个挂载到I2C总线上的 I2C从设备,该设备所需要的数据结构,包括该I2C从设备所依附的I2C主设备i2c_adapter,I2C从设备的驱动程序i2c driver,作为i2c从设备所通用的成员变量;

i2c_driver与i2c_client发生关联的时刻在i2c_driver的attach_adapterC)函数被运行时,attach_adapter()会探测物理设备,当确定一个I2C从设备存在时,把该client使用的i2c_client数据结构的 adapter指针指向对应的i2c_adapter。

2)i2c_adpater与i2c_client

i2c_adpater与i2c_client的关系与I2C硬件体系中适配器和设备的关系一致,即i2c_client依附于i2c_adpater,一个i2c_adpater上可以连接多个I2C设备,i2c_adpater中包括依附于它的i2c_client的链表。

3)结构体i2c_msg解析

i2c_msg用于I2C驱动第三层和第二层的数据交换,i2c_transter通过调用master_xfer函数传递i2c_msg结构体,结构体包括成员变量有设备地址addr,消息长度len和消息数据buf以及读写标志的宏定义,具体如下:

3.3 RX8025实时时钟的I2C驱动设计

根据Linux2.6.32的驱动分层设计,驱动的第一层和第二层在Linux-2.6.32中以及集成了成熟驱动,文中重点讲述第三层和第四层驱动程序的设计。

驱动设计采用字符设备方式来实现,RX8025_I2C_Init()和RX8025_I2C_Exit()实现驱动的初始化以及退出,初始化最后调用 edev_add()实现字符设备的添加,添加过程中通过完善file_operations的结构体,填充了以下4个结构体变量。

这4个用户空间接口驱动函数,完成注册后,用户空间可以采用文件读写的方式来操作I2C设备了,RX8025_Open函数实现打开实时时钟字符设备,RX8025_Close函数实现关闭实时时钟字符设备,数据交换通过接口RX8025_Read和RX8025_Write来实现,主要实现设备的数据读取和数据写入,从而完成用户空间和驱动程序以及硬件设备的数据交换,i2c_ board_info结构体中,“RX8025_i2c”定义为RX8025的I2C名字,0x32为RX8025的地址,该数据结构的填充在 Board-dm368-evm.c文件,Board-dm368-evm.c文件包含了大部分驱动的数据信息,系统启动会自动加载相关驱动信息。一个 i2c_client就代表着一个位于adapter适配器上,地址为client->addr,使用设备驱动的一个i2c设备。

本设计主要完整时钟数据的读取,用于同步到系统中,因此重点实现RX8025_Read接口函数,RX8025_Read利用i2c_transfer函数调用master_xfer实现时钟数据的读取,具体实现过程如图4所示,其中i2c_probe和RX8025_Read实现部分代码如下:

4 RX8025实时时钟I2C应用程序设计

根据I2C驱动程序设计,要正确调用驱动程序,需要实现驱动的用户空间调用函数,主要是实现open、read和write等函数,因此在应用层的接口函数中也需要实现此函数。

i2c_Init()函数实现open函数,调用驱动函数打开该设备驱动,定义一个数据结构体为:

设备通过open函数正确打开后,就能通过读写函数进行数据交换了,该结构体主要用来实现用户空间和内核空间的调用的数据交换,下面通过read数据读取函数说明具体的实现过程,其中buf用于保存读取数据,count用于读取数据的字节数。

如图5所示,可以通过人机交互设置实时时钟或读取实时时钟、同步系统时钟,调用setTime()和synTime()接口函数来调用write()和read()文件IO读写文件,最终调用write()和read()的字符驱动函数实现对I2C驱动的调用。

5 RX8025实时时钟应用程序设计

实时时钟在本系统中有两个功能,一是通过QT图形界面软件输入时间信息来设置实时时钟的时间,可以在界面年月日时分秒信息,通过调用应用程序函数达到时间设置的目的,二是从而带动视频监控的摄像头朝不同方位转动以及定位,如图所示。根据协议,应用程序设计主要实现以下操作:

1)设置当前的时钟信息,函数接口为setTime();

2)同步实时时钟的时钟信息到系统,函数接口为synTime();

下面通过时钟同步函数的接口函数synTime(),详细RX8025实时时钟应用程序接口函数的实现过程,通过调用用户空间和内核空间的read()函数实现对驱动的调用,最终通过I2C总线设置时钟和读取时钟数据。

通过实现人机交互操作程序,实现设置当前的时钟信息和同步实时时钟的时钟信息到系统,通过调用相应的接口函数,实现对I2C应用程序的调用,最后通过read、write函数实现对RX-8025的控制,具体实现如图5所示。

6 结束语

本系统设计实现了一款基于TMS320DM368的高清视频监控系统中的实时时钟系统控制设计,完成了实时时钟RX8025的I2C驱动程序的分析以及设计,并且完成了i2c应用程序的设计和实时时钟RX8025控制应用程序设计,达到了应用目的。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

近日,英特尔联合华铭、锐宝智联和育脉共同打造了融合掌静脉特征识别技术的智能城市轨道交通自动售检票系统(AFC)方案,将掌静脉特征识别技术应用于城市轨道交通场景,实现了轨道交通自动售检票系统的技术革新。

关键字: 英特尔 智慧交通

为增进大家对鼠标的认识,本文将对鼠标左键单击变双击的维修方法以及鼠标单击异常的解决方法予以介绍。

关键字: 鼠标 指数 驱动

以下内容中,小编将对显卡驱动的相关内容进行着重介绍和阐述,希望本文能帮您增进对显卡驱动的了解,和小编一起来看看吧。

关键字: 显卡 驱动 显卡驱动

双系统将是下述内容的主要介绍对象,通过这篇文章,小编希望大家可以对双系统的相关情况以及信息有所认识和了解,详细内容如下。

关键字: 双系统 Windows Linux

如今,轨道交通的数字化、智能化转型日渐成为众多城市竞相推进的建设方向,基于此,英特尔联合华铭、锐宝智联和育脉共同打造融合掌静脉特征识别技术的智能城市轨道交通自动售检票系统(Automatic Fare Collectio...

关键字: 智慧交通

随着科技的不断进步,人脸识别技术已经成为了当今社会最为热门的技术之一,被广泛应用于安防、金融、教育、医疗等领域。

关键字: 人脸识别 视频监控 摄像机

安装Linux操作系统并不复杂,下面是一个大致的步骤指南,以帮助您完成安装。1. 下载Linux发行版:首先,您需要从Linux发行版官方网站下载最新的ISO镜像文件。

关键字: Linux 操作系统 ISO镜像

计算机是由一堆硬件组成的,为了有限的控制这些硬件资源,于是就有了操作系统的产生,操作系统是软件子系统的一部分,是硬件基础上的第一层软件。

关键字: Linux 操作系统 计算机

Linux操作系统是一套免费使用和自由传播的类Unix操作系统,通常被称为GNU/Linux。它是由林纳斯·托瓦兹在1991年首次发布的,并基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Lin...

关键字: Linux 操作系统

所谓进程间通信就是在不同进程之间传播或交换信息,它是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息;还可以让一个程序能够在同一时间里处理许多用户的需求。

关键字: Linux 进程通信 编程接口
关闭
关闭